From bc2aa36768c06429bf885744846fcc5a1540ecc5 Mon Sep 17 00:00:00 2001 From: clemens-fricke Date: Wed, 7 Feb 2024 13:32:22 +0000 Subject: [PATCH] deploy: a7ede0af54d2de1db28d7723d9c9159f1c72cc94 --- .buildinfo | 4 + .doctrees/CONTRIBUTING.doctree | Bin 0 -> 11738 bytes .doctrees/_generated/gustaf.create.doctree | Bin 0 -> 9467 bytes .../_generated/gustaf.create.edges.doctree | Bin 0 -> 6544 bytes .../gustaf.create.edges.from_data.doctree | Bin 0 -> 12672 bytes .../gustaf.create.faces.box.doctree | Bin 0 -> 14107 bytes .../_generated/gustaf.create.faces.doctree | Bin 0 -> 9309 bytes .../gustaf.create.faces.to_quad.doctree | Bin 0 -> 7512 bytes .../gustaf.create.faces.to_simplex.doctree | Bin 0 -> 10010 bytes .../_generated/gustaf.create.vertices.doctree | Bin 0 -> 6773 bytes .../gustaf.create.vertices.raster.doctree | Bin 0 -> 9476 bytes .../gustaf.create.volumes.box.doctree | Bin 0 -> 11653 bytes .../_generated/gustaf.create.volumes.doctree | Bin 0 -> 6493 bytes .doctrees/_generated/gustaf.doctree | Bin 0 -> 14301 bytes .../gustaf.edges.Edges.centers.doctree | Bin 0 -> 6213 bytes .../gustaf.edges.Edges.const_edges.doctree | Bin 0 -> 6061 bytes .../gustaf.edges.Edges.const_elements.doctree | Bin 0 -> 6354 bytes .../gustaf.edges.Edges.dashed.doctree | Bin 0 -> 7598 bytes .../_generated/gustaf.edges.Edges.doctree | Bin 0 -> 28608 bytes .../gustaf.edges.Edges.edges.doctree | Bin 0 -> 6201 bytes .../gustaf.edges.Edges.elements.doctree | Bin 0 -> 6605 bytes .../gustaf.edges.Edges.kind.doctree | Bin 0 -> 4081 bytes ...af.edges.Edges.referenced_vertices.doctree | Bin 0 -> 6243 bytes ...Edges.remove_unreferenced_vertices.doctree | Bin 0 -> 6535 bytes .../gustaf.edges.Edges.shrink.doctree | Bin 0 -> 8156 bytes .../gustaf.edges.Edges.single_edges.doctree | Bin 0 -> 6313 bytes .../gustaf.edges.Edges.sorted_edges.doctree | Bin 0 -> 6311 bytes .../gustaf.edges.Edges.to_vertices.doctree | Bin 0 -> 5793 bytes .../gustaf.edges.Edges.unique_edges.doctree | Bin 0 -> 6211 bytes .../gustaf.edges.Edges.update_edges.doctree | Bin 0 -> 4956 bytes ...gustaf.edges.Edges.update_elements.doctree | Bin 0 -> 7601 bytes .../gustaf.edges.Edges.whatami.doctree | Bin 0 -> 5664 bytes .../gustaf.edges.EdgesShowOption.doctree | Bin 0 -> 6183 bytes .doctrees/_generated/gustaf.edges.doctree | Bin 0 -> 7270 bytes .../_generated/gustaf.faces.Faces.BC.doctree | Bin 0 -> 3612 bytes .../gustaf.faces.Faces.const_edges.doctree | Bin 0 -> 6061 bytes .../gustaf.faces.Faces.const_faces.doctree | Bin 0 -> 6031 bytes .../gustaf.faces.Faces.dashed.doctree | Bin 0 -> 6886 bytes .../_generated/gustaf.faces.Faces.doctree | Bin 0 -> 27114 bytes .../gustaf.faces.Faces.edges.doctree | Bin 0 -> 6246 bytes .../gustaf.faces.Faces.faces.doctree | Bin 0 -> 5240 bytes .../gustaf.faces.Faces.kind.doctree | Bin 0 -> 4081 bytes .../gustaf.faces.Faces.single_faces.doctree | Bin 0 -> 6329 bytes .../gustaf.faces.Faces.sorted_faces.doctree | Bin 0 -> 6153 bytes .../gustaf.faces.Faces.to_edges.doctree | Bin 0 -> 6752 bytes .../gustaf.faces.Faces.to_subelements.doctree | Bin 0 -> 7436 bytes .../gustaf.faces.Faces.unique_faces.doctree | Bin 0 -> 6077 bytes .../gustaf.faces.Faces.update_edges.doctree | Bin 0 -> 4195 bytes .../gustaf.faces.Faces.update_faces.doctree | Bin 0 -> 4956 bytes .../gustaf.faces.Faces.whatami.doctree | Bin 0 -> 5275 bytes .../gustaf.faces.Faces.whatareyou.doctree | Bin 0 -> 6817 bytes .../gustaf.faces.FacesShowOption.doctree | Bin 0 -> 6183 bytes .doctrees/_generated/gustaf.faces.doctree | Bin 0 -> 7119 bytes ...lpers.data.ComputedData.depends_on.doctree | Bin 0 -> 8670 bytes .../gustaf.helpers.data.ComputedData.doctree | Bin 0 -> 7964 bytes ...staf.helpers.data.ComputedMeshData.doctree | Bin 0 -> 6889 bytes ...staf.helpers.data.DataHolder.clear.doctree | Bin 0 -> 4414 bytes .../gustaf.helpers.data.DataHolder.doctree | Bin 0 -> 13758 bytes ...gustaf.helpers.data.DataHolder.get.doctree | Bin 0 -> 7996 bytes ...staf.helpers.data.DataHolder.items.doctree | Bin 0 -> 5462 bytes ...ustaf.helpers.data.DataHolder.keys.doctree | Bin 0 -> 5432 bytes ...gustaf.helpers.data.DataHolder.pop.doctree | Bin 0 -> 7702 bytes ...taf.helpers.data.DataHolder.values.doctree | Bin 0 -> 5480 bytes ...taf.helpers.data.TrackedArray.copy.doctree | Bin 0 -> 5057 bytes .../gustaf.helpers.data.TrackedArray.doctree | Bin 0 -> 10881 bytes ...helpers.data.TrackedArray.modified.doctree | Bin 0 -> 4408 bytes ...taf.helpers.data.TrackedArray.view.doctree | Bin 0 -> 5077 bytes ...gustaf.helpers.data.Unique2DFloats.doctree | Bin 0 -> 14119 bytes ...af.helpers.data.Unique2DFloats.ids.doctree | Bin 0 -> 4172 bytes ...s.data.Unique2DFloats.intersection.doctree | Bin 0 -> 4449 bytes ...elpers.data.Unique2DFloats.inverse.doctree | Bin 0 -> 4228 bytes ...helpers.data.Unique2DFloats.values.doctree | Bin 0 -> 4214 bytes ...lpers.data.Unique2DIntegers.counts.doctree | Bin 0 -> 4235 bytes ...staf.helpers.data.Unique2DIntegers.doctree | Bin 0 -> 13399 bytes ....helpers.data.Unique2DIntegers.ids.doctree | Bin 0 -> 4193 bytes ...pers.data.Unique2DIntegers.inverse.doctree | Bin 0 -> 4249 bytes ...lpers.data.Unique2DIntegers.values.doctree | Bin 0 -> 4244 bytes ...f.helpers.data.VertexData.as_arrow.doctree | Bin 0 -> 12292 bytes ....helpers.data.VertexData.as_scalar.doctree | Bin 0 -> 8680 bytes .../gustaf.helpers.data.VertexData.doctree | Bin 0 -> 9908 bytes .../_generated/gustaf.helpers.data.doctree | Bin 0 -> 15923 bytes ...af.helpers.data.make_tracked_array.doctree | Bin 0 -> 10113 bytes .doctrees/_generated/gustaf.helpers.doctree | Bin 0 -> 9405 bytes ...helpers.notebook.K3DPlotterN.clear.doctree | Bin 0 -> 5086 bytes ...helpers.notebook.K3DPlotterN.close.doctree | Bin 0 -> 4453 bytes ...lpers.notebook.K3DPlotterN.display.doctree | Bin 0 -> 5371 bytes ...ustaf.helpers.notebook.K3DPlotterN.doctree | Bin 0 -> 13988 bytes ....helpers.notebook.K3DPlotterN.show.doctree | Bin 0 -> 10064 bytes .../gustaf.helpers.notebook.doctree | Bin 0 -> 9160 bytes .../gustaf.helpers.notebook.get_shape.doctree | Bin 0 -> 8210 bytes ...lpers.options.Option.allowed_types.doctree | Bin 0 -> 3871 bytes ...af.helpers.options.Option.backends.doctree | Bin 0 -> 3804 bytes ...taf.helpers.options.Option.default.doctree | Bin 0 -> 3791 bytes ...helpers.options.Option.description.doctree | Bin 0 -> 3843 bytes .../gustaf.helpers.options.Option.doctree | Bin 0 -> 17521 bytes .../gustaf.helpers.options.Option.key.doctree | Bin 0 -> 3739 bytes ...helpers.options.SetDefault.default.doctree | Bin 0 -> 3847 bytes .../gustaf.helpers.options.SetDefault.doctree | Bin 0 -> 9612 bytes ...taf.helpers.options.SetDefault.key.doctree | Bin 0 -> 3795 bytes ...f.helpers.options.ShowOption.clear.doctree | Bin 0 -> 5500 bytes ...ions.ShowOption.copy_valid_options.doctree | Bin 0 -> 8079 bytes .../gustaf.helpers.options.ShowOption.doctree | Bin 0 -> 18684 bytes ...taf.helpers.options.ShowOption.get.doctree | Bin 0 -> 7916 bytes ...f.helpers.options.ShowOption.items.doctree | Bin 0 -> 5928 bytes ...af.helpers.options.ShowOption.keys.doctree | Bin 0 -> 5904 bytes ...taf.helpers.options.ShowOption.pop.doctree | Bin 0 -> 6596 bytes ....helpers.options.ShowOption.update.doctree | Bin 0 -> 6308 bytes ...pers.options.ShowOption.valid_keys.doctree | Bin 0 -> 6012 bytes ....helpers.options.ShowOption.values.doctree | Bin 0 -> 5946 bytes .../_generated/gustaf.helpers.options.doctree | Bin 0 -> 11216 bytes ...helpers.options.make_valid_options.doctree | Bin 0 -> 6829 bytes ...elpers.raise_if.ModuleImportRaiser.doctree | Bin 0 -> 9569 bytes .../gustaf.helpers.raise_if.doctree | Bin 0 -> 9217 bytes ...rs.raise_if.invalid_inherited_attr.doctree | Bin 0 -> 14532 bytes .../_generated/gustaf.io.default.doctree | Bin 0 -> 6079 bytes .../_generated/gustaf.io.default.load.doctree | Bin 0 -> 7328 bytes .doctrees/_generated/gustaf.io.doctree | Bin 0 -> 11635 bytes .../gustaf.io.ioutils.abs_fname.doctree | Bin 0 -> 6462 bytes ...staf.io.ioutils.check_and_makedirs.doctree | Bin 0 -> 6084 bytes .../_generated/gustaf.io.ioutils.doctree | Bin 0 -> 7734 bytes .doctrees/_generated/gustaf.io.meshio.doctree | Bin 0 -> 7789 bytes .../gustaf.io.meshio.export.doctree | Bin 0 -> 14493 bytes .../_generated/gustaf.io.meshio.load.doctree | Bin 0 -> 7658 bytes .doctrees/_generated/gustaf.io.mfem.doctree | Bin 0 -> 7845 bytes .../_generated/gustaf.io.mfem.export.doctree | Bin 0 -> 7021 bytes .../_generated/gustaf.io.mfem.load.doctree | Bin 0 -> 5908 bytes .doctrees/_generated/gustaf.io.mixd.doctree | Bin 0 -> 9175 bytes .../_generated/gustaf.io.mixd.export.doctree | Bin 0 -> 9725 bytes .../_generated/gustaf.io.mixd.load.doctree | Bin 0 -> 13444 bytes .../gustaf.io.mixd.make_mrng.doctree | Bin 0 -> 7359 bytes .doctrees/_generated/gustaf.io.nutils.doctree | Bin 0 -> 9026 bytes .../gustaf.io.nutils.export.doctree | Bin 0 -> 7262 bytes .../_generated/gustaf.io.nutils.load.doctree | Bin 0 -> 6712 bytes ...gustaf.io.nutils.to_nutils_simplex.doctree | Bin 0 -> 7244 bytes .doctrees/_generated/gustaf.settings.doctree | Bin 0 -> 4416 bytes .doctrees/_generated/gustaf.show.doctree | Bin 0 -> 9127 bytes ...staf.show.interpolate_vedo_dictcam.doctree | Bin 0 -> 9292 bytes .../gustaf.show.make_showable.doctree | Bin 0 -> 9288 bytes .doctrees/_generated/gustaf.show.show.doctree | Bin 0 -> 8982 bytes .../gustaf.utils.arr.bounds.doctree | Bin 0 -> 7440 bytes .../gustaf.utils.arr.bounds_diagonal.doctree | Bin 0 -> 7606 bytes .../gustaf.utils.arr.bounds_mean.doctree | Bin 0 -> 7374 bytes .../gustaf.utils.arr.bounds_norm.doctree | Bin 0 -> 7085 bytes .../gustaf.utils.arr.close_rows.doctree | Bin 0 -> 13657 bytes .doctrees/_generated/gustaf.utils.arr.doctree | Bin 0 -> 22921 bytes .../gustaf.utils.arr.enforce_len.doctree | Bin 0 -> 8569 bytes .../gustaf.utils.arr.is_one_of_shapes.doctree | Bin 0 -> 9110 bytes .../gustaf.utils.arr.is_shape.doctree | Bin 0 -> 8574 bytes ...gustaf.utils.arr.make_c_contiguous.doctree | Bin 0 -> 8562 bytes .../gustaf.utils.arr.rotate.doctree | Bin 0 -> 13672 bytes .../gustaf.utils.arr.rotation_matrix.doctree | Bin 0 -> 9684 bytes ...ls.arr.rotation_matrix_around_axis.doctree | Bin 0 -> 11694 bytes ...ustaf.utils.arr.select_with_ranges.doctree | Bin 0 -> 8003 bytes .../gustaf.utils.arr.unique_rows.doctree | Bin 0 -> 13200 bytes .../_generated/gustaf.utils.connec.doctree | Bin 0 -> 22650 bytes ...gustaf.utils.connec.faces_to_edges.doctree | Bin 0 -> 9794 bytes .../gustaf.utils.connec.hexa_to_quad.doctree | Bin 0 -> 9036 bytes ...taf.utils.connec.make_hexa_volumes.doctree | Bin 0 -> 7646 bytes ...ustaf.utils.connec.make_quad_faces.doctree | Bin 0 -> 7429 bytes ...gustaf.utils.connec.range_to_edges.doctree | Bin 0 -> 13297 bytes ...taf.utils.connec.sequence_to_edges.doctree | Bin 0 -> 8787 bytes ...f.utils.connec.sequentialize_edges.doctree | Bin 0 -> 13221 bytes .../gustaf.utils.connec.sorted_unique.doctree | Bin 0 -> 11100 bytes ...ustaf.utils.connec.subdivide_edges.doctree | Bin 0 -> 8534 bytes ...gustaf.utils.connec.subdivide_quad.doctree | Bin 0 -> 9222 bytes .../gustaf.utils.connec.subdivide_tri.doctree | Bin 0 -> 10240 bytes .../gustaf.utils.connec.tet_to_tri.doctree | Bin 0 -> 8664 bytes ...staf.utils.connec.volumes_to_faces.doctree | Bin 0 -> 9308 bytes .doctrees/_generated/gustaf.utils.doctree | Bin 0 -> 9171 bytes .../gustaf.utils.log.configure.doctree | Bin 0 -> 7392 bytes .../_generated/gustaf.utils.log.debug.doctree | Bin 0 -> 6350 bytes .doctrees/_generated/gustaf.utils.log.doctree | Bin 0 -> 10738 bytes .../_generated/gustaf.utils.log.info.doctree | Bin 0 -> 6334 bytes .../gustaf.utils.log.prepended_log.doctree | Bin 0 -> 7505 bytes .../gustaf.utils.log.warning.doctree | Bin 0 -> 6382 bytes .../gustaf.utils.tictoc.Tic.doctree | Bin 0 -> 10798 bytes .../gustaf.utils.tictoc.Tic.now.doctree | Bin 0 -> 4059 bytes .../gustaf.utils.tictoc.Tic.summary.doctree | Bin 0 -> 12121 bytes .../gustaf.utils.tictoc.Tic.toc.doctree | Bin 0 -> 7705 bytes .../_generated/gustaf.utils.tictoc.doctree | Bin 0 -> 6546 bytes .../gustaf.vertices.Vertices.bounds.doctree | Bin 0 -> 6177 bytes ....vertices.Vertices.bounds_diagonal.doctree | Bin 0 -> 6549 bytes ...ices.Vertices.bounds_diagonal_norm.doctree | Bin 0 -> 6084 bytes .../gustaf.vertices.Vertices.concat.doctree | Bin 0 -> 8207 bytes ...f.vertices.Vertices.const_vertices.doctree | Bin 0 -> 5708 bytes .../gustaf.vertices.Vertices.copy.doctree | Bin 0 -> 6028 bytes .../gustaf.vertices.Vertices.doctree | Bin 0 -> 30346 bytes .../gustaf.vertices.Vertices.kind.doctree | Bin 0 -> 4157 bytes ...f.vertices.Vertices.merge_vertices.doctree | Bin 0 -> 7622 bytes ....vertices.Vertices.remove_vertices.doctree | Bin 0 -> 7320 bytes ....vertices.Vertices.select_vertices.doctree | Bin 0 -> 7671 bytes .../gustaf.vertices.Vertices.show.doctree | Bin 0 -> 5796 bytes ...taf.vertices.Vertices.show_options.doctree | Bin 0 -> 6125 bytes .../gustaf.vertices.Vertices.showable.doctree | Bin 0 -> 6603 bytes ....vertices.Vertices.unique_vertices.doctree | Bin 0 -> 9188 bytes ....vertices.Vertices.update_vertices.doctree | Bin 0 -> 10399 bytes ...staf.vertices.Vertices.vertex_data.doctree | Bin 0 -> 6063 bytes .../gustaf.vertices.Vertices.vertices.doctree | Bin 0 -> 6264 bytes .../gustaf.vertices.Vertices.whatami.doctree | Bin 0 -> 6401 bytes ...gustaf.vertices.VerticesShowOption.doctree | Bin 0 -> 6279 bytes .doctrees/_generated/gustaf.vertices.doctree | Bin 0 -> 7391 bytes ...gustaf.volumes.Volumes.const_faces.doctree | Bin 0 -> 6087 bytes ...staf.volumes.Volumes.const_volumes.doctree | Bin 0 -> 6809 bytes .../_generated/gustaf.volumes.Volumes.doctree | Bin 0 -> 21632 bytes .../gustaf.volumes.Volumes.faces.doctree | Bin 0 -> 6744 bytes .../gustaf.volumes.Volumes.kind.doctree | Bin 0 -> 4133 bytes ...taf.volumes.Volumes.sorted_volumes.doctree | Bin 0 -> 6222 bytes .../gustaf.volumes.Volumes.to_faces.doctree | Bin 0 -> 6816 bytes ...taf.volumes.Volumes.unique_volumes.doctree | Bin 0 -> 6177 bytes ...ustaf.volumes.Volumes.update_faces.doctree | Bin 0 -> 4239 bytes ...taf.volumes.Volumes.update_volumes.doctree | Bin 0 -> 5050 bytes .../gustaf.volumes.Volumes.volumes.doctree | Bin 0 -> 6661 bytes .../gustaf.volumes.Volumes.whatareyou.doctree | Bin 0 -> 6901 bytes .../gustaf.volumes.VolumesShowOption.doctree | Bin 0 -> 6247 bytes .doctrees/_generated/gustaf.volumes.doctree | Bin 0 -> 7221 bytes .doctrees/details.doctree | Bin 0 -> 3072 bytes .doctrees/environment.pickle | Bin 0 -> 2486946 bytes .doctrees/index.doctree | Bin 0 -> 24661 bytes .doctrees/python_api.doctree | Bin 0 -> 3932 bytes .doctrees/references.doctree | Bin 0 -> 3039 bytes .doctrees/show_options.doctree | Bin 0 -> 109081 bytes .nojekyll | 0 CONTRIBUTING.html | 605 +++++++ _generated/gustaf.create.edges.from_data.html | 813 +++++++++ _generated/gustaf.create.edges.html | 779 ++++++++ _generated/gustaf.create.faces.box.html | 802 +++++++++ _generated/gustaf.create.faces.html | 785 ++++++++ _generated/gustaf.create.faces.to_quad.html | 814 +++++++++ .../gustaf.create.faces.to_simplex.html | 823 +++++++++ _generated/gustaf.create.html | 786 ++++++++ _generated/gustaf.create.vertices.html | 779 ++++++++ _generated/gustaf.create.vertices.raster.html | 804 +++++++++ _generated/gustaf.create.volumes.box.html | 801 +++++++++ _generated/gustaf.create.volumes.html | 779 ++++++++ _generated/gustaf.edges.Edges.centers.html | 798 ++++++++ .../gustaf.edges.Edges.const_edges.html | 795 ++++++++ .../gustaf.edges.Edges.const_elements.html | 798 ++++++++ _generated/gustaf.edges.Edges.dashed.html | 805 +++++++++ _generated/gustaf.edges.Edges.edges.html | 798 ++++++++ _generated/gustaf.edges.Edges.elements.html | 800 +++++++++ _generated/gustaf.edges.Edges.html | 848 +++++++++ _generated/gustaf.edges.Edges.kind.html | 786 ++++++++ ...ustaf.edges.Edges.referenced_vertices.html | 798 ++++++++ ...es.Edges.remove_unreferenced_vertices.html | 799 +++++++++ _generated/gustaf.edges.Edges.shrink.html | 801 +++++++++ .../gustaf.edges.Edges.single_edges.html | 799 +++++++++ .../gustaf.edges.Edges.sorted_edges.html | 798 ++++++++ .../gustaf.edges.Edges.to_vertices.html | 798 ++++++++ .../gustaf.edges.Edges.unique_edges.html | 799 +++++++++ .../gustaf.edges.Edges.update_edges.html | 787 ++++++++ .../gustaf.edges.Edges.update_elements.html | 798 ++++++++ _generated/gustaf.edges.Edges.whatami.html | 798 ++++++++ _generated/gustaf.edges.EdgesShowOption.html | 793 ++++++++ _generated/gustaf.edges.html | 782 ++++++++ _generated/gustaf.faces.Faces.BC.html | 786 ++++++++ .../gustaf.faces.Faces.const_edges.html | 795 ++++++++ .../gustaf.faces.Faces.const_faces.html | 798 ++++++++ _generated/gustaf.faces.Faces.dashed.html | 805 +++++++++ _generated/gustaf.faces.Faces.edges.html | 798 ++++++++ _generated/gustaf.faces.Faces.faces.html | 795 ++++++++ _generated/gustaf.faces.Faces.html | 845 +++++++++ _generated/gustaf.faces.Faces.kind.html | 786 ++++++++ .../gustaf.faces.Faces.single_faces.html | 799 +++++++++ .../gustaf.faces.Faces.sorted_faces.html | 798 ++++++++ _generated/gustaf.faces.Faces.to_edges.html | 798 ++++++++ .../gustaf.faces.Faces.to_subelements.html | 800 +++++++++ .../gustaf.faces.Faces.unique_faces.html | 798 ++++++++ .../gustaf.faces.Faces.update_edges.html | 787 ++++++++ .../gustaf.faces.Faces.update_faces.html | 787 ++++++++ _generated/gustaf.faces.Faces.whatami.html | 795 ++++++++ _generated/gustaf.faces.Faces.whatareyou.html | 799 +++++++++ _generated/gustaf.faces.FacesShowOption.html | 793 ++++++++ _generated/gustaf.faces.html | 781 ++++++++ ....helpers.data.ComputedData.depends_on.html | 806 +++++++++ .../gustaf.helpers.data.ComputedData.html | 795 ++++++++ .../gustaf.helpers.data.ComputedMeshData.html | 794 ++++++++ .../gustaf.helpers.data.DataHolder.clear.html | 787 ++++++++ .../gustaf.helpers.data.DataHolder.get.html | 803 +++++++++ .../gustaf.helpers.data.DataHolder.html | 810 +++++++++ .../gustaf.helpers.data.DataHolder.items.html | 795 ++++++++ .../gustaf.helpers.data.DataHolder.keys.html | 795 ++++++++ .../gustaf.helpers.data.DataHolder.pop.html | 801 +++++++++ ...gustaf.helpers.data.DataHolder.values.html | 795 ++++++++ ...gustaf.helpers.data.TrackedArray.copy.html | 787 ++++++++ .../gustaf.helpers.data.TrackedArray.html | 808 +++++++++ ...af.helpers.data.TrackedArray.modified.html | 787 ++++++++ ...gustaf.helpers.data.TrackedArray.view.html | 787 ++++++++ .../gustaf.helpers.data.Unique2DFloats.html | 813 +++++++++ ...ustaf.helpers.data.Unique2DFloats.ids.html | 788 ++++++++ ...pers.data.Unique2DFloats.intersection.html | 789 ++++++++ ...f.helpers.data.Unique2DFloats.inverse.html | 788 ++++++++ ...af.helpers.data.Unique2DFloats.values.html | 788 ++++++++ ....helpers.data.Unique2DIntegers.counts.html | 788 ++++++++ .../gustaf.helpers.data.Unique2DIntegers.html | 811 +++++++++ ...taf.helpers.data.Unique2DIntegers.ids.html | 788 ++++++++ ...helpers.data.Unique2DIntegers.inverse.html | 788 ++++++++ ....helpers.data.Unique2DIntegers.values.html | 788 ++++++++ ...staf.helpers.data.VertexData.as_arrow.html | 802 +++++++++ ...taf.helpers.data.VertexData.as_scalar.html | 802 +++++++++ .../gustaf.helpers.data.VertexData.html | 804 +++++++++ _generated/gustaf.helpers.data.html | 805 +++++++++ ...ustaf.helpers.data.make_tracked_array.html | 805 +++++++++ _generated/gustaf.helpers.html | 786 ++++++++ ...af.helpers.notebook.K3DPlotterN.clear.html | 787 ++++++++ ...af.helpers.notebook.K3DPlotterN.close.html | 787 ++++++++ ....helpers.notebook.K3DPlotterN.display.html | 789 ++++++++ .../gustaf.helpers.notebook.K3DPlotterN.html | 812 +++++++++ ...taf.helpers.notebook.K3DPlotterN.show.html | 798 ++++++++ .../gustaf.helpers.notebook.get_shape.html | 802 +++++++++ _generated/gustaf.helpers.notebook.html | 790 ++++++++ ....helpers.options.Option.allowed_types.html | 786 ++++++++ ...ustaf.helpers.options.Option.backends.html | 786 ++++++++ ...gustaf.helpers.options.Option.default.html | 786 ++++++++ ...af.helpers.options.Option.description.html | 786 ++++++++ _generated/gustaf.helpers.options.Option.html | 824 +++++++++ .../gustaf.helpers.options.Option.key.html | 786 ++++++++ ...af.helpers.options.SetDefault.default.html | 786 ++++++++ .../gustaf.helpers.options.SetDefault.html | 804 +++++++++ ...gustaf.helpers.options.SetDefault.key.html | 786 ++++++++ ...staf.helpers.options.ShowOption.clear.html | 795 ++++++++ ...options.ShowOption.copy_valid_options.html | 798 ++++++++ ...gustaf.helpers.options.ShowOption.get.html | 802 +++++++++ .../gustaf.helpers.options.ShowOption.html | 825 +++++++++ ...staf.helpers.options.ShowOption.items.html | 798 ++++++++ ...ustaf.helpers.options.ShowOption.keys.html | 798 ++++++++ ...gustaf.helpers.options.ShowOption.pop.html | 798 ++++++++ ...taf.helpers.options.ShowOption.update.html | 795 ++++++++ ...helpers.options.ShowOption.valid_keys.html | 798 ++++++++ ...taf.helpers.options.ShowOption.values.html | 798 ++++++++ _generated/gustaf.helpers.options.html | 793 ++++++++ ...af.helpers.options.make_valid_options.html | 798 ++++++++ ...f.helpers.raise_if.ModuleImportRaiser.html | 797 ++++++++ _generated/gustaf.helpers.raise_if.html | 788 ++++++++ ...lpers.raise_if.invalid_inherited_attr.html | 803 +++++++++ _generated/gustaf.html | 799 +++++++++ _generated/gustaf.io.default.html | 777 ++++++++ _generated/gustaf.io.default.load.html | 799 +++++++++ _generated/gustaf.io.html | 796 ++++++++ _generated/gustaf.io.ioutils.abs_fname.html | 798 ++++++++ .../gustaf.io.ioutils.check_and_makedirs.html | 795 ++++++++ _generated/gustaf.io.ioutils.html | 782 ++++++++ _generated/gustaf.io.meshio.export.html | 849 +++++++++ _generated/gustaf.io.meshio.html | 783 ++++++++ _generated/gustaf.io.meshio.load.html | 802 +++++++++ _generated/gustaf.io.mfem.export.html | 800 +++++++++ _generated/gustaf.io.mfem.html | 784 ++++++++ _generated/gustaf.io.mfem.load.html | 796 ++++++++ _generated/gustaf.io.mixd.export.html | 801 +++++++++ _generated/gustaf.io.mixd.html | 785 ++++++++ _generated/gustaf.io.mixd.load.html | 809 +++++++++ _generated/gustaf.io.mixd.make_mrng.html | 799 +++++++++ _generated/gustaf.io.nutils.export.html | 799 +++++++++ _generated/gustaf.io.nutils.html | 785 ++++++++ _generated/gustaf.io.nutils.load.html | 800 +++++++++ .../gustaf.io.nutils.to_nutils_simplex.html | 800 +++++++++ _generated/gustaf.settings.html | 771 ++++++++ _generated/gustaf.show.html | 785 ++++++++ .../gustaf.show.interpolate_vedo_dictcam.html | 803 +++++++++ _generated/gustaf.show.make_showable.html | 805 +++++++++ _generated/gustaf.show.show.html | 793 ++++++++ _generated/gustaf.utils.arr.bounds.html | 798 ++++++++ .../gustaf.utils.arr.bounds_diagonal.html | 799 +++++++++ _generated/gustaf.utils.arr.bounds_mean.html | 798 ++++++++ _generated/gustaf.utils.arr.bounds_norm.html | 798 ++++++++ _generated/gustaf.utils.arr.close_rows.html | 810 +++++++++ _generated/gustaf.utils.arr.enforce_len.html | 802 +++++++++ _generated/gustaf.utils.arr.html | 819 +++++++++ .../gustaf.utils.arr.is_one_of_shapes.html | 803 +++++++++ _generated/gustaf.utils.arr.is_shape.html | 802 +++++++++ .../gustaf.utils.arr.make_c_contiguous.html | 802 +++++++++ _generated/gustaf.utils.arr.rotate.html | 803 +++++++++ .../gustaf.utils.arr.rotation_matrix.html | 805 +++++++++ ...utils.arr.rotation_matrix_around_axis.html | 805 +++++++++ .../gustaf.utils.arr.select_with_ranges.html | 799 +++++++++ _generated/gustaf.utils.arr.unique_rows.html | 809 +++++++++ .../gustaf.utils.connec.faces_to_edges.html | 815 +++++++++ .../gustaf.utils.connec.hexa_to_quad.html | 822 +++++++++ _generated/gustaf.utils.connec.html | 817 +++++++++ ...gustaf.utils.connec.make_hexa_volumes.html | 810 +++++++++ .../gustaf.utils.connec.make_quad_faces.html | 805 +++++++++ .../gustaf.utils.connec.range_to_edges.html | 804 +++++++++ ...gustaf.utils.connec.sequence_to_edges.html | 801 +++++++++ ...staf.utils.connec.sequentialize_edges.html | 818 +++++++++ .../gustaf.utils.connec.sorted_unique.html | 802 +++++++++ .../gustaf.utils.connec.subdivide_edges.html | 812 +++++++++ .../gustaf.utils.connec.subdivide_quad.html | 804 +++++++++ .../gustaf.utils.connec.subdivide_tri.html | 826 +++++++++ .../gustaf.utils.connec.tet_to_tri.html | 818 +++++++++ .../gustaf.utils.connec.volumes_to_faces.html | 798 ++++++++ _generated/gustaf.utils.html | 786 ++++++++ _generated/gustaf.utils.log.configure.html | 798 ++++++++ _generated/gustaf.utils.log.debug.html | 795 ++++++++ _generated/gustaf.utils.log.html | 791 ++++++++ _generated/gustaf.utils.log.info.html | 795 ++++++++ .../gustaf.utils.log.prepended_log.html | 801 +++++++++ _generated/gustaf.utils.log.warning.html | 795 ++++++++ _generated/gustaf.utils.tictoc.Tic.html | 802 +++++++++ _generated/gustaf.utils.tictoc.Tic.now.html | 788 ++++++++ .../gustaf.utils.tictoc.Tic.summary.html | 806 +++++++++ _generated/gustaf.utils.tictoc.Tic.toc.html | 799 +++++++++ _generated/gustaf.utils.tictoc.html | 779 ++++++++ .../gustaf.vertices.Vertices.bounds.html | 798 ++++++++ ...taf.vertices.Vertices.bounds_diagonal.html | 798 ++++++++ ...ertices.Vertices.bounds_diagonal_norm.html | 798 ++++++++ .../gustaf.vertices.Vertices.concat.html | 798 ++++++++ ...staf.vertices.Vertices.const_vertices.html | 796 ++++++++ _generated/gustaf.vertices.Vertices.copy.html | 798 ++++++++ _generated/gustaf.vertices.Vertices.html | 851 +++++++++ _generated/gustaf.vertices.Vertices.kind.html | 786 ++++++++ ...staf.vertices.Vertices.merge_vertices.html | 798 ++++++++ ...taf.vertices.Vertices.remove_vertices.html | 798 ++++++++ ...taf.vertices.Vertices.select_vertices.html | 798 ++++++++ _generated/gustaf.vertices.Vertices.show.html | 795 ++++++++ ...gustaf.vertices.Vertices.show_options.html | 799 +++++++++ .../gustaf.vertices.Vertices.showable.html | 798 ++++++++ ...taf.vertices.Vertices.unique_vertices.html | 802 +++++++++ ...taf.vertices.Vertices.update_vertices.html | 803 +++++++++ .../gustaf.vertices.Vertices.vertex_data.html | 799 +++++++++ .../gustaf.vertices.Vertices.vertices.html | 798 ++++++++ .../gustaf.vertices.Vertices.whatami.html | 801 +++++++++ .../gustaf.vertices.VerticesShowOption.html | 793 ++++++++ _generated/gustaf.vertices.html | 782 ++++++++ .../gustaf.volumes.Volumes.const_faces.html | 798 ++++++++ .../gustaf.volumes.Volumes.const_volumes.html | 798 ++++++++ _generated/gustaf.volumes.Volumes.faces.html | 798 ++++++++ _generated/gustaf.volumes.Volumes.html | 830 +++++++++ _generated/gustaf.volumes.Volumes.kind.html | 786 ++++++++ ...gustaf.volumes.Volumes.sorted_volumes.html | 798 ++++++++ .../gustaf.volumes.Volumes.to_faces.html | 798 ++++++++ ...gustaf.volumes.Volumes.unique_volumes.html | 799 +++++++++ .../gustaf.volumes.Volumes.update_faces.html | 787 ++++++++ ...gustaf.volumes.Volumes.update_volumes.html | 787 ++++++++ .../gustaf.volumes.Volumes.volumes.html | 798 ++++++++ .../gustaf.volumes.Volumes.whatareyou.html | 799 +++++++++ .../gustaf.volumes.VolumesShowOption.html | 793 ++++++++ _generated/gustaf.volumes.html | 781 ++++++++ _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 | 586 ++++++ _modules/gustaf/create/faces.html | 693 +++++++ _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 | 1219 +++++++++++++ _modules/gustaf/helpers/notebook.html | 652 +++++++ _modules/gustaf/helpers/options.html | 1023 +++++++++++ _modules/gustaf/helpers/raise_if.html | 585 ++++++ _modules/gustaf/io/default.html | 519 ++++++ _modules/gustaf/io/ioutils.html | 536 ++++++ _modules/gustaf/io/meshio.html | 673 +++++++ _modules/gustaf/io/mfem.html | 688 +++++++ _modules/gustaf/io/mixd.html | 798 ++++++++ _modules/gustaf/io/nutils.html | 642 +++++++ _modules/gustaf/show.html | 1014 +++++++++++ _modules/gustaf/utils/arr.html | 1048 +++++++++++ _modules/gustaf/utils/connec.html | 1338 ++++++++++++++ _modules/gustaf/utils/log.html | 612 +++++++ _modules/gustaf/utils/tictoc.html | 613 +++++++ _modules/gustaf/vertices.html | 1090 +++++++++++ _modules/gustaf/volumes.html | 784 ++++++++ _modules/index.html | 500 ++++++ _sources/CONTRIBUTING.rst.txt | 4 + .../gustaf.create.edges.from_data.rst.txt | 6 + .../_generated/gustaf.create.edges.rst.txt | 32 + .../gustaf.create.faces.box.rst.txt | 6 + .../_generated/gustaf.create.faces.rst.txt | 34 + .../gustaf.create.faces.to_quad.rst.txt | 6 + .../gustaf.create.faces.to_simplex.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 | 46 + ...staf.helpers.data.ComputedMeshData.rst.txt | 44 + ...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 | 53 + ...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 | 51 + ...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.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 | 45 + ...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 | 574 ++++++ _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 | 1322 ++++++++++++++ index.html | 683 +++++++ objects.inv | Bin 0 -> 5132 bytes py-modindex.html | 610 +++++++ python_api.html | 765 ++++++++ references.html | 1598 +++++++++++++++++ search.html | 479 +++++ searchindex.js | 1 + show_options.html | 930 ++++++++++ 735 files changed, 202235 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.faces.box.doctree create mode 100644 .doctrees/_generated/gustaf.create.faces.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.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.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.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.html create mode 100644 _generated/gustaf.create.faces.box.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.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.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.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.rst.txt create mode 100644 _sources/_generated/gustaf.create.faces.box.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.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.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.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..4e654f320 --- /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: 09ce99e9ace97da1970d066184639438 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/CONTRIBUTING.doctree b/.doctrees/CONTRIBUTING.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4ff4a3026e6d9a3cdc8eb0fc51fa36f1a92de0fb GIT binary patch literal 11738 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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..62ee920e708b4767de9aa7ee477bd0cc1c29147d GIT binary patch literal 6544 zcmcgwTW=&s74~h$o>|}b!X{ZKjTaVMtY^G{LgIu7DJTM)9i#}6W!I)t(_J&wlQnLJKbzn>f?E2By7E=uZZt!9|*IFhVYvqH`!uW`H0qm4vN?j)+p zqzs*AEO9^GH}2RG&Q_C_%c2OA_+Ro^H~lwd$3cJ4WY%uTTPY3xICi2grdO?{SFP!* zl2}bj)~1b#sHzFq@p!T|s>%U_Br*}>s$%v;$Eci3+^7q`%j;q6c|5G|`QdIoJwN}! zuBe_;*UdHu6$G@i)noG3!bm1@Q&iMs#4YLgUQfxQB+8_W6)cvdBVArt$|X8>nARPr zC%(z|N!!DT9wyp`!VsSopA_R_xglO^#7!pVp=q(WlZZ?BUcvV&zR&L@v3OCeg8W8G zF0PB0wkE*yh$=ar&G!pzr5vAllA45KLq}U}MNI_E2@~}~*SBMrzh(?^heSP}uC5JR z6y=6Y7_s+SpFQ=?S=PyHmHI+m`$8=^*dU{UIj?Q_t)aYVHHiyp2;|l|S=N#hf%oK* zxF$A<$EsNVU-Gs!n(IKjQw3hk+93->!8~exxa`%peFUt>BSZQ|suv^GOX^bV&#z@%?O~!mF?1C{f0&3(aXZr5 zD2H(~bgZH(DsRP}4!9_nu`ttT-aCQ$Au;0S27m+X7_i|2k!!EZd`LBB+lUFLX+_?w!G@}vm2e9n#z|imW@W`@6KV0h1lz-OMQ}63JY-enAWTYtX z>HQeVdz8uh@j2x^U4y@cQhsyRNxx3h+{q`Y3Cg9())?veXP|yOc%-^qs1=6md+ju5 zv%&cL33mT@aCebNRrb5?MiekYAyYxfBOc!8+O>a#y?MI|HKDx~KU8yti%p5R&EZV1 zmm2{h@GTkgVyk^tk)C!u%Z+US4L5}&E2n3Jeu_<4u_11BHsJz4z~oey?b|#+aoPMB zA2rc-{U+jj(qe&z2n|&Q0PFYCPa|Hxi6_QTInE`Nkgn6BWK{x4=FvP z-{C;K-2j6N>4he4*~PG$4dc+oXa-(r5{{)+^rs)F#g^|&&zHO~4XiptpwWxF=6(x} z6QS2x!Y~1v%`PGK2#39p&TyCO8Iw9EGsn@mE8CC(YbYS(fgeiK<@Y%hH>RqBxxHaY zE%1E@`jSkdkIRTks$}zK+{SgYRJy4A<6O?Vn5jVV7AJ8~+-4mQ+A-0_`_v?$G{&;E z_R3o1;QzJbizW|4KQsmNY?lKmmWfqMCTcF#ap9DbJ|$6011keZbQBy+&8Fw}dB}HP zJH9ZmS7;Z+(sH2!yAaY7;?)GZ4)sJAHg+*cpIv0`CbcR zLL-h1FGa@KPefVGQeHCqQ)-N!EN1Mu8<;)kgJSiB1HTJBh8){ab9zR*HJQIZ6+}F? zeG};sRP$&p{D_;yo!UzPsqQs_ILxCBX9M!+@Al8nhki+$9N`Y3 z4&Es&)Kwv65N*`!n2vzhrSQF)AGYg>x=fUs0Z^KfcVQl>s{#+!KE3`0=yNt~Sp&z@ zO#k>B`SAox$YpnVSaY~+={pembs@VhE~}tmA&PYKKc$x7lU=hHp1qs~tVbSlq~@ao zPqKYeIBntL3;&&dNr3xg}0XnBk&g=RtjYfI}+fCpz-6mjmBoDxX z;CQ<`QkN}I?V222tZU+RkW#E>dm($dg0s43_pm9)e7kGX%e`HqP4q(S!Gg9PrVDU)B1^q4RGt=D8m? z@1Sq`7j~T5H<5oZRmuw9sG3L-+{D)!Z+(MGQ~DZ?RGB>_Pf&mL58|WWie@jTOfB}3 zcCJ!V^h)QSpg#$eWPRwmdiAUD;gA9~S8S%zW6#^mh7%d+7z{XK_H34G2;we|jf_NR zy!nz^=0JCvTAolyr-~gz)G?Z?BW|8g$}c}D<;hRMrwe=YoWidDm%_f2+rA(yR~LG= b);aJ(1{aWX+pxK++SDv$b(MTJZr1(-`R1y| 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..1faa448f9f6a745cd2b931742961bb28226f4309 GIT binary patch literal 12672 zcmeHNU5F%C6`q-$o|*31o!Qy!uF=_z6++ye%}h@Md5CLPqMHTd;-FDNWV5MMSKaQa zn(C^ue+<0>TX!bOm+ApU@g;DaLKi$eT+5F{uVUj#v)^5BCHf(W7yg5SBf{`z;i zXLs}Dz|2&gI(6>(Kd0_JH!5$$k4=dmz8w0d+B0C8P$wT`@6 zFk-*BX=?g*z*>Y8^Z7_?)1$;(HdoD~<{9&dd6qxFX?h*D8N{y3g3Vno*xr<4XaB%p zxG5RiRND+#P==8{?bnSEwGo66?|~~banqdQ70Wf)UP-f3>E`<(j`<*T_z->{#_u`& zu90ZaPGAXv>QIX1wqY3l2&rC>udgX}%T+p_5j#v7V5PN$pB(@e#!GECw-qH?Y(8Rc z6w25#AArii@hsd;?_;=*Crk814J~Lgii0k9dA#5cYpY(7O@$i-lA zx2<@sLFO#m?SU)P!bDY}uU=(Ua~otDDnSahyfjKJ3#1mQlLcC&UmfOE^97Rq#X@%T z8r)rSc0zE57>8OT7C07Sp=8gsv7ICL4e4|_#WJ<|l$sQGN?MWpQ|(nvH|A-c-xq3m zb+}siw3}#Ummv9Hf&6>OQC)sjM#>bm1H=Gk+m%@xUOii6(CdSMr&ElAxvvgq&b&2{ zwcCedtyY9IG#RPhZRy#8t7_uZAzi zr@ek_{Q^dy<*Iznaz%Y9dF3o+r)(K{Q>^rd5i22Ww6xfX)E&)+1TxW?~r%0iFHmc^&GkHpoLa4tD7ix$<{T0glW$vs)tn%*> zWPjV|reqT$`*u!tlp*Z7>8Ys^^#9yN{{Zb{*|D`h8j-)Z0|&5F@+mdXQn*Fp6UO!- zWm+S$JPGDxcZc4ov174a9W7qMm$OS%b9J*T3=V1Iu35^qxs~Rh^Su zCj7nuH6Cn=YMhvJe4!OPj!5X>xu!;*PI`{Q#D0=EX}+GIlO(7tTZ?%Wtgne8eaSp4 z6%VGLA_o##N46Zg=SJn0y4(|2$(rpz^UYE|dj9^Isi{k%Ck_=+!xdUDE!>KfRN1v6 zQ`uobWa;RdYfmF)6$)zBaiQMM=AI3+T*2qYcPZHG$aDQ#C#Juc^64jk$(E*K||7qgY{vt;E!&f*q!`Jjd~N=`Pew)?pWF zSFdKPUVZf1dae}QD32(0A-s@=0Ow`1xCXpNqj9ZK`{+KjATq4%BZ;s`wa~C&xYp73 z>Q^6I2PLi9R1HgOd#>h)1POAFHXc(p72t>^1a$4%TBG(%i?|Kgxln-#m>c4|NaEYrYSS)Lv$Rr}$`G!CClVnsT3i-~WB&-SCljZhY@u z@R4_JeC;lKNnVESkB=^CrO!f2ydNX%v;1B9&@fl+%PD)JZ>qH{<`}ZD6}?kw3qd?D zrOM(_`f6`eUi)PBnGj~pN*PqBiA|&?ov>H!mxQ)N=ASAH(DaP`J}%K0E;dnSSTtO~ zD%Et=idd)bb^94CmUl59O!KW$e=aQnYs$t3CFVv3pe%1i@GBM|X&Xwmogw#Q@TKiw zodAgpg#hWjv|#b+B6eT~eahH3C(_sJQeR)hKj`T+pHb>Xqiqwo+;!2{I;B1&JarEZ zM2WSuNtxouGwxZ(H?`0TOGtbn(?MqQ0#I1|J3Xro|H`7k_?DF5n?i!&sMs%~hNq)h zZo+5${e&+9!1jE{(k*mrd>*&azRwc-B1j4Jw5hVcO8`O-eWqJ2OHXd{D!$&+CPuU( z*c{luAlsHLV(aUYtz5CwYoqjfnpc!}ZroNz<2*Eu7ZrN!wO*-D>)Ch86U?gp`2+Mw zsMn=zFAG%rRs74`UwT1zMEF!Wl{$4baQwQfW~CKdLTjZCNW=+>GZ51{OFfB)`iww9 zm}rO?qC^EbWLkh?-2%Z-qZlHZX=~IFzE!usRN|}r)!p}jZU2Sj5u1X8wu{Q2^(1{7 zGJg`%_k|3B%e3rol-Nks^X(D{t#TA((IBo11OB6j)^P78zS2PWJ6;;~`CkqM`zJu2 zAQ1iubo)*GxoQ85E~y8%e~v$8mzRpMyM&x2(`Qo3n?lSgI;OJ9#u9VTD%16B30xKQ z-*X4_53*jZaOZ68GN@ppei$Ym#!L6gmghnHP_~>|&n-!pg@{ibM#R*P2kChlAFXug zaGK+)Sn^YcS#s+hYW35H*6LcJRa_P#T89yFOs&?6@6SxVWl+Jy%ZFiN_a5r`mGSjV zK2t8fq?>ZO!SlZ2I{@eDyHc78mG&+%R(1X(cpsGzCa=!&t6QnJ98Zfx3I0ek^c)IqSyd|xtKNQ~5S5FCCw$_35v?3(Q+&R4~)c%_udSexvUkl!bquxnP zeG9Y?%)_~Ix;(j8H-kKR0M2r+g$wQUVvpsN-#uGr^K?=40cOs`t1L8kIt$hJO;JX?PRcbib%Qdf@PiK>hKVQcp{_5EuWLABSMurg!$HYs08WT9dT-(u zdv(Jix3EAjM`IUQ6fC z7kKB-XT`nza>4djCt~{z!d|t%GSN$7Gj`SfGF}>$1<5R_1xYP;*@BDGf{NI*O4Cjk ztWe3D6G@j^@~8CD_?E0(rYSLDngKl;We15+aP{`sT-`xA$(B8^qWn%+Xms^U?f%vn zsHxpai4)m^ZMZcTOeN zJWe|0R_V+v_K(D@Q2E~VHss(Nc2!+3yIjh^8#Ls$k1f}u>BH=P1sLg}Y?vc0yIuy% z@Q4zv7qTeAR3P zzLXwbndZl66ctC%>K=ORP6Egh629fDy4Rrz*AOIEC4@ORMFvErBXu=9Cc%p73+Wi> z7C#y=F>K?o9R~Hy@S3S%FekmO@D;XaL2D5v7sCQtF<3KhW4WbWEpX{f19X|z0i+7` z>x_iLR{xUaLPsidF{wfB#;bAE+IV6^%s8CseyB2(vOqPlN$s!z8YfmU{=k=|rb|>R zf(qs}d!F==u%DtBTat7O9p&+#Rn`6?YFAu2KKfkkjU=EL8?I|T>7-;5$Zys)_maM={$7Bnmt zwZs}o0Gnpiaj;l5(wc}OBQldK3;Zm6vZLnVnG2xGIoDhKc)0II_~0|hnyGtRWcfBVthM+&tR&>KnU-H1(RVI>J~qx18ZAlIQ4T> z3~ErK1%EgBN;(e@XLVXKt=-~Bn7c!h=X^n?6T~lE5#`H5a73y+4HVL?fGN0Eg#3yW zjwuyN-~2=uln%TF7}Q$%4UJvV7(3AC2`I1aQ;2c<1pb7)N?=jlfFvH=3e5*GFfN{> zygg}Nj`^{&^#r+NIL4GE1xrW>1!;yS`7T4qvjh~@?le6ocL)JI*#pe6t6dbU*{b5D z6J7L?Z-a;u{Hb1A=@XPWq!8VUDM8>sR>uGlG!31ijLct3;kTiO*OF%u4w%V8U_q@R m96&CZXOb@PVh$EIT(n%>i4F3ZHpP9-pk$Zk1*+h2v++NXSfEV+ literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.create.faces.box.doctree b/.doctrees/_generated/gustaf.create.faces.box.doctree new file mode 100644 index 0000000000000000000000000000000000000000..975c8de4fa66cd1ebd27106a70cdf5416ae0524d GIT binary patch literal 14107 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 qZ}3A|5-&Y_ixj|Y)-2K|v$kitaf8w|Ta{(~M zyX?*;4(&+?qNsr>61oK;QKY^A5^ogCD5`*Gctk2Mv{dj90Oj+Y-L=;~+exl) zYNW`XneWVee|~1>`}LK=cb~rdnEI0^LZ91it87@7>sc&}<&@=_QIokMz8bH5HNG4# z%VJ>chF%nyESASWVRGBC0_Mh-FgQ!}!gj)Py1;}mf;#I==LLC7xvc5+C=^DmYzE8_ ztXwlp7H-6R@=`2Ih7f^WjRf|m{l;u7#M*Mwbc`@WC%zY4qnUi0vLe6Js2b*Wz-kE% zzSveQPbOQfCR?qlt>Q>d3ZqUFV_uTuj_tB|b3{(~1|$(NACpDBEjn5gnZ%Vf?lsw3 z5VkL#7&`L+UCn_Q~h`on9?8#>ivQBEN#240-FO>bg4Kf;-bL*N{>&uH$ z6F;7WKxUo6vKH(RyvHx`+xa=-vBa1DpS*33WI9mpRD>5B^}z6X&OCCxzwD)_Jp`=F zLQQyDq8BaEOX5=N*D*r1 z$eb{$kz)k9={b4`L2^tS6fWb6Ue0Y@c>cc2&)WWCS;po}iFbc@k)xcTJ7Fy^#w#X5vK+tR# zp&@v{m|`Lc53Ra~fsh3Vp1NkZp5QFdcBqZB3`3ZKm2Jx+hHDx#Oy1d<7Ebt0#a|}A zFP_y5N3g)fkwHp$!rozSZqKutWgB(RH5~gZjMi^b&_X?Gvu4U@DqUF4&V)j*RZ`z8 z$_Y^qyvV=CE$Q5ugwr0;XQwb_*R}+YH%kP2KY*KlACd6NVR19Jz_a-U=oGAa)?Qym z#{zG+??8c0oNMRsFJNqYWT;Y||F;OKN!62;6vI7Ga&_4lv+8Bd0*2?uBth?ULR$<;??3snGMc zIE`-rYN})G4Y>chy!Qy$m$TvZKQ>+GKeA z5l-$T%nZiKPySEdZtL;`uhT)9pZ6$cxRi9E+)uUg+L5$!C=?h@^jh+8984s~>2(@! zj*=IC57bwCZw&HuE-#@uo?A~|!A9>x=R27Fa_{Usku0{F&PM3t$&PflkK_dlc9?oe zd<%24)F_mNR4V_bJdxX27kD6Lsq=Q;5b=n9frP@fV}mlWa@uxHC$f;#cG4v3((rc| zJzZmY<^ZDXq9a!hCd@*gbtQ8vjeo&Ez7ba%|4u*uqdu9OY8owz`N#*Hdmn#tyzY2a zywoO5!&mw4iY%d;&`Au#nvH*AG9v6fd%TJO^4qNn~x;`lcd8TLpwW(A_C`^4S%4nE{W<(J%B4^Vim!1|XDsnpO zQN@jloC=wsTotN1^LVx=RhnAhxdQ14Bm%x@I1wBxb5=Qlys#gMxWZTPwoWSOLQvWU>oTK>o+1=)G7<-Aidox*c68*VJxcB% z$q|X#>O-rcjqkU259%xkyg=uMi)0|m9uvf>DPnmd(Q$5-f?6e(i#;PfOEf+W2a~hO zx*Z;}*|&EO^h}m>?L-w+qHE#TZJ3VQNnz)UZ&bi^=x1lv&grXnXy z&#ggBXvDVQrGTVX%qQe50iWLKlA~0Ao3Wy%ueY5Kid7v*s#2m8AYPFtRF86NGJmJb z4_Rb+I`9`%b4U_-A=C3Sm6xDCuw#d|P|kTmx9pIz&=4f$axx1F1lTl$2@wV=!m#K} zN~UM9DsQ51*hHmv5rxd9)lkeqqRQB9H{qi56j|^b94#FF-$eTA{M45@L%8XY^#U;Wtn1JLJe zP&0d$r=HI8XR_rHrUtp}HVeu&6E(F5LVt~mri0CjI1v#=DqlM#7vYmly&axyOhe&< zJY-+ag?p|rS~|Du+`&Kmcbv}ESWbti6bPi=5!WFUbyBsHrjGo)k(^j^(d4L1nJ|13 zZ_u(*A!ctQ3%#$($Ew_!;=n$<$1`oW1|P_PVS%6mfZ9W6H_3S&&q$(?O1j%Ie5P4N z%_tOmV1Y9fqW9%#6I9zeLq5{cQR*g$Rcz0vWmq_?Q%eACUyd<%C&s}prxG|p{K6Gc z{In4q0tF8$Z>xgyJeY!O302sDo1qMi8r4EqZ&Ip8H&&~)8Zy8!Uj;mt_FpAkd>*oIj)X79Pa{rH1x3W6G8DoyXk!#LX2ZP@QI++! zPrLTjtdj!$_-7)@NhAC;s!&mOT1%|0k^VQdr9Ka&rL^d>E;kOE{`Qqu`YiDFl^>RK zkC~s6F%Mm-zkqwwPcUQXy@~w8kcISA9FgNmE`I#U%HvPb(UknO15la%Dq@`OS3e>? zI(OalX8?v=XoGg9Qd0DCGfX7|GNTRSzfSr>>Q9@b4Oi3;XsVh5gG1 n6!w|S_BmmhJl?jo!ocI{djyzUhs|ZlqRT>hu9DA2)$)G|k-TVm*cF!QEsc;sLi_@rmM4S+h#vq#Xy183TJay?J5_y~u^lG@@qn;2o~hHP zs?Oy*r|O)3zxI;{n=|T9uErsE{r#@xIDX);IF$=dU?*edi}Y#Q{!#i~+LDdP+KYoE zvRNu;z+rROb0X%ak5joq?85cpZZ^LjGh4WUUrgsUKF{lq(-v>Yns9~3Dv#vVVG;{# z(6u9G3DzB0HjBF=cx3({v7D6VVcOic*gnZ~8uyIm{vg%z&W9GH6DePl4YN>(&&v5s zi)}gQxjsv`lfEUJmJpHKPXx3lZD(C4Ce7-$XT>py_+9g@vHrE-Bw;z|TlP-G2E>!d zy0C`yDCMhsgD>%`e3oy@cY8b-vtE?=K8t#LLA2A;D(7DiFz#u=dghRU3x;sAr_**( zigu$I%3a$!pY-{Rthv6!_A55k=H{P)GWI1k{gj6pbRh7S_L~;iny_L^ zE<(Ic2yoGka+w5BC{bfJVdcjD*t;Kxz%wESQ(_kFvXsp7HgiEOcb(H7))T(-xlsSYl`$!%W@TfB7TJM4}I*U=hG)_F>nv|2wLO~2+j3e4EJZ?LA zDa+i*jNM(A?b%4*sa(x}nwD?#AgWmDthCTTA`@0LWCD5C)bStZNveuJq(iW}$j*H^ zk6*xIDqnfN)TIL8=cPJ2%vfp1H!R9m$inboDw_napg+Qql1_%#ycRH(mre+FNT|Xx z<@0i3ka(Vg0>o{aBCyHCB2M{7y#HZ}6M{$@!i_x7w3VE1@=Xm@$opkNhzcZ~cI?0x z)kCs+$~DM`!^jGG#r*P*Z~KOA#mumih>j-%Cki***Z{^Y%E3mQL=@oa!A-*zMjU#s zs4%GTZ@Rt+48bGD3_2tYMK$^dhU+8A2ucc;9|+DOW0%G_QSk^fu(Ino*eDn@nPu~G zXIi3beA|kA%)YNB!`j&Wz_5eFbBsPS`j&G&&!Ybu%9IJ<52q)9YFJY+{tk!weBi@HLs%hjn_X{r0i z&#(JmA=96qmCiB)@joHM*D4A$pQ+4ll_ry}Badgo?l9BYgKBweIE%VD=;9q$PUBEyFl$z1}{yOwXjh zLws(VlMh?Bh`V)1&1v0kH=7hrB)oBG>0qoEHJt`Nu=$Vpj00TO1_2d4M{>bKhEA*@PS`m?wTN8d z?vQ)<2oq-}RSpFGPjF%o^y?GQZw_4MIr=;=FE^E{NIkEFMENM2I(?OCej~pz;T+R9 zw<@WK?a?A)>$$^w)FAGS(L87W*2$Anv-X8Gn2KsZnOQ5k09|p>p4tDvosi+8Ax9 zwNAg^fp7GZ-j=MD^q;xpXil@9Q>>#JzVd{gxq8&B&}97~LkZ*;zAeV3g|=u#Rbie~ zsZ5<&xnsXZlM2UtcX#O;@6hdI&yCqlgWTNB z0MS6Xc?<~4H*OSL-MEn>qEXN)e(b-H(ocwcWAtch5&-fQ1(1JNr_veITRamCxIk=- zz6+twI7f4Qk<exgy00NRPAWWde07tEP;GTlb#c2a}RJ0)?Pp$04)bforEfmJJl)SqZ{FLVzi^%e0&!R@F8Aibn{UzPKtcgIN0@#|7&76lh7$&seIk}P*pJvesUCJrCBPtg% zbD$NxM!i$j+a2KaM!D;xa{gV*OVB&a?=f;dNJN;3bepek%SP6}MB@Pi2aQZLcgG@r@Ik`+NW%0@FyDFEWFrxS&KEnX z$#He^p~<2sh)izzDAglaoJ2+cL#}E|S5~R1RZ_V*^<-*^(UtQE$`!qCDMLQ{>g0o| z$?^i}0IbF6ID{T_LgO>P4#VQqbvloC0rFDB>>zSXhfxy8Hq>I?mh%X^0eU&Gi0c5W z=p5}+UuMNh&}}J6@;o|9XsIUS&@3Pb!zuz=9xU=Lj}}~26a{W_e@O~smN1V?r~2n| zoqk~x)p$WHqBD%u9JqWDFHMReAiAcydmi(L0HWuPappX@@Ty!1S!mKhgq9E*HP{4a zUbgt})E-CxJub!`Hfsp0k0^2kPq!B2CNMcRi|{NIFm=cK zNM48!d|~aIMVW-k$)gfLF2!T?-|(&gaUH`@m(*AfP4ot=%(R;}N0DR0eLCJ?Wo1Il z-bq5_eR}nz-X~>w;0WjmY}X$E19@V&NU0)D`cr)F7_}TWvvf4l+n}8km>Kt(gAhJ| z2%Mo2dL*yd;My@6?hT%acMX(imDp?9doF<08|bulBxjkwOK+9rf=(xhUqBH@my6&K zroK|BH%e;|3eXbBuYiq1?~vY0<;4jqReg$#)dt0YTCVhp3hZ?v>ffVJaE6Zlj(@Ri z5LumUU{Vi`VtyU3gVb{zZEx_m61iOUo?31h7a@J5U<*y5AkF!-+*Jx8OHtwNaX;`1 zKq%tnDPqChm{_rq@2VzUoLC?EHWHNJuS~C%J;5=D6oM8dg*mQtcHnuiG;E4vr2b|` ze+oN%kUm5>pfiiWf>~n#KyO%Nk_qx+K~_FobbZ@P(4F#vA-xc6I+X0Pyg(;-((nEY Dx(2;6`#lU%yiG}%+4meG0x7W5{=ulneL8{54t28iHU?IgT!EvY^<%Wy4_VZ z)m4>x%p+uFgQz=jK_nG5K0bzE1QC1?@bxdKV8pNcSxC$W5mfMZ?yXnXbob6|RB&Oo z>)tx|-gAHFb?-TKz4pq=g(>lmuY|s7xqEHRFkH`IVZs*-Pmc%8jgps>jhB*ZNt4$D zZ8!AdKxYY`0)=i`ju9|7c`o70L>^gA*iOgKhfI$w&&`LMHFM6Ke=cd7bzY0C$YG^d z{GNUsMq00}2TY4tyQk?aY)9S|HM9o4!}byyijgOtW_!faxB*l7fUhQ!>p5Qok5OW- z^17OD%ADnM>0Y+@3CD6-vK4nV-q4~bu)1*s3~0}@mJ!na=56Z82<>(i^mTrtcd!FES(Jo^EIVMj97 zQTq&3fWt`NR?*4!+73eO@BHPNxNA=Fn&lb*EE8LXyLk`xW8MoCKY+jc@pl1#8?-mT z6IfzLO`u}AeaMDyMqW05b3=jL&P>HZ51@bCxUobV<}TVdmL7X{%W4%?WG4AbVQu zMCy*_#B6w7en%Mlz86GlIM9OV`Pidya6sbvg=B{vRa}z^`P~DsV5zh(HCIVAq0wSF zAIqiopBVs{ld&3su)SlkT^#{C;Vaprs=2y3BnlaK$8wCg&U%p+^jVbfbE@?6VHS|e z-UOi!q!vu1%jfU}&yw(sBZn#B(cUU{B>iRyp@%ezO$fTssf0JkO?X`!=ZIw3U(QJ$ z6Mn}C?+qq}pGCys3%%HJg!zKwh8lS~p&W&Y`L@~pT7m-sbxBvWRQR^$hG6wkb6tWC zmLDNi5?U`qiSD^k`EZm)SvuX+Ns|3Q^Ubn7eCo5-4s#W9F^cfbn~Gs+eb3b#>jkDn zCL1V`ry$6=vSGQ@3@nY}aoEnZ{5{W8*vG%d+eg_0k>39UhnN3V00P{9PvQP&?#o_# zq9?JlLPhstpdaXtr*H3CAyb-%(4dr61)w-xOKeEwK z@b5)M>AaXeb(Hj}gZ@VI!JPKP@(^d9v?p?Ip7NpY%kXO zaIYsKx_9tp)9RZJ{vs6)ldcFb4*UHC#d?OwdM?})cIufN(Z!lvE1UHQ=MBef=b4U^;sH44rv1ilo_mHbJ$atwhSafVzV4}qaAo&5FEM=lX}#IiL6hYvZPMWRE=x04IkgRp z%9VJrgh$5Qs57p;`<@tVl&~&*W|g(lNv3keP9tdMA=XOzQ0I-F#T-K(`U=cT$rACt zB#z=$I<$I0X?!lb8{wowd6Toe+*R!0d&ffMRia+AzePXtWJKc2H_-Kr{X<;h^g>7w5@YF&FU7TT{j+~_EJS}L z5q%Rs!VqSZW=Zv_yXDc?lw zKVxD+8~RMQdX}Etz{z_5QhN3`-$trr|B^iFZ;@B|on$Bnb9!SEmS=fQxq1C%Wirjv z{}m-GAg_w}RxV`C{`oENCM13;k@$%qwSR`6%weW_Qdrg3^LU~(yPoF=%ldSdM#J$r z+GV)4;6${m1qPj?6$+0n5dcKg+VLzyxv!_~cmXr+6J`VjZRBwaslx%?r76lGi5MdP ziD@)vAIhotfrkJ#*hme}{&k60UUKBAwUv4b3{TGto5^@xBy3WXTgIRfCP&?6le2$c zVn~8#zg6nuCkV96qGY4s>_TO>$(*GI^+Cbec+#>#*?$2qM>VJoOl-e{0XOWw;(zmP z`(6B$O(zFs$aJchAetO9oe?y<$Je5p*T0|Y(aq~WxNS`;@UL=pYwKFP1^9=oYvPpl zj|t~B`$zbhl;WdVe<(>QxW?VdvnG=Cn}XDS1wX^)-L$`3>f`fIiFLDGDYDm;v&6wIMU8vyohlZFJ|^Ni&n{B zf8|(QzeLn)_O;3&X!Bhn5R7200H``@qJWSrS+ifjI!BZ_0r?-6`J$A$A_J>D0uJ>R zTYIAd$av2~YMRRabsBU;*_TcoBit!@6L~BtSo-aeS-M?kn5{Y4AO2DZW+EU$)^FaL zF0*d}?pU&(sA={$V077K!dyR;P#tj%`5VX|ks&V2C=V~ultBflQ&$#nE4kP7EGMbv zk)IVhX1|M#p=gY9PPy%REm@7kInVX7$K|ZMMU}^W90Hfpmsxui6lsbz%!yW9FYC+b zXeL?@SK|n$4w*Fnq}U!6T@N9Wl_^^?t=;O;fw&cUt*p!}GSHO#%qYjzTv0Jd>!&aa zvjJ3RQ&cx)C3d{pSiE>H1BM#Bs=V_I*T zFY9qYb!|1TVlQPqvYO2oQczILU!}UYsLtaWM2Tx7;d5W0!bfpG;B#IaA@!MTnJZho zp4OgGNI=6tNfqV!fse+bT##xO+h{h@W*j(Zouqs^9T4d)7OqJ_@zXuei(HgZN-r-@ z^ON+EfEy3gJsdCx33`^PROzd_H=u71LQJ_Pdl-(1)T8cNk*Q|Yc&wNXNXzqEdlvkTgExpr5hIJW!eBeb-=GP+7xae z%OX9jB0=KOJq#s;IO?@N4*kLNx#5>83j!}tO&ppX765T#6~zp`B9Si5QWLWze7*9f zGKKx%EUau<&Rg)1jXpR0qB5AD$`f0F$ibdamd-MqK%A;bGx(Z=BUPz;fuS0VZkt$! zz75#ob1=Rhwh2Tm1G-EInZn)ZT?HqHd4b42XOYpS?g-vI!MkCHsQrxP2(1V-0YN zee%==zU(u<$ez(=a9Q`E@8F$`gTK#=B0s#;>7YAo`}>jUxot1#cM^VvC7AWqRr(I%8nwuxx%|-f8mER*A@KfPFk}G>^p7};H+@X{RUlP?(H7$?cKw+||ma54A zYbmtrx`}+04#7)%1IhwIP;bXRygz+BB(smw4;(;yJl%48(1FY`oF-Qh#@z~?H9&eE zi)qpt=}VsN1UfV5G6N>O4;D;@!sY=#gL09!tukaH92H-JkfVj@Z}8RhOC>0))01xP zfX^~_hrS5n3(}pyexZs8U?Lr>%5tetoK-Ld)r#O>;lfc>Cil%x5A{-lPIP0oUf!S* zDt%rA@_Fi%&vp$qZqMMqkk_eO#5WL$7YCtvFTUdu?-Af0G9Qci$+GmsbSIHoks$?3 z$R0A%j85`h?jg+*y^!{x>p8hXh|W7JojG-VXvTWBsu*;7Xny$HAR-5UraD*p24M~^ zB(3ZrNu+y78j1r5!pQuivf_ti)-_xJo`N}`#tOp%tRWOYE|`0gq3*@JTgY(Ha&;#* VNN4(F_YH%bUFsJog2&zVzX1#{I=27- literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.create.vertices.doctree b/.doctrees/_generated/gustaf.create.vertices.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8cd32eab2e9e6c56ae897a344c04509c9e1319cc GIT binary patch literal 6773 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 tWAgji|B>IX7Zy6Ab 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.doctree b/.doctrees/_generated/gustaf.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f7ed113931b431208132fd66cbca6e70b4de08e2 GIT binary patch literal 14301 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 bxu5L|zY1ahtYc-xM3oYMm?J4N{c`F5H=dm` literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.centers.doctree b/.doctrees/_generated/gustaf.edges.Edges.centers.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fe91367873ea06ab2224c99ab5e4ece487bdde07 GIT binary patch literal 6213 zcmcIo&u<(_6?W{*jAv|*V<)kqI1aNyVaFjJbKroY1tCQ_APWnvV0R@5O-*;rRFC@? z-POtX5NSEASc|%)(Q-vdz<+>{79`+`gkYsTAWr*daN>Ja{cC2tj*Y<5jHjwzRlWM& z_g>X|?>Bz__|B64Q=3U7++aFjjuV6qPcpUYgm&ulKxVJ9{hwqnv%YG_>_rl$vCT8J z1PNQXo)hyRdzPs#iA&c@2KoF}!fok>K{;JCL{qe$Wqr|B4e3gc*M`*Hahgar8gOUK zlfhH{ZDV&HCmGGcr0d`1Q_|)_*$*0E#&cJ*ocK*SBku!ee&1K!{7^%u?2^SKnE zvwt!EqIoPcmWnTng9?CSaUU>4(d(d=y`X0wBV8J?5*O&nG@hZx<_sJ9`I${G0U@D{5_i>s@fdB8$Q7(93R3mZ`@Q=7$4iv_j_dD?p7XR2e#(6(R|iOBj$&i8=2?hb zVKA;uR@X_mFsNx%+WzbE+Wr&TehMvjRHOIV`>%RgwaTaURcf9zckvk>?21ot=~wP{ zj?mu;m~?pYN*_b$_t57L1uTUP|6Fva*4rG{Sx{Q6Y?rD}R<12A)wRD^F<5M}L^F&7 zlF|NA?3RbP%1WhA=P#({qHWe5KFn{0hYt%AmD4IE?_Nd8$sLm3o!q+0B>3m8k+v`jyT?R(eb`E@P#;{lF^X-lLwg-wUEa;IKGmr@43S zsB8U-?33d;UFazk@xZ}@!J6VKs`*|{351GjkJ?J_&8_tL+{5Fa?l_;hL8g|Y(@d?Q zgHI#RwOyH=sTP_B$6sjK;x4Uktmh;Vx80FzXCJCI-a7dehMQ;=t=WqU?mBsgRNU2P z)~>(&sOI+zP)y#1_?$lgJ*Rf&S?`2!R5bNf=($VT0U-pa_M^WCH?;5O@D{btuJe_ zxA6Kp=Q{W$#PvI;c=yaJ(KjGAO^!7GOw0Yo$h7d3(~dIv7^g;_jhA)39fSuaor6yW zVezwDbRXb(6raN3*7L!ly#_u^?U!&V5iznex)i^mX+s(70v<)W zeV`w~`FD{?=!Ys1tB}f*RV`cQDXd65X{!#fTrn&ak4y@CLD(tMb@52uk}(Ssk5N^@ zisEpLe9NTk4H-)2Wk*Y@Q^;@!&6M`Lrn+_-Q!&6QQ~&j%$CLonY7PeK9$Qo_(1nZ< z-Z6N|;=SK|hj}To<>ED_nqexVRA$Fw^H{a>gdOPy8V)jdR5JVsjWx3&UV*_0nw`9v z#vWQ5^v0&*0gYnghB1)Z9)+O{Ldk1`N7vK_)l-7hx2B^o_A~T!DMySfJM{IF8B6Y( zp5ijGUbs?NMF|5t<`eRo#<5zDc@)Od^7wNO_?A^iFt2Pj)E1w*KusbgPYR)iYB+qD zjt1z&u)TQ}<|clliNzDB-CSTBt)n>IUxPFyU5xre=vPt> zM0YZXPEmLY24OrtL~c%!S^-E}lKU`^)a4f*9X$BTSK+SRcx2BlPd(N0Un-V|vofOW z36BRZmm|Fg0>Gh=zK6})k`3WSjuhF^s@el5eXDfO@&J~p0G+8D$!Q?j)DrGkc=&+7 z*F8#x)OzA0;kJI9!mkqmbyK%Z)AB-_<N zJ)uwKJuR%x;oF(E76hQSj zF1EMC(^PHLt*4jU!1L8yDcHjFkdqd2M(=tLF-!Nt+Ws)~Nh_ literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.const_edges.doctree b/.doctrees/_generated/gustaf.edges.Edges.const_edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..790207da97111067f89029873a5dadd19b44ae66 GIT binary patch literal 6061 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 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..e1a8d3b14796648acc16978807f2baf4fbf0b266 GIT binary patch literal 28608 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.edges.doctree b/.doctrees/_generated/gustaf.edges.Edges.edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b55b5cef04ec07906284a4e02696e19823726b34 GIT binary patch literal 6201 zcmcIo&5Inz72gld?9A+!R+bdOYMn8{(Mr+I1`$ILiZB=*jL4GMaUe0K>FKVSs@d+U zc6YV3doZyNCSItUIu{3W3V|g5K?pd3B-cPl0zQO5{*OR@ud2JJXVzM+OtLVuQ&q33 z-pB8~dhdPM`sv`>g8eg_S;B=p8u(!-Rmif!bV3#6F_XG@THN}m_@LM|-PC`QsXPr> zVHQ9Ua1n(mlf`?5*&uQ)qHIv^U&&aYg_8Al-r{Y(@?NpayQZauj#y*KTpQ<^_D2I2 zj#)N%Xus|6g7#p`h3~T?;^hp=j|<0VJMqDlF8G$|dbJpQ*|baU56p!~NLC!=L*Mj# zty3|~HKZmfmqnP7L@Pn$XBj5(yCwbD{py5yG93*4;4oz)qRGvQ_Q$kT@J+tW*Z6h5 z%y-P&`&`9rKh33N>HZUy9_~9)tAAiH+jorZdt(MFU$d}WJ*|&HnnALcA1&oWzF=BH zhU}=JNT*}|RY<~Lf#Po9^C~_!@wr7(K{2VYvg|@1LXKevbHl2-zkAvU{UlWhOZD-s zvoz1!2fFZc{&l`L75#v}3e(9EHLHNa9)z-|nsvIwdZ8V&rXKi&ACl1VRA?U6>~$@B^SrgJv=wXR zXv*0~XK~gc&Kz4EI{euj{rEIT4RhZ2$t4kGa9&}0bgCLo5Gsoq@k~2bVNR~O)-(np zk<|zOTRj5;qdbZnUo#$KdY)E+he)Wif`3}mms0Hjd|K`a3>Wi!o_w5Uv^;IgyLi$l1WCoRS zzU1zyF@N)HV>V$#a{mfZ`v2%J(B>~oZFWs>Bv=%Bkw6fidQIbDwCi8ERBp8fn{G9| z??U@A(=3IZ>8ZRrGd0!7pU`k_bdVBJf7uf{A z+@4&4L$i@Nh&K>YYCjz_UC@1&G)q_@Mj|LaFr;YHegyJ4xI@&t4N)I|DN!c^+s-ZO-C`m^|H(wrWuHzG{F}Uw zuP>D7){9HjYan8ZL_@dPV#6h>=dy&a+ z(|}fSamyLUTpB5*krlJX;-f{gPCXQv$KKIMrE!6o4Jy(SFHkYHW-=VP?PgfS?2PwB zXzo?53*1<4D0>+PW-VojO0^fU#|-LQGCl4`^{{2O*pYzNP+#X+Mbt8_kPY)OuG@Ix zr;;8RoXh+eGhL`ZU?db``-YIvk;i19=ovzlk?YakxAttcbA5KvV`-{VkNYx=SPG33 zt0;ubrqguel$JfEFgtTAb4N`6L!Pza&Ykj5?Y=&{Ft^!UBpHCUj6+2cWGc*hBxO-bgBL}YtK<|_TdC1^KL;{~>%(?Xbh6&A(2~$x z$$?78`-Qnel$HTddYZ*BkA^uqnBRN#8{dRJH_}lscRbBZkN;YAJe<`h$R4tEAebK6 zI}iZ&xsD@T*46$HUKDCxJnEPoU^4b<_pAjdJ3uGqVs$EY8$3y95?}bR3PLC z7^ninB?=W;KAfWyF@ZNyzVk+Edma|ROgv;ET=*C)aE3hX#9RqLb?7mqc#(%TFa=u6 z_Ey=*1z4kz3u`B4naRi0J~bT|PT;?QA|5RP=g^+Z{%q@X3rqo88qHzACZuNR2Zgyb zGfOqCoyKXSde9~pLN6BND>UhTPyPxYpZo=1nd#EBebYc>7fv$%3R<6b9go_5{xCP| zP3zg?){(QiCk0oy8FJE!&hg!xA!ONESUVo7s0M_cygWBqQ+H=h>{hqhO_yfQN4!ln z1^6rTXO$~><`6;xl~aH~N*$;uf~KKUJR>V_l=DxahmVW5;11}?z_Fm#3;=K!){$gp fdbOUmHe3}li1LsyGp5dWFQi~s#szx8^WosX_dyyi literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.elements.doctree b/.doctrees/_generated/gustaf.edges.Edges.elements.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5bb68910d87d7ad34feb1fed333f3c6faa085aec GIT binary patch literal 6605 zcmdT}TW=gm74{`Fo*CQYIGY5J?XFX&s?Oy* zr%s)`+xpQTKDD6!$&EDTUU)RL94Cw%mgchKM0OUiP~^|^JMZQ1{&u2-Y65$opfFHoRsuhv3)B|LBw|}v;zIrak97`j4b;gVJ`7xaz$8Un#%bG-{Nch z7GLJu^2sib0=AoEVaSr*XHjyns}(N)K)`fY3$|;H8MrLLoMQG=s|=GA%Dwz(DI4(x z+44e%9W^Yfjmdj}4L`T>bB7dzZ4ytZvjdZO;TR5)ua`DAc1}9Ph?6L0 ziJ0EGzy-X$FLEp6pXGzv2K)SFSQ?^U0lw@LlI~!pPcvrf!GI!5X7JHJ1roGmLoKnw zFcQ`r+~gO&eg9Pf$m|)nOUZ9PxM$oiPchTjve}+daT&KCJb-x=NN>tcxhO9n1zjF# ze^$Cw66?JhTFFI2?D}E7q|*HdIkG14s15i}$gFSjZEa4d z@ny0|!|Qewisog}%=TTJV~rCl=1oxi`Y}V0hpAy_2_oMOkeGhkColqKugqlBfs#vPcPS>a;uzdrPVA-Wrb@E99{tqT89rocw z;Ljw(uTwR;^Wqxy8i=To_(M8PJ^J(`;c{MlA=R1(UslJ9gZnX==Hh%lp}@IhaG!tZ zuaNiEP0zQrsm^ErDcDujSyrL*LhNWG*3Y)NvbhKt&9#EkT1Cj@kI)C*4ixUqaTpEs ziyFZcM&)O}BoFBIJVm6f6_e$76C6b?oK{R5VN}veKH7=SOPLVJ5cx6Pgbx&OsB3V- zB4y8Gpi0#8ciA9OF9#~sO17e7pqT5InpM93>98K`xvY`O@993mIan>5Cj6efE)pwD zef8Wn@kSow$*G$rErD0KpFdiVy^@DH7-n?dqU;xyzF9S3)=G+Q#K=xz4)mWktA>(` zLI`gQCztIfmY<PE9c3cUM83~A_GPzdn?y;DfrI`DI!Zx|!KywGWn_4OVXqiw ziI34by>h69L$f%zrClVixltt0R$z_EM~iZu`dVQYm`8YF1UV>udM3xF9R<2uwJ*0c zrM&gcXP)3@@dTk0iv>kzXpWilik|OST*~ z%Es8Q|IA84x@NF1vjR}MFu%=6DP;J*7s5s+3+;$5BRuRf;SRnyP|wU;vy&!Ek|;5` zg@+bPU~v)^FHpImE#26qrFO~X_T0?e7L&y##8+SMTgy%+Xy=suW4AsbAVOmdPg~L%f6L~ z$gD|n$pgIBoh*pW3W6}KBA}3BNoe`B;fA6paFhFMQk=5PiA=O&z;zW@ag;K%xl*CT z7UrRsdO|^T!*smV8u_G1A>~RL8VIvBD3c;L=(ZM6Q?Qw?=c~4zyh&d;1Pvc*eZe=h zn**1xqElN90nts0FCZrz1BkvCph)=I)!VWkv)H7{0S{+9c_BF}mKb=4>=YdGlU#^6 z-P_#-IUUAR!J}{(CF9*(-XKmT060y-0=P%O9UagIuYK__dZ_IuC z0KZp!dQHi-G(gY8{BDN0PGP8*)L0KqKeDaDwA(hvGtq|Qb-cmK%7j>bkj2RR)bCbJ z>>>{w13i)Lg)T5qCWdR2D$;B;$L9qEUO%#QG*T1#AO~iG5pxj2Q;5JBsXT^@o%n7Rg3jqFVb1!xI0 z>;W5xTG#L7^4biQ-pz`P-P~%>rVv7B9PBGZ)ZdejaEDI*ieIVh5?S4BU{VvuDSriB zXf=I1S<;{Zr9Cmm=e~fTI8w`O3 pv!(!mKCsFpGvw8ZtbDlYg|?qLgqbn@KSa-=WLM+`y1}#2@ZX1pt^EK1 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..fb42e2c1b67a81cbcff06009e8a1d4056a3088e4 GIT binary patch literal 4081 zcmai1&2A&d5!N3`k)lXxy}J(J)kcQltQN7z9C8R2b`ZeWLm)&4!^kDsOqw%I_Eyx9kUW9`=Q;9K_snoeL7N4*ny#*?uKMb$s-C}g{`TMT zmiuSMMK0oOIbl(h$%q%$>_;*zQ=V!2y?yzW{nDP9zG63pELF&@*@8wW;v`Z$vu~^! zk-CnPVp6@|D|o15nKiGAj_8Ws8+#`DrlVt>@Ya@jcTpCa%_lrs@M7}X{eKl_k)>Dg z#@^?ANv=Gs_>J{mc5?=wv=zsuA2dOTUDK_6zchPEoN;?u&X^f6tyMfLHDab1cjKs_ zczR*NiULABcQTgxr~RnRSBn`7uN0q?PHB3YEojS%v3O4m#WS%hPRwUhAyYn8WtMR@ zy^-o_>I1F+z`(eu_ZE`+)5O z{656*1%59nDBz-E7s?snh_eNfU_Kz6PtWcr;IzT!op;IS*638_tMaOi#vM0*ZW?9hzE?xLsc$e53 zI%nnp4xHy83|TdYbcoBmTk|#a`pYzVRpgB5zmHc6uCBSIz<-NVURN3a{QqUV%D*Ri ze*20TfUIPTQ#n7qpM;68g69|84$r=WVH1PBRjE8RezA)G&u@!=pW^qy@002Kaf?5Q zKT?o?S_LWIfP>zju}@2uNzFFO-E?12kS|Y zLq1-^N9AyO?EFG-L0)E|F7G+F{Yi7;C#@6j-gaVs|HN;r6K{Nv1Roy=4uqxB^ABE%7xzxACa+mfz1?>!ptwbqVx6KxNH<*dS+Lpmp1I@^@1imDDYUZHl5d zx@y5+SA{5yd6^`hPwgr;gFwqLKx@{875`||Jy*ZAXw|guUKIbNRDLQ>Jk8+#Zzy7y zR^J6end$aqsz=L%SdhVg)rM-r<*bE+17Rn>g(pqd+k_yJDT^~J{%v}|NZ;mY_W!}4 zMAAY<-3QI+!JZJ{@u$K4%ZuTn} za9=rYE+BK|=n+}d{XI)cjJvwgn64~!UTS+O#+RmFja#WK77^wyZXjun#eqLCz$sT) z4yt9T608o1s5JU%7YBEIYRsd#lp1Z2w>B@f%^}@`vN8>pbE#4b$%xv09)vQb>s0}h z?|BJNxRV4ou@*sn0l|sY3)PL}(hL>PrP4vduQ}k`F$2MpX4x^vd>I2ZbmX$Al{%&q z@maaRaibfiGLQ!vinA1wKHv{I1!cc8qc{Ub0nb7i5yecu)bsOSox2Y4Y<)A}N=X$6 zmPH9yK%87f^DtwNbjwP|S+VA1V`sy}7f0J$xEy%9DVHqGSsW#3MAY9b8z=JBo)=MM1=Kj!RS)(yi#ybWv_|G(sQ}N8l=-$4e`^X2eP@ zgO$ka#GuzkTM72=Vq+nWNv+_mTVPsrtYj*dxO@ zn}Y*&V|YZZq9|t@dT~nRO(gTxNFOg(7Mw|EJVFWI!Ue&(#vxBaXk7&yV=4)7Ri;Mk z+&->8#z59&?%Ud(+2z?aeFT|(-%e1!pdvfvR zvT3W@!DvI<2xUo4!J30mCJE35ju;)iPb>NNK;Rqu8A<>*Boq^%ERb}6VADO;#0QPo ankB45t?zD&LHb@-MXhBG;IUoxQt`-J^Wp`G) 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 WKXnN+WAgi!OTjLW3zWgpwD}K#c)OJV 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..46eb9af09af3ff02a0c4cf68b40a5e2b95c57f4f GIT binary patch literal 8156 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 K1$x1=;ox8N$2tT6 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.update_edges.doctree b/.doctrees/_generated/gustaf.edges.Edges.update_edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7195e699e52170317db88e911bed0d01b8c51776 GIT binary patch literal 4956 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.Edges.whatami.doctree b/.doctrees/_generated/gustaf.edges.Edges.whatami.doctree new file mode 100644 index 0000000000000000000000000000000000000000..334a71150edc628bc25a6b900c6c154e4a462731 GIT binary patch literal 5664 zcmcIo-D@RD70=iG%E!%Qb|#9MjCWbaWX4J2gMx%{Tv+BofeTzKAK%@aGkYm zv$F=A7HR%j=)zwIcyHkI0G}Ov9+F;wCJl@>yFes}$FPQaPyjyIy=;s@l8S_-^8DfT z`1AI$)Nal{&-ZEoj`@AS3_+LRTHYl&cQMna87B*Xp3KuJ*I2vk4YXq2tZ?I4NO#83 z)R(^dBSJa|$b;$(^IvBN>dHQ0Ij6xbN|+*I9ikuKZ`svKEcR;pA2 z+r1h}sri9**-iRY@9@02gF9s$HGitzriBQ=Z_%mwkWFzmnN;sA3J;Ach{hyk8B1R< zO>4h~wa*Igd*_q9ukb}1ddc}Ac_Z8-9uLH5aM>01tGK*>G;hqhYE6OML9Sos3*J&~ zYq}DSa#&*`uEu0nt-u}jpqANHtC@4LTX2~+B`&fSn+yByjj^gl^T>@ zHdQsQrTgGI>AEDH6|GALTrJi2FH6-h>Jyj36FCR_X|+tdis1ywQ%|X=+L7>c3e(l5 zNsyNeCipg3!x2V#7+SezB1bJdQg{wBqs%n_NwuQV{0ADzl32`g{xgE~Exv7`gc5HO z9u13oB9_ex(M<6@9OI5tH{nf(=oX-VwRDM^P{aP)t6^^%ouvCUvg`lVzoGT73axu; zc@(hFcftV4xAyWzSu^t=J5?+-z}8FE@;87|#3V~$5$lIdQjN)9Z;r{IA@iRKtIfe$ zmE1$&pI;J=|Hf8#L~Hk0#B8v)XVaI-%3%P}+|WTj5b?ONSS=BADYG5a(*FDA(*6t5 zegr8uRcr8{_g^*>=10w48WA&7&8#16@qeO{Uzsb3>F)&0bqST2{s5-mL!LjDu$1Qg zOG!|jw;5_wTv@CdR{%`f^K)}e>8}?I7Mm>63L9!;|HQE8%TSuN!Ds|Y#SBJQopr(R_d;&W?q2PiiLhottKq?QBIvR+!GryRG4-XsUOU>Snu3eEL_Ri$QO|t#9A#R z=UT0Rz|N8|@B*nXR0l%~#7_;cbki}D+MZ~bvxIrUDDdRBN!WbbUe&H=|0UQ>RV%C9tPr~s1{E4N z!kMC6fN!}vDBK3^$&bt;x)wCYvDmXWbr>cV<XxwWQeYPIU_~(9&*HJ?aS63^x~FtM+%?Fh?U))@0QdxlD4YkNNts>J`11 zNHqpNnld!0QG&sWJrH++_yoh{Vwk5PMr(A3qP~!3ad68TNZlR@AJDc+_DrFGDC4r1IeATJH?5`f}&kLR;wvXL@J$-ylW$8E-kZ*R@*Z(Gh0mlM$y%` z`_?j)tM5%u%q&*7NC)^@#sN_XowQmD-FTe4V+O>1j2G~xp8KrL=L;dox zY9r`IxTyn?z=yB0QE;YtTlL*s3a2Kig#hlg=I2r3R4xc$4IzN{rLh~*hUCT; zreJeML1-QW)F%DHA?PHjr-p54Hy#AyTorz2Se^GKMZ3;N!J zFMJVr_S2C!vprGj?LSv;k6?AlWlvbTA22yGXCMI_a2bU-tS8+eqR5wAA9d9>d@^#X z@T?Rln)?fND?5*+d*<+9%tL(Oze^!qiPdTrp`miVmm{t-0QH&~+o2N*&n=+c_BihP z9t>~e4JaE3vHB!WkoD;a&Af{hdEf%xBfKCU!3WC3aGO#^mJet6f{2_q6t0a%df7VB z@R?}He1z~hMBof{|3cmMz;)s(~Z_f@?{<0m5y3dJlU~tJ_mlYJLnEyN#+rn?eZBZD8*Z(f*$N z0x>@MIsRp;M`Tmiz+@&aGX6T=w#+;V+Y|mQS8Gk{neEna2eKsvM_394X~}2hZc@mz z3>DUnh9ayS!VvGw5G(H9)Q-LKRI}*z)c(k~siXvdcXqF024xN@#1lCs2;Am85r#k- zn4*ky-YV!Xfy0OTZG;1wYy=iy&ENp`z$%kWkyk3RvEfP(dtvUA&y4ADbJ?e4SL6k% I;Q4U>zd2WIUjP6A literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.EdgesShowOption.doctree b/.doctrees/_generated/gustaf.edges.EdgesShowOption.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fc8e2bbafea6eca9f92b4eaaa294ffb43e5d0bc6 GIT binary patch literal 6183 zcmcgwTW=&s6}H!&8PC`rUp8wJvR-Bt1<%5I3=v3?wOS#fMIaL+SV*`S|vUEf7UPSgIGa9U&eNPm%Z$`~x0Qo}x&QM}!dK9f|K$b@z0S*K2|VmTY%bovJ#Q z@7(I=jrVRoJEwotS`u?FJRR7s8%8cmGPUGJP8zUKW{WU5Q#(({u+zQ2_)M|x3MZs!f&M%T9@(E2!Vi48P6T26r;!8>(%U;_wC4%%wO~i@q1K>@XeL zs$)wjykROKJxROZxd}f{lnKRV`_cX({7t{CU2@ zZ}J7ctzO^bQNZ>@8iq{lokZej&xl<71B1z)VQkMDGf>%*x%ujo^)e6%q`P%+EgkYX z)$l@>omP};^vyp5Y4~j@@CE$7h~FLj-XY1L9N}qs`p}6Nj$sqEGo$=oUn`*Jg}thc z?p$RB-aM3T1C*H(96v1R7cU}I_j%sKx7wU>O0gbU8$|4$E>OuKH*2ChG41&?!#>i zvu(}nET?NTP%C)7FhAw??Wb|OMBExym*~RFx%}A^x!lxTBA`K|k_q2~=T{WlG@f9% zEPSY>ehQ`58+n^GtAW~)TdEjN<^A2|@~ZjpB7%Pl!G42CdntkoJN+7jkFO$B&jqP3 zJ&OXkRZ5B>6mw42{?$c2s_S{0Ll_twd+fwPuFKR~@oCwi!y{2q*Ht03ji@heF=jGT zH>@CXQ=cV8MAt5aqyZYw&Ge!j>Gu`B zZM+EVeTASN(@D|u!nDKw9 z7DnAPHYk4vkf!kkl`N?KgK8o;wt2CUuhzZ;J>2&`5)&U zsO96QWk=H8pZWG=bAE1)LO8lMWT1ig!CL#q(%IH8c7)% zC(qF>y6!U`TQ_z!H|2c&AJkKb+Xh0?q428JmukJrB#%(=<^V3oQ<*;ZNo1Pzi8|LY z0>xeEd{qaCb!iV%-xih=`6!lHm5r;S?V_ev>p%YfTVH(i)=Q6y{{*th%NK4$rKz?m z5#LT_l%zpm3;5VZWn_V;dONb%!H-b}bt^N=IiJv^9E&K8t0AE5aas`Y6Uw)QEhnBU zd3MktkzUgxO&;Q3I-I+h)(9mZ0th>PE!^JwFP^M$NO8@8p~2jITf8jH)N))x+d#n%sD|K^|~$IlJJJ ze+Z=N6jr3P*$sUYm-Dz;3(BgQN7zY*i&YEhR|nb2do zQcHG*0KAef7UK<20Xiw{=ubQoF#`#_Kj1+d5__}qoViAqe z#F%EhA<@zK*}l3F#RRK}^y4*A-lYUk}ZN<$1>^yPS~2x1JD&4pBj9%0zYhpF%}TBVAK zo(5e%oAjo=~CkrBT@$R5R>4@=gkcBnVzvu zJjpFxDu8+1m~Y5mEDqI*U~wd*<+Ec3^<7gPZu{l1p*Gm52d$x7PLqPDp&Bk5remDf zrE-93CY;Oc05ff<-(e(F_Dj|ELg>h1A?j!Xn`){t&J<2i zp41Rsvs^EsoCQI0E?b3bz|B@5OoHfOo=AY2oXi?|=w9fZYm2^c37!z>83neX(_EN* z8E=5)5D?wa{g=-Wy*a!fKq2|+`i|y>=|G4$|m_8qtbT532J)S3VQ=E5?P f)TWoqX>G%0FLeCWCCrS;?>jC9yF4zK_Gs{L+d?@i literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.edges.doctree b/.doctrees/_generated/gustaf.edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5f88daaac0a4322aeb982b53f75ef28b7e1ede2b GIT binary patch literal 7270 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 CRH{7y literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.faces.Faces.BC.doctree b/.doctrees/_generated/gustaf.faces.Faces.BC.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3d4766a4ff2579bf9eec34d0e7c688fb406f843f GIT binary patch literal 3612 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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..dc677b78e9e7ca09c52e7eda49d6d3b1c3a7f9ec GIT binary patch literal 6031 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 J-QfAK|4*D|3dsNf 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..7afc9d4039e847bc7b6f3892d79f10b4977b6250 GIT binary patch literal 27114 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 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..9d05623dab78fe74f8d9581f85bfdf9286f51507 GIT binary patch literal 5240 zcmcIoQEMbw6;3AUPIo8iOlD`|LMCf3!-Zu|QC)SbZ*{8b zmQ}YVorlHUheZSTZLTj0K8djU4@6Kw{RJxQg9!c-zjJR@b#=#N^J1XWeNUZx?>XQ3 z&bjB-C#|2y4_C~e+R0NMCbMJL_Y>i>T&s>Rydq|a)UWl^PxZ(8NOd#!A{RyGF|Agh z;qfr?GnVL&wCa<(45R$GoWGGXPlh6?r}GwX^No-65$~#&3}wU`kJOu!BA0G(9Jn6K zkH2I7o8Ow|V9NRr*ojjhqRCmMfWGKD~~|ahAigw@&XBW4@wVVdAq{ z14xT8|0+D;Zv(g|_`HM9AwEyZD*%&)#+M`D5hfGFK|L{0500(}VUT7bWtqHudK>b* zeI~VA@OSxe?)n*j3jo8&br8zCX5$f_^y!I{hrmr1*#aRpmpMTCJ4WA45+U6sa;b0r z==l=~j+_h*E1M5rJR3Z(ws7(ktU4LgT7$zEFMx`n@7C zx$l>(d--LoD>-Q5ew<#O5DP(!WHJ!J;5rQ~4~ciHCZt<75U3VJ_^LwimTKFuRbW)Z zIU?d_M2^%Zs4#?6W>vLKo0u##W7fohPx(1H9nYQSQEgt=n73?O%XnLvR*vSDeR`W^ z9kR@t)uF|2w&*9d~rVJVmM03+}0QEc}8}bE_E)R3d{1z75Wx zKu|=HwQC_`RL_yZb5IFouK6!&{nG27YLrG&FjM)j2+H^PfrStbe4DUnMA{RHY@P+p zV&26j?j&I;s0++|GTOege>x% zC`8$v^Sp7CndkrWQ90E>JfEt1-v?eXlPp7I=y2Ox5X}+!+uafQ3vB*#8NU_8t+snC z{L5>`@!#4L9r@Zh6A2p(hqio~njD2N&5az?1CdM`lhryYS2o+h+}eNN-P(V_+Am<` zo@x#L^U3RG!Th4RN+WNU&N0h^eg03J;5XJvQu;dqb6Y_rr9VRH53uJ?6)aVF|5^#u zrls>hUZyny3$hxBX?t~LrRl}(1|o9PHJV|QkAnA)YS;2GpGT`%!B*5($`T(X+nJ#U zX~e0V26Sz~o11oUXVcK^vA`Fx8zx%aOE0zBgn-S`DD*<9uha&H7K~pSUFl{MCQ+E| zo<==SnHL73r+=opIAh9^hHBKoXt9tX4AXtGZh!g}e0^D1KZoAKJLn<&2HiU{;C90O z9yBq9fgjkG;CA(2L*3NTs;({@aWs7wE;Krir6Zt(-)e2(m@s%xUz$mD2sOuv7}{PC zp-DvbvtNma)c0K?Zd>KUYP<`LvbyKB(oP~OS*1rS(SA9T5}eallsGR8&#BqHhDgAo41Nhe~j7~s37dfbibVN30@SqRk7o)>wg)KV>tDE8 zLM039GB<{#3-~=oPN7Ql!vq*PEb#;tHZ&=P42Ittnr7+o;zNgJnaCXOCVs>+AWo*D zk5W4p>BcH8vx-&+OHY=Tn7*dW>f3eaHdM18FFshBtnQN!;9AZBQ3Ri~+K$|0Qn(Wa z#C?qK;jXOS$e1TG-|-ohZ)`)iu`|_1!UgCFfk^0st1Jj-nzvQoEu?VfB6TkWy|(=# zPMw;90M-aXurEv8h!)&25<_kZ|6G*jtnh_{djz!Zqoj+RIn9}dC7yI%g?T6qMRy!O z%-wNBj+9nzRH=b9+k!JWs)D_ffiSO`KzV_@Qup)AM7lGFhZ7#*1OBc@)OM+@JVx{G z{J20~=K$&rGqyt~5}sQ^d*E^OlO6(Z^9?8)2r>J-NKx_W)r@)HQr3Yhut#`d5`Y6$ zVR%5LA}_{EdSOiDjf88nk=~k|Yj7qWGao5@2@^QOseh#&dC)p{7#fDi!CNFMw8re+ z@;wm98U?njU8yyeyrQ=+s$FY+)soq?MkvyD1@N87ZP2k401y!U!KO32W`{!iwE$S2O9s!uqJUnWO^$ zXnC#j3643G5Kk0TAkfQsB8q@CFvT&l@m?u^4IDnxA0QoYr9)x?)*J+|8`hO%LA+Uu dO$;}~#ES}_I5VLaXFZ>aU0E0C1TV(N{{_n9((3>K 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..70571b43385a26a96a8b6248665205572b978a76 GIT binary patch literal 4081 zcmai1UvJ~a5%)hymMly5_;*zQ=V!2oqhQ?`=vcIeZ_7HS*nm*vjvS%#7U%hW?x$~ zB6S@n#iV+_SMX5BGHYHJ9nlrN*Y-^GO-IK%;jJz6lSNr*HlNH{$cxGE-2Yc`7Fl`) zZ|r@_m*mRBieFprWjAN=Nn3Gj`au(f*frhC_e-;v#2L4j<&2pD(^|!|QX^)HaW{?% zil-MQtSBJFb0=e|f7*}Ae6^Ud@JjJH>6E6Y*@CvL7>l>XP&^a6;>3J16*A>hRc0Ai z(;KO-rasX64;(C}-mz)0;Lu{4N7e2bmcn)~s z;~vNq-gEH`J0sc&iWsQrQmv6;u#taKA3Am7CxKjZQglq$D|@0mZI%@s;L?T9g?EXq zp>t*q;J|qf!jM&SNQb!0yER`!ufI%_S49qLg8O)-;Od%N3jFst<>M;jpZ-|JtNeSS z=eMtj0mw?WIF<9$`$?GiDtLae?eOe77&bB3Tb0UF;}@&=KYvsF`xL(qexFR=k6Zjn z{F#FMY!#$<4GwyL#y%}sCNs0eA9mer-&oep z5BYcvAC<%DvGWVT1$mi;y1eJy_J_@hAGS`sd((;e{S&{bPQ39w5`26hlz%*ISbX(h zAmDQa;tCYiw#3)?+{UBMTYf)pt(QJv)FsgO0F^ZZVuPH0f!1x;$=^+7R8qGXwke9< z=&A*OT@|7*=4Fz2KDDdZ3<52~0IgXUR{XP3_gwwPqE*wrdr|z0Qu&cM@ic?`zom#> zT74G?Wv1JcsU9s4VnGJ~T^p(mm$McQ4uqZj7M?U+Zxez@rYz2^_>buUBYm5r+5Z=V z5@pjYGI{R1@}22rvVI)Z;&bZ2xAx8qtIc|S42>$RqEQ-WvX<3)WQh(dxYpVMZQT;ho^wMsQ@d}FFqs>wlz41nLRr=ED<&!F{Y+9qE! zY{mQLu~sZA5?6siuH*u((+}H@M%PH}#g-Y=Iy}O%r1Q4TC@d9?@}L>q!&>48xY@5@ zz@OEXkFmr4f-zvh5%#|#8Znq|iv^JNUw(2>icR_d5e z#AoFK$Bk~7%0M1yD9%zy`hY*=6qNnejN%L!1w0F7L=-dqQqRwSeeOEMv-Qn@DUmR_3;d0>Zu6(H9ezv}`@v=Fh7{Ikc0HVZ= z>cfO(i;^uk5RcHnc5q=eZz$KH`IWAFINVlR((?z+>(FlP^9D%ER9xtuvnh`6t z3|1nu6N6rdQJLmJLqP!R1TmVE%2+}M$4=tNP3d2W@`9I<3~;4@))8Okvfx4cO~;Z@ z2iI{CYe&&>5XA+XB@{^IWv?y`l-Ur$6zB0jcjYrr=?RD6;zFYuxgl#2 zQhtD&eX|5bkEy=EoNNIiCUF{T`-h_!W|Z?h04N+)iEBDMAChFo;5!wE`Ki!4FJ4Wj z5EqmDRtuR;q*_d^c|w}b0cZxAr$~=>Hz}TAQ=!uYhxIj^p^73c?8Ux00VmU-DbFT=>Kbxqj*8n%vt=OSg-GxNfAroNFBNB!t#gz%izh09R#d zw9f70>SGLKP3FF>-I-mUUDHR9+4t=P^$RLuWW^{B9cZQ&9PJ4M;uubWS{fgCpiM-d zJYQP#XiZ9^+lgUq-YmLQLinPBdXI$uS^OZrFHD~VZkAzN{BT!@cj&|AdyKIU#K)yM zY-h}wI1FQd%OsX~2^D6o=Y4HUydEMzhSQl$8WK3w#~Z>%yT4|!U!Uq;dbDOAJyvOI z>Q6RpRXZ4MXd9s{sVP`<5XvM0y1)^mqxVrI{|*RzZ9hQ?;D&@^0+a=k?hkCb$C~({ c5xcw{#95e>5%FX}DH}x8;HqBWuTPWz16w^cjsO4v 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..1dc1505da69c78faf8d3f4791ad8b1f84239b5a1 GIT binary patch literal 6329 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 IJn#4Z4WLI?{{R30 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..c982dd1034829a9fbd0a1414c8ca1dfec31c271a GIT binary patch literal 6153 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 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..b0f1fb302c6b53c2016bb0bfa0a976820c74ecbe GIT binary patch literal 6752 zcmcIoTW=gm74~h$9$#Z8F&D>SR%mza5RVrWp;fetkV24F7G{Z-6%reop6;5dZufL` zx~m;q0<<7S#G()nXwF`{Uw=#g1yF?&D14smBU6 z1qzP`k)N`-cvz@aB9}pwb?pB6jCnE;@o+nD@Ft&sSnTkYYREuFthS_X^z%%*y-v^d zSl0Qv{x8LQ4)goqhW26G+&k=q__=_3%2Gcm48P691$VOG>#F4p#o@E6X{9(+b5Rhp z;xO;JYSEQ44Z69+eI)H{;AbS+ycfAyhDrQx#O}cSTJZCv8gyOnC}lmO$<@4c`?OT> zHNM4{`3*kHx7EA*TnyNLn#VCq_aBS&Xy1rjeu2Sk-!QiC^ckpJ$$YyyrWYe~7gCQ+|QVNT!K zZSR~nN_)U07yfRcw$3kh%Dn||9?HVa`4{+JrGrC$6PgCAbMP?l9H%>2S)~;x3!p%m zrz0M+RXT-bFOP#qIeYV+G-tcoL1_Q7-cMdk1}Ht3H&oN?HlDOO99mZaj|aw1hDUcq zYddNQ9PK4=COTEE&?VX{^q7rkwRJLx?q&%b7!iUk8B32@L7I3Ax7@eh@SW#*gY^v) z4$0|V@(x%l?zcs+JyG*F52m$}TUr(4dRVATL@~9gs);ga(kq5rCX$mEXakWKIpg9t&FMoo zu)|99A6+cEnvM&%Zflb92axeZ>w8_xMVE?%VppVfKBwO-@5Ha_x?fDXPMp8)=k~gm zY6h{!uA1uRC>F|V%%HmI*As4nzItvRN$1#&aKea?>S~rJiAbfB4ct^d$^`-B8Oi=D z!weeqyy3XGjds6I0Q3xPvYIYV1x2>;O6B{;>#Pw7rz&b(WA7dpoQd+g!y zD%4u}({W>uj~L>4px6S8OE>K^S*YvIK=^sYvJ#?oG~yKiP2l6r8%3l-HL-v|1&Ce_ zz%?xVz7orTPfee1xP;nxi{Ms;TBOJm-4G9JF$y|O!)T$F>(BsBHA>-Ia|%G}ZAN3 zVX==_*f~L{*BG;~GNrDRyt6^V-7LszL~4$-Q~I+RRL1)93vqtOaQ;Qj`NhDBoSh(P z;0AG_W|GrFEn$M4BvIf6z*RMmp*&6SZ2U>nTI>s7$HAI5OPCk*0{HP6Rh>((tza_d&frrlC8`Lh>d@{Fjr!Y41X3Fy5Q{scQFr4yBb zv=$@9ourH0?Wh(x8WenXosYb*UcYBPkdVPEM;)~E<8Lr}5whfA|m zhm7z5+b#(i<(=U-vFB;{HeL8(_$_>e5Acs{V!`198cxUtL8{ICyXVu{I1EX7mo)R_ zc>PEDcJu9X+1Mw*#YZ65Sx=b-jWe-hRM<3S^LW~3k=fA9Biqr=75*L4paFy8sy>dz zo+7(ob?CG@F{+D9U;E2v#DfKGJYzspZSB(O42!bHgqUzpbvx z)Qz*qrG}G}q@s_y+jManQb;!{4yM#%NyB^$bGmO@t$KM%JtAk=5n3*1OlL?fSaqN! zwoW}H-Q(&ZFF|ID8ld?ul}yzuubLv4NiK^+zILcuwvU4n1Op!p9W=QH2?k5%LaKI- zFkH05JdH3~p`@F7O0?DBJB-%7t zHQVr6H}B)R)yHlcQ=Wu#nLEHt3+ne63585zHHe`jhsCJZ$kkLUm%Y8$_jH+aV|3AB zX)02OyRjd!6dEU1Q30tnqv_fy4ShbeK2BZr})h#d4;320%ar)u5y`{Arn&%oN5nq~1Zb=TE`ffK|pToF%KfZ&jhDK@m@ ztb-}ImIS^6!qJZ+_*NSuvs4G`X`I#@4yfrut$L8p)1>(wwh-fC6aO;RqG|oIfk-c$ zW&9itr;l4fiDaG>Tw!J?NJ~1ycYTIDOV7gEgRY2%4xuNnjZF@z zTO%j7%3JlOjgj+#x2Yt6zdnAJUBNR42=PQt0D)r96Hx?BL#KE~=I`10XVAlw;sL?| tO&A0g)SAHo%!NZF8JS)hPHP)31+f?9KKV?a;(pO5u(P;8FL>VV{0DB2-unOm 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..ef87a9826673fd8ecd0addbbda841b621108260e GIT binary patch literal 7436 zcmcgxO>Z1Y8MYnI*yE3JoJ}l{3GS{7+Z(&_20nd){= zSEsw$9}=MDup*Xf#UYK5I3SKl91wqiU$7S>4$CzH!5)D>!1GphPxp)yJ6@rUfg#Wyoqr>dS*Hl}^9g zcU+cs-_rj}ao+$8muKH)M?}>N?o5r{`7k%MH)98s%ABvNmOWyPUsBD2 zqdhen`Vq_bvYw+B94QmOmq|#1IKSk3DRDXHhEAGd6W<$=Gc@1ky)3R4J;&WoSf5}r zH7A_`9p!w5uk$5-onPV`>i!NFL$;G-QN)s+Ly_$781~B#5SZ>5!glNd1C%3~SDa4B zsLpOTNx|Zc-I=V%r&Pm_Ja$x*vQYs45?JClA_PS{?9V+#bq6PH zIVO7iYh_)8JW@B=09Sy@fX$&KW7vW0Ek^`2LJl@7DZx&Ya z@H{IiY{s}ue0+zj2KtKzmgrkAp@kc}(^}vyEs#lRv?rBD-nXVEw=3y9I!ik9BpoA~ zd3x@&RQQkieGxu#XI*SXQk6?8U6B=_q&V+9w`=0v?aF>{m5k^r(o*%SBSBbNX)iCcahA{qn5m z#OdcgDxPbprXT4jR}IXky^>~eED~v_Lno1s zGeM#Bgn0k0A%=~)PhCKzAshfOK{P%SPb3PuDnuh3HE!6`DsMawI zpPFift9}-S+CTWmYQdJmC8<+#{$vC*86tj>Bj*yN@&C2w381s7S-HnIjF!OCcgXg% zlbDF@ib&S$k$OSVBGnHPC+2nc`RE;nJQ1aqnW&Q7#c*|3o$S zdE{w`@9%{>wA4c1XQ5|eT&1~Mb*;~9O0ABHtCIlY^RYS**ay1hl=W3Bc$x$5ou8*{<=CG8#f{*@j1PG^Rzdv+`e4{ynVYQdF*;c_Ma|9_8$p)J@~^#E+NRT z2fxRSvue?r`bZ}KXZ0-_^;yQLOd~e7SIOhA7h$bb<6r2~ORBLwDwK?)(o`mR4+zE$ zkXpqF$co5MUz*5ztO*|D+DpcoQ;!E3ELwp2B_>c5fgqMHN@{D!^pxP9k zoex)fGRgHqrf{~?-vGL@65t!BYW?TbC(p_{x~!`wsp%M@HqH2EvMDHnyn&fRNVZI3WQ?Xzi3d%1P9=E)$FYrP!`T7c{Mf&`RK9xTdd6j;)+>P)3%p0Lfl5@se+u zk=q#=vz#*WEp=5UPLzfY4M*)b5d+MB%#^Vqg>=GvcSYaOI_&;AtSW?wZq+MwM=8-C>z>GeUS`v z?6hfS72B>Dnkny|S~ojovt}RqlG{4ifOx!ETqs7dduj>Y9E}=6cEBLM8MVM2j3tU? zL#?tSAA<;qpHaynL2Ef-obdre5FW_a)5IZf1-(|!U3Y4}VK}I(EBtb}|^7i%d zgNe)PGVuUgOF2Xo>UraG=tP6e88AqkrXDkx->X*==8D9#Jw~M{o}nS|o@&Ac`z8hyhfn7(RX#N-y(Jg9sTKXgDO{!PfU zo%G!a^t4l<|7wXI&gziK?z5!pGuhW~AOP%eISlbwOFBJxktcb+JFhlilS6yto>aQ) zDS&Mz(kJS2dK^jT$maflhxmj2&W6-8sU7E@57c&tp+6|YZp>&~m z<8P3%79pVbvluymel9XY2oncRU_HY1qdsh)3=CH&R3KPS!1+Tm-cUHk8|hb@{Twzk z>@g26d<+se!yxWNU2_4oZ!Jp0%=+_@LZ^8-u z7p90b=EFIpZF(5Z-71KJX-ULagm6qjDSWFdW4qL0>uq4`j}|oKqo0xhK1ZA8d$0o^ z54P}Ms#>(IvmAi*!AZ(*;s+ajjx_fMe=}3db?s?%%jmpJO2HFmhn%#8Gj!K?$g=b< zv_0&JaAXjA^XkOr2)Z?fu~ojRFI^eKk9eC%3h>t^aTO;>a|j_W#%{0^^pLIyLr5Aj zMH-pASL{E996rq7fjeNt2gia~Qy74Ga1=?#wiid+T8E2%)(w Ic-HIw57(^KQ~&?~ 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..3ee2232643052f93db29d746be101b93cbbc98ad GIT binary patch literal 6077 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 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..14834798c682faa51e5e2a574572776d5710b59b GIT binary patch literal 6817 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 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..10afa04a8ee43b97bfe4eddde74e0d7486d3569d GIT binary patch literal 6889 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 A>i_@% 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..7b284268e1955b84a221b6403482e13ad2e426b0 GIT binary patch literal 4414 zcmcgvTaP3+72ciM?wOuT&t)mJ5@B`{rR8#$NtO>G`}&b)`{@$0W=bs<*62>f8pJb z)NPiVakGBQh{R^9Tr8J8*_T@{{FxlMp3Q77I#ceu^V(QG8%vQ_LYr~QEg!#+KR;J_ zD)czX1=pU|WBH@sh+DGjYp(jlNBjE~hqczrBR61+>&Z>mZ*Fzz9_3jn{AE4mZiic| zvuSOC2Hk!$OAXz0E6KSr5aPR6@*;k1r**X)OnGvp#f)@nw`KX9ro23mugg98Om4~( z$0kx0VxsG^6nb)_^wlIn(EbMl%_JH&VRHd3ZbjP6z8a^oHn`;*7aR3dK5)IPOvP;n z?C1yiZQM$}2|&Mt-&^>-jo&%l5FqI+-0KY3WaS*ba+BbKv-8ulSG(%85LT-6{Ofv0 z_AjmHwfw#ub>NX-1y2K3!md%RB3v-3bwTDBLKQACmR+bEJfx7%41DgAU+)({qO{4%oTQj(E;#bsx1 z7bcA=P@494`*d93W*CbVmkw@={JE((h3+<%7@@C)C(wU^Q$A=o`Tqp{;$c925I|Z- zsMiVir>+?-QQ@ybWt&imkZjZDFQXxUD__vn+4Ac0cLo2*y{#J|2gAiC6~>-`hg`w5X9*ZW7j-fCW1U-0)9 zhZdK5+Hr93?nZUzT|egib;qWv;92SAzugu*Z|^G9!T+GUKx8fkr5eQ=b?>%H)qW0J z@rdftoxgW`&15@1f=1&KvrsxHRV!=tXeT<%2y214zb7Dm8Ze`R8~{OnU0$ngEJjTT zjmUH1j|}a|CWCD>n$COZhDoid0b+}GXRnpSw#RKZ2%-Nwq6R56 zbTb`TkJQoskmoh}f;JtxzN&3iTYo7JF5RGMQjowfz~u!xx}w5hHy+4v$`yt?&9K%v zM*9?!)G*O34(>&-x#O8qwp3PhCNCbked;UAx?s06r3(+qkP3dq5>-&UYOv+&Q6h2? zBmAw^y5)TiO*Iinb2BkCV83WLIZI! z70JOJM5H^r^ujLQovh8QZ6W{bhH=xS0qxRfs}pN0-6357L^BfjEEDP-FI^vDI78Y899asYqWs)?*>^);Tg8?lw?SoTKdp<3 zE%*migCIk~)g{kq!-F6R%qHJ2MU@eCsu+44XdQ~%N*TerD+5Im%dRt%*}%^OmS%=e zbGk@ljv|lb?=@e(7Iv*b;NBnYantqB*}gOwcz?WtkW@yh;4u-Z~af3m(;GlRN@w2`Qq zl7e@;iOO@Ji#wohY`xdWKLrAx_+KLg(2^mT0HuM`x0!8N%c_Dtjd0XcNI!2kdN 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..3464d433afc543e79cdf9b48cd4ffa1db05379f3 GIT binary patch literal 13758 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 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..97ffcac50002d06d92ed4258d447c27f21e94f7c GIT binary patch literal 5462 zcmcgw&2J+~70)DNJ9ZN1V?Km5lOe0!Ws_lTbKrnRD}=PH1d7OEg}A_MQ|>Oi+Uf3U zx~enIVI(-LAfj&D2(Ace;Xgn~fCT&nfW!gur>wO6URAffy?Ryk>b>9l zs-HG~b^2h<{+V5siZGe>Sr8;L;Hog2f%Nm3C%X8kIQd!evN$&FjJ;4Y&wO5(HE{SM zjDn0O#q+{+iCu@0>X++Viu*d0$!xi3h^A;gFOEgqG<2vVUYjy+jB};gs4sYw@=Wyu zrdj{n`1+2F0-p6l&0|&2dMv;DeLf|*R$TRA;pA_o4ASaC?3=bXyPnuE&GJ@f=57=w zyg18;%ygL6Svbr!v_ZGu2m?hoZTS&X3Pk*FBrJBnHiJB!4~EP?&-jRVa?{dmOjCu} z6_3QWcq}%=q45Sn#(a?FNy4+i3z?k{oC>Oc5Ks-AU;}T=!NoKW%GulX)Xx-d`Q&sx zABr{82$O(MYsz+Z5MRcv#A{IK>-fBh&s+GM&<&xaEVTDJhHk=S3|pCjHNo-8(edr3 zI*Pd#GB{b)I-+@|3zmzoir!p3XW|Kr0O9WfjQ%y*k1^Aw8Bc}Kta#)^*a$X9OVFF&Q7p(b4TTtK93! z=^d-}wpG%yh8i^|d*gIs zK97(FqZFn?rjf%5;&riz&!!W-F!yeN4`jEv#s+iQf#XpgMb^6Fm!{)s>3gu6M(qCe zB4df4pBD(m#O1(olj{;H-W7)q4Y<~~2xu0k&Y69g=z5~6XPP!aW}LB9)a++of1e{} zBulrRDSc!M;1%LQ#FR0^@?({Lzz!&S>P~PuK<+V*`6!IwW zmRzZpr0sl7ZS$#esWn;63tOdHE7i@$bM^dVb@luW(*CtH`x?wWlXxhD%WGnZ-@7UW zk-T}qq8#a~tQMMxf-)J`R+!Gyr;g|8(@NHA(OlI3tuE?+A?kltXa5-N|3-~5_sFFb zOz8M0T|Xbz-1Y{hKZEH{(9K_}%U3q~dqpr?&L~IvGDQhO1r+jHoi@Mmr>kFqjPps& zIRC27D`Vr_8e8N|Ufm=}!YNP4)4VBST+J}$VhC7YG!t<0@Xp%WYBHi&rRW*6Fe%J> zdRdq)5co8WLO;~Sm1$w_KR`_&w4Ib+k8slz2aZ2&uNk4 zFAFVJ)!KA?2m0M`s1|R#s{OMg!>m^kZ=3r%V~L6wwOL-8$uTNO*Q+$N)GR7a*G#A4 z;Q@v@op;A{{XC;i$eZ;&+ZDz2KW4L35E{XK>Xd9}H$oUiqD8gR{DF(GRqQuSnd>yy z#hKVWGwrflLCu5#F3-{0#VH0`?m*<6W9_o-bqSTNSo^$-jCGE}P{FHS5iHhXjjU`+|AD6$>PPQ;RN&c+-Xr-FGMF9GIW#(kLuUcf2D z;~45A&rB1JI6|=rjf4TPilTQ~h^FbXTuX0GGV4?f?*w_AdNT+@v6c`5eObaH+HluW zEV#-1b5g2!9!L+J6}a{g@TKBjeWgVSWu#Dr+Cp^K3qr+)5nZH|vQ@bT+-w_{QHU1S z&#>uE$>xnhl=bus@Q{At5cF@>7t#A+w*V&J!jlP1<%WRhKKU1rlZ*kxD2$PczPI<5 z>83pOC_lj~eXB5J$P{>o?BpEgOG4{ZJsS)_R{iu69d^=}*?3Tx2gGRw0H=qZ4Cc|c zq2y`r&98kO`s`*Se`$N7%(wqawLL{Dg6ugxxo|zQXCMF!gpMN|*4AtYFAB6MPB+aV zFd2I@_nck8b3N^q*;AK^W>ZguV-ev4{N9bI7Bkx_MpxkdB!^!sDC(XayP+3JpOvaT z^aTodABK1S1}$3^V)c2RA`{TVlYLDpZrBmFQL0RvTFIG|9W^5GI+7!!CS$(%RR z+s`>VF&+{TXOQL)LVTH1fIy|^%P4}T zp;M%h*1IMBBk1A7;(fRSdO|oB)T#ggci=3NEReTmWNX8%F!7^2Ak2)(?>hknyD~0N J2G586{{x=1Gt>Y8 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..5485f31c4273e2cd7c146b05c89b580e6ad88ccc GIT binary patch literal 5432 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 z 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 G*#9qbR6Dc) literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.TrackedArray.copy.doctree b/.doctrees/_generated/gustaf.helpers.data.TrackedArray.copy.doctree new file mode 100644 index 0000000000000000000000000000000000000000..74e373631719f23af412b9af8ca59ec61e0b9b5e GIT binary patch literal 5057 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 Yk?eK|I@6|($+AVxF7pc%zT-yizxei;qW}N^ 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..4c803fa7dd5be80cd3c42da4b107f6d9dbb08a78 GIT binary patch literal 4408 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 TM{+`OzZp=nEAxWurUw55kGH4d 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..257cbf080ffd9a95fb42214b46c2d3b6f41dbd5b GIT binary patch literal 14119 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.Unique2DFloats.ids.doctree b/.doctrees/_generated/gustaf.helpers.data.Unique2DFloats.ids.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7d4101fd21918eacdb69ceca3d6df85aa84ae9f3 GIT binary patch literal 4172 zcmbVPTaO$^6}ERhvpaj4y*Rdz;td;6lC|*6K;Qvc5hx<^0}K0r0#7)dn(msZ&UROI zs;cc-q#%$8uu4e?rT8Q86C&mR@DKP-RrlQ1#!)P-Jaww-)H&bz&ZYm<`Pci0x57Vn zU@DQz*^p(KR2etkZD%U2OD?Vd(m(vO|IDAco@URDs&&e}yM+^}$cs#K>7RPnr{gv+ z%&@t?Wq4|HCFj>gM|8#3Q-3CUu48js@TD#H_Ov#ZO@@LO71w5%G0TR(mHDSNfA@nY zg<{qW^UQeC00nnGa1BiBpjE{aXpZ9KbhcZytce^HN_+hNw~ zd|X=~LI`Y<3Gj9+EtoM7;&(@~GXC1m>T0nVv-DE)37x6kmSt1g^5Q_eF80I&u_;a* z8wpkNk*=lWdh}fB%Ta`({SOA3Q8a9nOgT<5%d=+pRagzRfuC=jZ`5OP%XM;@@!1mO zF&g5#@JqZ2P`{7AxA6B4{vMK#fJx`UvooNR%PAt}-UR}uXRi*{=^VL--#kd7dtp7R z#Sg?_38fzs3NS@ZPu1k~)lWyBynz71?K>cIdc*58?DT0TF*)L5YrR6o;3%YEb@lk$!GC@`;NJ^ytz#APD5UcJ zm{SW(*#E<1n=pxhY?I=fScu)8>t%kE6+#6zZB$nX*}U+r zb173L%cU3pc3U8uy{ga+{)0XX9?ut24Pu?Xc3V=lKl`nCKsEWwU%S0#vt1wIL=%5A zKXf2fD{Ie@CVI?pYf(`BHDU4d02{TXfC*~R0=u@s4w|YkpsFyaV`I)Hp)n7rD~60B z(ApcT?P>K!DABBKHDtpM;N6Vj6OUrkdU-tN&00KiuUXBcDHzQfNu|{k`GJdF;ti-$Wga_)Gd zl$FZzrOor(Zl9(sBx^F8C|!C;`qV0`BvmC1Zw4w~j}l(+AW5F*RwV5JgBP0%%|vtI z_B5}Qwn@RCalp6Xb_6Tt%Z@wZvmB^dv`y0<>bOqE$MqD?^`A2>!7ZH7oRyID0DsEK zDgSrZ&m}NQP(xHk40OHPP6j_6gi8Eibu-~wE1d`?vw~|NPNt$ryMu`Il9o=;;@!#G z&YBAGU)PUH7Y4LfAFOVy-E@cK0ElJ;@F_yC-7lD&)@;fFcZM#pfmzty)jU-?OEO+@ zj9fCM8S27yk%|*^8^DogAS$2aGcUTX&uXiZg~)B>;MRUtmsK+7A5aZ~92H(mR*=Gj zAPLN-*e^tt;dQ1G%mg@f$Y+%@JXyXOD3aRbS#EM0_<4|Ixnbji9BHiFYV!g)wg+bn z>P1L0DBW+4C6l}e1ERZ6zwihqkC2F%TA(dMym#@@fH=h^_<2Oh1=`3dSXks`ZvC$h z-*NqlSBvgK&g_w7%wRiZhWn1Nwla@LBZ$qgy0Svaq0-ZlclYRIFaReL%S(jEhEa%D zgSUS86X4m`lXOizNfzqgZq-wLBfeg8J?gO7#Ea(;7)_0My;Ej?1J_DQloTNd=mB zionNY1IhtH+`gUT!pOP_gnydtIfCy1eKGGBBlh0u6#e2awfxA6PBuVolu%-}=c294l6VdtAj0KX z6>}1Vqpz(A=cjus8hh=l;nMMneiT@3siNOo*VXKxuc2(Ds-~jg-EOLi0_egA^o^}w zH1aQjz~}xqNCC`%NG3pO5cK%qyn3vNcjw{|x7}Q(MV%2(rWCTBj0#*+3*zWB{2zJY BT0#H- literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.Unique2DFloats.intersection.doctree b/.doctrees/_generated/gustaf.helpers.data.Unique2DFloats.intersection.doctree new file mode 100644 index 0000000000000000000000000000000000000000..765a728576be9d779178fcb12de9d79e8ae862c3 GIT binary patch literal 4449 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 IFhY(03;#fJ`~Uy| 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..9de0cdb17a1bb9f44880547c0ccae56c161dc8d6 GIT binary patch literal 4214 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 HsLB5TQUZ8n 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..3ac99eb56d8f625cdd3093abf1dfa54765c3d405 GIT binary patch literal 13399 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.data.Unique2DIntegers.values.doctree b/.doctrees/_generated/gustaf.helpers.data.Unique2DIntegers.values.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7076b9ca4628f78f48c4939dac106909e53df413 GIT binary patch literal 4244 zcmbtX>y8{p6}ERhGdp{k*|lSX6mQsolB^ZaOoWgUSrG^kS%QWA5dpt2oto~Nsm^v+ zb*ih^yODxGBETpmA(Y}p;1MF_eRu=DQ`Oybu^k*?Y2~R?r%s*v&UY^T$Id?&hd2B` zJ1h&4%BwL;5~&hiI=hpoxXQUS?o0RJPwq2!YWtc!Emfss?(7X{#3IcS&82(d?10ow znw8`Fe6QrONtJAmi;n1u-V=8!`nF?Ilkt@;`}Vvl4V#Sx&kC-~al#B6|3;>tRQ!h@ z{9GD7C+Q{2DmX`GVCB}Y`4zeM?GAtL!fUz(gYU+PBioPK$BJ#+t>1WVZ)K_E?!1~Z zyUUEx>9jJqp0LwrAL!wwxG>SH-@# zFSf<8olS(w`9xPzay@yf^u;6q()U zn2GMWajX(=i_r>b?-3|)O3qKz?Br!UXbJQhf(jIFf$H%yAe>@nKs!;HB37o-YgGNt zH_?*L?)$TpN)+cNeMH9|J##Wp`QGz(YM$b~zYHWf7vwct3(=|FgO8&EOs2c+0bT7W z>DPQMg#D{LdsG&T@^=SEO0F-tBUFEZTOQX`RR4>LH8JZGt{?p$!8p6=qtW-c zZGzTaP5OJbSuWvW-vrMN!4t6AA@k3|B7P^H5C+i_1Mz$034G#9tlwvp5y*Skb9R@k zs_Dllac&*sZmyDwGULv3_=pnWW8>`MCKC{mS(RnM(-$(#?nXw%5h|BK75wyhW*U6{ z>QL55*_#x9peKGHj>FUN)SnV+9`-=jSfR+SRQsk}qt5nmADe4dh*dIw|D#j+@FaO~ zB8#z1nAYt2qus|T&yo{a8ISZvh~GOdNsTzXTxH^K#RHKR1Xs5m+Oa zXVzA6jgYk^a+6ny%2_I%_?PX0c;>o52l+R;G&tQZq#A{?zOX&1nxBJ4JfaeQ?G|>w z-fY%K(5T~Iwn{^(8d;-9mgusQ8-uFr7KFu5JZ#j;JSHenOYEA?JgSSuh>FFi3T-_} z>$X0sGu)>bA=eyR?`xaKnqtnH9!1{l0_g1!NbxXqyB9~MZS~@zeZ^=d%Z$;?5*1p_ zQ6EFA?-*rR=FV=|-A0EeSXOl3O*@DyO@l<#jt%>bB#aMsr^X9Y)e#LEeoUHapKyt@ z-QR|(rpXE0Rh20!4i;6b~% zxD#S%Z_ku6QW?Iod3Mtt(6olMjjm=&=MItqb=D$^RZc@-36rk|3D3BfL{C#AqGtTT zjrD3A#79&hYym=OQ5gJ5*&Ky&o|`o_jddq@ue(Mkb)GT)33GA8F0n{&XOpm%IxrnYx9 zkCjfMgclsMnv7}qI=5XUmaG}B5L^uRK0*Q zPfM1O!J(IUW>f5!qN3zgq9P0p&^qK-g(`WpdeT!QHqm8TrpEJg7$s@RrWrk?_OjRH z1#)a3k10_(e3HTFL9G_e(ku+l_vjZc!D!+W5n~OkC5ZPPK0XkqumnGkD7iozIR^`~ zG*6BD)!|!qQ1D{eXXr8eB$+b!PMKl9D~u`1N0SM}<+!*uLdmhx^NF)}Nz*$3&B*W^ z;W2(z;>GBVcYXvs2YME7m?z27{F{w=s&vHH3$Dj0H#2_+vVS5>p5d~-VN;|~VuU-} zvBw}}9<{mIHp(cBYYTf=UQ5HSB9YEThCh(^R;Gye`(=)CAo`?2QkMYgj$emml&P52 z&>qJEZ9GQcL$U#74``$lXW&3n6>d|VD68p)UYZkmGsQwG z(s$DZh8&JDAVL0K!v(>)!6kQNXkA1c%`A&BB2$(1ZXea(iy&(@3pH(Fx4FEe?=QO( zY6+4TR77J-ksKy6OwT!L6FSBboC38BiYw}OLSI{-IeU9eN|TTm!`iG}bSZ`KF$eV? z3BzykwfL&EeG>SNhi&ooq7<*w_t95qcJGVFl|5LEm^X0{r-(cG0JA|tiP`7{UsokT z4=+H3^Qp>O5_r{DHiWHqf6ZdQxz!)Ky=ET;RvW75cQ$B@nlXR+fAsz)wLiD HQRDvtxNUjZ 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..e927eb600fce44139fa8e9aa6377a195e8d47bc8 GIT binary patch literal 12292 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 F{tpg8&ME)^ 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..432725491305419b4b045c204c8a68e9a3417284 GIT binary patch literal 8680 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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..22cf968d5f3f1032841b8db5570e10580433260d GIT binary patch literal 15923 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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..e2f26653db4d82cb3bee4be7c8e4b90fd1a51040 GIT binary patch literal 10113 zcmc&)TZklA8J^jlThDc8vRRbbT`QPPdN$kLi7Y5`KZq&@?&qvIRZQm=V^I1N}=U+_t5e4Re=SFX~1Z8iy&ZfhA^cu>+!Q{LHC*=2SNG^;GdO z7Z{*APWig1=>?now3y4d+YvLa?Xh$xX&YkEh~v<1Co!Z#QaEi}5pg_kx<(YC5zn)p z(Nj+gRuYsiZBQPv4vk5~d~9^7E9Gl^lP~l0{4~EHj28EMtQ97n$HLaWAMUo4DDoc= z7_}5(ExpSy%7~ej^$yD`XIk;x3?uM)ar;!#=2K$U_AGW#5xdd|{{Z;n4?(OS#NQ?S zJ&M0A;t^sBZOK_3(y_fRv?i{SUi$Z`Z)tVg(|W#@xJ(l76BO5}Fldun6kB^{OqUnle#fJgAzTSLpV~psy%q%qS>ytyL@eB6DT(eG>~b@Mm~#}wGQefF*OImu99|>jLH%A= z^E;z-I#PKTx2L6^YEp26Qrj3-L@u*YU8TfsPm_XAHA!&tIfW%`Kx;BiaqU!ULpi&@3!LL}Py1;D3b4@9Y5>E9&=~Ty^6WLoSgD;Jj zftdDEqY4dT_GK`802kJWuj-&&Dtj0hLTmfV(F5I!rCDSQzEbqf%D!A}*;`5Fx5rb- z?~bJLo&?OgR04^`#|dD>epnUZ^!0p0Je8aMc>HE!+8-9l55XyIR}*u#Cw+WH&okr& z@@>>hxzjrnc7ly|jKq!gJ;O~{|E}VJC$|os$x1*|&>jXUORmG|QKg=6_6B z{I`9JA0cb(d2Crv9w^@5gSu^<5Tq9-k5@PjsoDT6X6`rlGaydIScqGidp6rQ5oo1i zEq~Mv&*XieKk9U@A+(5%u*>39oY&Ra8|7g`)tMte!BE>ud0Wik364D#PnB z&;uf-Q4*@GK1i|iQ7lmSkEicfmN{Qf-Jeb>1n=CJIHsGGr3QJgnA-eE|OWpB4 zMmN0X;xirX&`-2|!;7`p*OG|!4Y;D&v1UhF$Y3%sI15IY4U0M2^Oco>09^k+0*X`2 z>7ED=N{LQ~CSBZ~=@Tx3m&K0FTuYrdrJYvp*RsE2!ev)Bbujc?{8S$OM!79in@T=j zI}smWrqP?u%k-n%?-b0vV4&?=heK4Nd#Mel&*Je6*666!?U?n3ruSp-DH(ceb@|iK zBm&iew52r~+AUveGY!{84;ZpNpvdThTIOPLxpc8vXt+9VM84Op?3%~vGA}V4wL3pJ zk-)yE1okF=q+dLx)hnKWn*01VE~o(v04IWe0M}h1D+?Z`#F?CO)(f~1*->SX*cg^e zuKrP7B@BK&K*?lp|4YTyJCdvMLy=*k;DipmRGdN-E0*XyItX0bv=Lc}dA!nnJ#{W& zDLFg~fSlh@0}YP?X4)OwOz(&qF0omhA)^J{kq@t_$YO_FR(U2;IIH=BJIQC8FjU$9ejD1Hj_ANQo`7VC)qf)`5-$t&=3!PT?f~I_umhl;G zn_Oi_a_35pI_6B1m{FGDe7~}`n0zyI{zX((qK@%EARaPH_^0FnPQ2d|sJXh9^LB-h zjLBbBn#4lRU5@Xvp;XAqss2?bQ<$N85tAm}va6_e-UUr3K=m5dc7BgJcbq@qe~Dt} zk9ex$w-8Yueg`E45f0&Z#2D>J#h2n5oPI3)z6a_jiR#?xZ`j^YIgbB7^PI5)?zQrREdCc80jhA*)_W`G0m`wPV5cc}dy$ zq4xvV7qIq`a4kgB2iHN#jDqWkF&B?eb}6jE$;Sfg^&^Be1lGx`rocYJp>G_+1iq$* zQsgu#Z9xQlK@HuPL!B?;r{CMxomVSuV*WWs0Z$R<74N02-aHYovLNpbnp6aN&etn@ zjyiQ7&gwc8hTXvZ8;5>`5G+Vyb--wphE~Q(>AK;#Yw7akY>CU4a|^+}R2GXWXY?;l z#LLfV^rrLEfk{B)MS1v-r?iyb;N;1ekfHvj^AqfNlv~U&L4y7-V`52RLX*K&7RmOt zmE8S#Ks4h$31KtC#-C`?@v*U7y$?#=jyT_;lm2lfjqe?s#{2Mg1G^vT_x>)`Hd$O5 z82)yQp&1xRvL^z=WHctQ+RAN{Ul_{pjYv5>CMT(^TApPaq^Yh#AEfitwSO=ln1%gn z)I6?eD$alSG~y*$)TzFEenXWqaV7Bl{BbpJZcy3s5ch@UtTTUK$A~P~7ZronJU?&C z$I(i(U&P`VcPo|CeM%nORJk1zN?zM+WLeh+`K|_~A{&`QYN()DW=E+6lg~J+fQw>6 zR*Z!;@kQh=PpkNWUr}Y<@pvlA+5Cz)3o^XOm6=IB2>mW=HFOV9;R{*^LFH34eO0nFEc!!t_$KtWse!&{h5j$>bfesalvy;YRvClCpYU;>V8JgskSj zBbGxZt2!>*V-VjdvB(WnfU?(FvCa-`NDay0Br02HE!IxD*lu;-2tB&CV_jzS&{89$ zFk%Wf*Hw8C>PW=;bh$^4JBd4uk2GXf{d|9?&ce_Sb#8c;%R)$;NJYY3tSL!XR+*Kn zq~gLr&%hE+o2+hCty|KN&pzMZF)&%2As&FWh(koKtWB@DhSyDuE`!9W=y3`kjfe** ze-~Q1#VCb=ZRkUT9We)E?4Wo6iP#pfio(SK6#`a`B=+^PNt{AK1I5&&7w829Az0af zR1OP0!=(k+WQznhslRLrB9>Ubjv6{fok5zxkCAxe~zB82`cqeC4g>dH47?V!q+v$DP0SbV3&`!o7-j}Da(Hx;p5Od#a`eC<~iU(<=Bmg6I zB+sCpSbjRdg2tuCuR@-yVaFU;o?6P~AIX;|7e|oYWnt51aYya}2hiei&&6i7*l5Fw zteB_U3*rJ54D`Z0DXk;R47&Py;jTCn9U=xi(7D~^F8+Yu8J99`Vp$eW^{jGw2X(Zv zkgB`BX=I|kU~=RzO(B2nh|#-AfYX4!QBqY7)MsqNF`A z&h8O-UEfgFNS_Doroc?E%`BMkAxPj1b-26YK@+2Pb%rFCtK+*7aUiqp*7qtA@Qf^sLYUqBHDnhoQKb(P$bz*z@TfL09u3fQ3FOzvB3^tDn_S2km{ zPVqt&Kl)|~!{@0{Jv$$UjXPKIUnFYOEYCX(k{x#={t!M2lKnXFp5!+Zu~OBZTy6zf zId!C93)MnKnvYX-S6c{KvK89ywSBh$gls%J&{&MF^{rUTca@Vi`qqcP4P$cf4-T%C z_28I;3o-qK90c->--8@pPoIN1p!f&Ff>@82R_RnPzc literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.doctree b/.doctrees/_generated/gustaf.helpers.doctree new file mode 100644 index 0000000000000000000000000000000000000000..82fafcd89097ef3569428422cad75756ea0d8740 GIT binary patch literal 9405 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 UwGB(lIfpI=Sq>#nO&YcT0e>sXW&i*H 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..36000e22b2f719d84efa74a42926406cc47b7673 GIT binary patch literal 5086 zcmc&&TW=&s74~h$9$&_5JG+3g4h|^E*zC+8B@bv7fl#76V6YI1cw%YQbk|I^r@O1S zyV@Q3O43T0An7cJ2io6k&7baYFFD&mbLeL5*}#l{1{qm*ZKisBhe~3>|_qHa_Mvy4;u9`iXItv{QzAD$+XqccC|; zFyZE+7%{!gl*+3lF^{xsubk}342ViQ_2 zVqd&2cEw|{E{=6D6f)++tVj}`4X-?Pr>ou2ew z!E+}uS3(A-U&>jceW461#J5Dhf!6acLaW5CB+{@ZQhM{0fP^W@~Gv5aPN#|ll;la+1d1(zD_Np>6l%6484My z(!0$=TmU>;nk=aeq<-jlbs^~5Y{9QRy@N~kQ;?rD=si+sS!~CA!S9_}96ilbM&Z7N zEjiDwxFLW109rmO+53O-$N8#tNXO!}3|6a=CLZZ>G>3=X2hSG4`%A8`J?{uq?`!U9**&%7fz^O(dJ>6}DVa5e zSI;VT;A?L4FJEr6UX_M5{Z7WcfN?h#V#^R>wzmxP264C2<_2?xf4om&a#!K+okG6A z*5<7$*smd&<7P8glMowQRUDNN{i0r3JFC&4&-v~C`tsX}-+e9^e}T$B)Cad+;8w<0 z!?}XL-J{^ocNCEEQ1Hse-!G`Y78j8UJ*r<`%_s~(#anXjbEqq$w_>h7D(gQ=>fkEm z*FKs6qxY*%k0riXVA>ZIjSh;Q0z$ADZE-f}7e4kOpLsbXKjozjNAV-&IUd&=TY&#>2{>n=#2duEE)aadt z708|AB8qJEh`;M?Pf4HLq7Xa(SduJr)o%>C5)yNX=%{g;t4O_5Yt@J1*f|i^eV-U- zBi0oWUnZ*Ayj9&78mA7CVv?~`G&9H12h?1hD8Wxs*Kg&6ir}BSHfQ^P?qPeQks$8< z8(01=WlLQ7U+&6_6{;EYwBetXZI!LdanjRk>5b8C*I_LCERZn^6La}+b!A0w!msKk z<>vAc4Q+yNjuY8;z0s}SOl0-ht)~0b2i=%ky<09;;{!;Pc;~gyej=;6N{&t z+kkrAxl%lF?c&RQQ+LYZiGEFGEXgBA?Y@_0a)MsLb;>Oz6^qRIir%hdcz|I+`c`$< zFEZ-Gy}Ik(t!7;Jt+z_7@E|#$KHa`B#+fBI(nb5HEGp2MRwY)qWuekSnG3Ohp*v-- zjKqaOfTkHwj5x($$0?*7ImK|h92QxG(H?~!_3g9@#VzMQeK?jh7FDMlYJtt=gJ`7s4w*PT1R zL$&+y;=#sLP>8vrPrt$?FB`gdNljbl|?7vE(NA&!^Iy z7lHK9LqqBTpQSSAUUR2qiLbn?Fb}DV!&zPs=4=#^A>}PMtI$B0?ZTKGiNnSj#P>=u zZychw(j)W{eL)F2bsLN5@^M-Km+#=|4p+G$D0*PKgNP>+5HSklP?;Y+ct>|ro_YX< zBPx9h*e=bC817ENp}#7WO7o|~A*S;|dV^P8GLYG1X!Jvpv=@M+r+5taDEoBaY5%Qn zzXv?K+1Ot?o@VC9zg-=VU}Z$vDbEHWS7WOK31BEx96?z}u@RyuP{N#V>0@v*_UiDg z4e;FSp-g4;#@e3-V zu7wB=<+=9E66XMy0<{$KD^hqszgN64`fy>Enh`sV)5i6Hnlt)21mc@C>Ao*d5#yI{ z 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 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..95445c361d11d786fc4ea842f670f4284a6ac35c GIT binary patch literal 13988 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 a!?S7w1)u5Bw{0y~8Zw0vis_WuLKUa!9Z 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..6de04631dde1f5bae1876dd070b061de860ee5c4 GIT binary patch literal 10064 zcmc&)>x(Q$72o&n?DOtTvKsE)I8kC|uXktF_#uQK2{9ky>Jk!BL6f$pyJo6qd%D~1 z>V1Hb2u8D5h;TdT2N6L8AE?Cq38DcN{{cTp#7DmS!3PBWovMCK&tqryesE!TyH1@x zb?VgboH})?UtWCe>4#_3kKBp^?s#WS)3!a|W>F$nY~PA|%oE9-WbZ4oB@Z$9oG(-m%Nb3O=1_08#UASmm_8g$M^Er`66H9%P%AiUXzQ$5iTor$wnuR zgxPL#<_0VzDT1|p|G0Vh$j6>_eIZzQ)Qq@)nve{LSojn>Bi*KW^OZ!;V<|A9wMh83 ztQq+<`Mg|8XLlqQT*qU{QQR`+swqV1v|<6PkQL?~JE9pcTdo;JAmVw^Gkf}J#g2ob z(K4;$khO^?mdnEIP*=jY_zk|!Z}NG*E3E_W_t-%gdmal9PW|xsK${}_2L+=8t=NIl zVc;?av(w(o?bQq;%=Cf7xwyq=GW%hJ7D?AHwg$_}!yf!cd{3 z=GK6H9Iu0QlaJ6!H1_I~tXjRt1o!Q|X;z9a9f`z@`3LxZVX7nk02Tz3SO7q+fjKnL zvq?QhYKQyKaixb;kqNOknqf-L6|$uh2xt8Fk+> z!w&tsb$m)sdkTv*?z$S6oQKvoa~QrT*UO`7=(HmFe@Z_&?fwI{PSdh7YhUM z7vL3IpX*8=LwM7-Qm2MQNx0S1tFZswbOyP%RADq3VC$S^(R4DuJ(aOqM zf6!n42{-r$+@Qex0__)>Y~9GkcUNX-W=4-N0{W28uHcU=+2)m6VAyu6YP$i$ZO?fLv5yV30>H%k+EGNb)=M``*B*6JZsRoNy&zfo0KvlD~3xYa+Nk> zztu(RpY-P>OL`WGeAkF{0nYvpLI0B3L^9l+Q0Uf<`Aa1740E zk3MPJb-`IZ&nWA{R|KSOHVavZ1XHy;NG`p)>suxrk(!xDTwOrnL-BYYD&_XHx)E{j z%KuL;h!_#1+QRNNx!QJ^YinmKa_H1qaA;KBC4(2|$@I-?dbIj%meS?1w@fOG_N}Rm z_D$lx(fx+9ox%^rxm^F2Z=VlniSD%)kj%vJ`O&GkrZPZBu-?GyU4g;!P<>+{RjfCj z^v?I{`}_4YuH!7^LQ-hD1~PTu>y$(eOAb|zHa>0azA=@RUe{Lo8UDdK$o1-t(xyV> z@}5VBr~qDqGlg-6pjA>g1;C8Fmd%Lu0&Yf5RAQ3zFhJ%<>bY3m-&e*OoyU?({8sDz zrqX*fE2<$BT6?DBC2}q}N8AE|odvFAIoK@ZGMeH%U`dxjlwwa~diM`RAoeI=meY2u zGr29j}w+~-t~tUI=jhmGzpOK%qkiOQ*=yD-;}q|r-8 z`lYCx!AnC>N#rsryT2)^kWS!tB@&83R7axo&5nL9PA)a@v}MzfYt*L@3` zOo6%^klp<&-g&kAH~dv7>;9dd-o~F2ta9V@!K!K-%y?ag91|lhur^4(4%`*e7ZWNlainP&CBx|RrZ7I!0v)&DAJCHpQYIF1Sp|)zB zVW=I#^WF&{P#CQ$U?Ma>bBWQWNArhunV`r8CYS`_v=V8vIzkHJtXWL=yHjB#Meldi zbO+E&<;0X4!czW6JhtY zON=%>cAud7P$>k{QA&~06I6gZpl1Cuj_cM4Zh`Y-mItSApujJr!C~ z6#qp{d;rBno(jcdWAHl_X`{he!tsBUW}{i}2FL$}?1^xko2L)QRqG7H@erO5O^<;h zMpfla1najhvEcx$$4mVI@)evDzdu3R@;%K;N6K+^JyPI8vwm#?sbAHs*&&SFvNtZ*i@<>&uhR!{g^wnOq)RUfyG|w{1LHZbUG>>#u-OrTUp1-f}BynQ${OoZv zBk$Aw<2jB~>uG1!-UdfnqKR^*Ezi$r86Qca@ggP!4wt%$_fh4nbO}3PlI%WtKdrOv zXZK$F$B)<)g>b0$_EmLFmA>d2BztG@Hn#MRzP&cHn^i0&Uq#tzUdIi7Ti?-+ap3HB zn%|c9iqP~TS5=RUAoM%9SOl?1j`-G*tflwUsCJ@Z>+H9a5|R*%tKO`CD(qP0PlI=U;TUJSgb7f)Vq`@SIimpTt;oj8jK&BfGK3i0KRI756f;@fru|rQ71Xt`-$;H}`G#g94hL2_PCLoFnSzIZ&%1CXO;aE@;&yrv&^4ib4EaViDCX`pO~j;LrN40g+pptlM z+FgsIdTSxvYJY>3l?n0oaU5Vrpihp}cSLC%xBz;5%kkR4Ko%ITQ>cjIR)x>$5qMqS z)ZR#6`yAu`g!Nj?h6|rV1OH$pEZ@_HYY%GrtxY3;m0S32|w z64;lCsGqwge7yT2{zS4yWVPpkNp)OA{6T!-qx!MwJNu7g+k}}8 S`TeR*!7hypw1da3=KlbRszd+) literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.notebook.doctree b/.doctrees/_generated/gustaf.helpers.notebook.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8c2c2d661d91bd4ab20b3dbc5f0b91dc9c0b36ed GIT binary patch literal 9160 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 ODS1fmS+d=zS^pmwVn+A? 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..bfe7f866f68d2faf89f665e92e05f7681d3c6378 GIT binary patch literal 8210 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 YVOA!2of1!$l(K`A8eG#0;>&9KBfuKl1poj5 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.Option.default.doctree b/.doctrees/_generated/gustaf.helpers.options.Option.default.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a55be6f7a536e2332b84bf35567c62d947853a4b GIT binary patch literal 3791 zcma)9UymEN5x4Iw>2!Z|J|{K`#OFFF+?pa5(du-^@^75B~Gt$*u6` zj!i9!YBgh7R;i2|@Afj4HYKmD|K30ShyTi-xv^$1jcRnty}JdCR1`APyzdQYC3FYe+vI+8P8cG zttSIGf9EfJMUMT_W8e4~!LVlV7iLb}IOzivyKdOVb>Z&FqT>FdSunTHtkuP$vA~1k z-z_pjv5r#7jDZl}2Nf&hx4o>X*NX*9FE!6er*R|8mbB%?v3N@yiicuXoVw5FLX~{3 zo2ue^{!;17c?6;R2M5hOIyO(199qostlj+?q-NS6%tz-t%|hIAgQCj#>IU9172?+j zOS}z8e}m5xeBQz5DTN4>bP)nO12{#sM7rDuZ5ke*y*68qd)%J>;tYx5h4riv?~3Uf zq6_f|iGcriK*{tK_s_61p`FAOz}Gfvc;X zICdU$7ae08_?@`}xG}9kFtY28=$gQku;v^1j#s68W@<*Iw1*>x>lfTp_yz9tVJ4L1&`|fljwxqx1Re(Agt& zA~bt+!K zbbDl^UsP%u8^*O8RjT_s>BLiN4p;u#9k!d@`UDznSf*Dxu2d)M^vDujX1KMWsK2Jr zeiz6??eR30*E;82o1eBspSDDA|4%z624+y5bq8K)lJQ_qdDb;Na$q0W?nVZS_hReZ ztniHr?k0wK&%J3itBhncv65P=CF(g&jDb~_Nq>IJ?RPpn!?L0KZo5g^Xqrb!KYb26 zNt{A%uZ0K$`J|t)xenCHz}&ww*`P~zP0S5dW9!EH3vqnm#_h~d+GCMncwoeqH5Lc) z!UVTmV!7Wg8!fRqA`;X5qFr1(h-q{8a;0pgEWfdNe%l?;NX9+C-lo;pcY zN$&>(lW#={mpn+4mxUEcH$`z{d!QYw7w%B=T4|d|{(=L(9k(x-?3V*~!dC@Qv*`Jz zQyREI#uv>J*G*nBU4dB8(43W!i~)bjDJcJ)n-mo=N_ds3jOgdajm@VYO+!O@xVf2d zt(8s$t1`(o5GPmBYus@}`i7N3u;Sh6*3Om*@jo|-M%NB>M;~r(Y@Kv>DF6`72;d{b z@HmpJS~hIS0e6OGw}a=HdqeY7=`6{3%`y0^lqUIw8=?+#G)=%!WFRWfikpg`Bs6_aG}I7kAsDfeqpZFrNZ1Vav5cloMTh9@^q28yIM zc~O|c27VqVSz*{hQXs9DqpmJcV}}UFpjm_>gVCc_Ey)WRo+<7DeZwUfrJ)cphG8v3 zz7OzjMV{gk{5+xJ0&S`#SSX9Ku>OyC-*Jn!*IZSWtrAfzg~SKsy(1Oz z{?L?|XUUfhirN6EH^MqD6RA?xLVKDD27i$FSZqK!K#0?qO^rc7umA9*Z=1k1*rU>- z%E5uIE8L?#VVcF3UQrTxrDCxZ>G^%>!I^TwGt}=DTo9aFTyj5!)@8ymzhr{v8+F;> z_DTCw17wwX>}l6-msc<78SnODFG2BwikM{uio+(B=_N;R!mK!fQ=pc`&lmJ>%o6I| z?%sx!W_l3ATHY^)R6_Vo0QC_G<9G3+_`$d_3Br)Ww)pYdh_~sn{R8IP$Kun*9o@`W zFmaR?$UFG}vr$5Y+37`JZ%U#bB0z@Ag_1o9g6f-F!d`p4VR78u8V=ptu#X0-Ep_z! z+qT*r%r&%)R5jETygNvhlt33TU~Y^)Y31Jofp7euQ37~Ap_l-rLDJ)eefQW9AN1mo Zw}YZeWs?z4mXxynj2c|q3*x(K_J3b_){OuF 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..5019088d2fcfbc6971c395cfaf9487ccca1a09ab GIT binary patch literal 3843 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 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..429e973315c97e9bae829c0758bf3a5835387200 GIT binary patch literal 9612 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 GZv79!?c{3! 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..f75f64442cc889262db7f24edbc06ca2360bb480 GIT binary patch literal 3795 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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..a3fc8709e1b7cb49b42895877a16c99e04b754b6 GIT binary patch literal 18684 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 E292T8u>b%7 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..a38172aeab58b9306cbfea5f633c04f5528c5f41 GIT binary patch literal 7916 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 LUZ4t|^?UyVF(zWj literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.ShowOption.items.doctree b/.doctrees/_generated/gustaf.helpers.options.ShowOption.items.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1f96bdb3bcd9e33393eb88c807e5a7a2fdc16700 GIT binary patch literal 5928 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 LxIh^^9riv2T|nKc literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.ShowOption.keys.doctree b/.doctrees/_generated/gustaf.helpers.options.ShowOption.keys.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c1a0653675e8297016622f60e1f4deab7f07faee GIT binary patch literal 5904 zcmc&&&2Jn@6?bgUr|ogi2%{ zy?XUgAb<4y!9kI(Jp7dF*OT9f!6KPL|ocR%p zlc9)cax(lD7iZtl-@{XOo@BHF7Fhp~%}KKx&-*wtXJ|$?G?p3PQ5~y1B41O@{A4F; z-SdN>w-{+hBK40Sp${ukMuu+_bA&W<6B0e1%7>YkoFc}%eM%I*Jlr5Q?_g;t9FivpJ z2gj@Fn6IdY7rJa-gWOnyzkze{Hv#Hr@p}uucknx+GXkdA(}q}B z$N*Nd*!RHmn*CODBQKbv4tKG7ba{1kCl7=OFTV z0n(1AOlIm0D-dq#v!w9vB}*ZgV6^9A!x{%Q&Z>zXSP>rh%7H)==~;DHLswSe^PWxK zkMIV=WU5Q%5#t%+ceY5=rcpmrdskBk`fG+`jY@wodXoCSHZuQ->RM7b7K|qm%zw5x z(6H!78A3A+G8DPOg^3#P^8-T(oa?K^HceII)Q$*cJ#*DlPltFjjqQlnjHq6F%%-3b zi<#RuZqp~&hlT&Yu)m`G?_Ny#I{8TV-yrt?ADkIT{W?dgqq-B1`L4C(Jhc?9`)e3g zUHMdPo|@lvzgc)>o~HLyT~s0Ux0@sN7wG)w+|nzsaH;oLxaXIYzJ^NK;A5HRWZZb=*$T}t?ny@bN3mNTD=RD2a!3bvj7x@TKYU1T`0!zA932cR-9Gawy3Jmv z(fhNzuQCbFxc0KWW6XCdP}q8T?aPRI2eX=%Xq zts7USh=ndL5!M{ZsOCVqUH4RNN~Pk5H&zi91|_+`_QFi9M(3H@fPl>--*Y^fU8okC z29%%cu|;C7?W?CG5p%qW=VU)t9o&BMw1srjM(c_c1-F|$CN=kGC-`%nsfiNDHy8&e z)o|aC5-)e=-@}=8_~r+f68IGX;#U~1^J0-Fmz6l2jd29kG}rXyOrKl9jA`LEpkbdW znxZdl^>!!*rn-QILQ#D73h{s{iF255Gw&?gI~bAY>ZBaB9g0F$jH8ukzl2E%`ehds zCcmO%5*1UI@F=RnL4Lm)Yg!y@#@MG2>EARn0J$V!No1NQEviUNfPQ zziTS37YE0(!sPF&yE3-J#J8!&wW3%|apgA^WK0>|i)Kpu-BLX#jj4XM z%4&79keI4fwR4bA!tYRht84NJG9GS3xL7v7ZTl&Tx*~6@rbuO!%It)1pQuh=W8#L3 zhKphoMR^dRv0*mEeIYzWvzs^5*hg!NZfjKUQZF`c7{jUEi4ZarlGQqoZ>cSM8VJ+C znomR=WRUczIEgGr1oYyNV99+WVLsCm>&%nfDynYmm`}*d@DsHevq;3!^4U`c_*PYy z+kV+>s2w)wm=uE=s^PM6I>mOqGdm6`vSD3j2at3Czr*NI2qHZ%1V$DMQ4SCR zRVS5`!IuX5zI=bN(_(QfVvF0M>$4b$ld8B%t8IgHZIy;zB~u4WJxfc>{!U)kGwW75 z6tnLyb}UU+x9JSvTEYR5uS?7=-wvm#J!L?g%9~ZZ;ix+?b42V~E~6-qZK(D?QB64G z1Z4pb@mz2f^~pTrP1UngDXdDQR;g~;a?>EPN(us4E%3m;IJA9Qa9c|>xyk&MC`wrB z3Jaw$M%_l#7YVcKGc`+)lAd~rCpAU4E!Ruzu}=rdwQLox0XN&kVG=|P?PpkYD<5V} zJQQK{c(X@e*aQW)_C*xySj~mWH}Kd6Q<)|xxK6bO4c_|v z7lCIlo;XX(lcZYy?P7U2t4)+WW%1Bsa-#P@02px@_}Hu??J>N_l{`Ccs{?Q{uuAtV z4`7)`hzoT)IS-{hx41XuK7Qcux=+_;wV4Dc-mD*_@aqIX-O+8+w0z;%IkX23M?K)c z@W$VOvW5_|Ptyq5fSwHXJ769MF2Ek)c;N&bC<4PSg^DB{FOBm8BCjuO*?jTa7i*L1zQ*iIcYJ@=v|i(v$Pb} z4#vVS3895|mxSf$&cceFVplzBcVT_R+gMV7zqh@nN{#XB4euqGgY*|3Zx3*wDZtZlgAg^r)P#F;7ieb=R6m&XOl;OThy EUrE5z>Hq)$ literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.ShowOption.pop.doctree b/.doctrees/_generated/gustaf.helpers.options.ShowOption.pop.doctree new file mode 100644 index 0000000000000000000000000000000000000000..dc6c9bedc109d0fbaf768c3899ca27e1fea675e8 GIT binary patch literal 6596 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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..27b7e18f815fd169008624845ea1e2bcfb1d5985 GIT binary patch literal 6308 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 UGb8f*)sTW+6&L6QF9!Yp0aX=TTL1t6 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..291af797ddbe9bdd0c12fc4c98708cb98656c4d9 GIT binary patch literal 6012 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 DE<)v^ literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.doctree b/.doctrees/_generated/gustaf.helpers.options.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a7aad1fed65929867c5cb2059e5eb8885850efcf GIT binary patch literal 11216 zcmc&)>u(%a6;I-~6Fat>gwob@l0fRvWbHl##V!3nLnv|MiUMs~Ii22}xx079vop)g zo!D+0C_=3oxCo?9DX)qmpb{0T#5cYHf+Dp@6%>ScNC*}91Na0*mCEnlJF_!h@9eJA zCRkeU&Yg2#=kdGeo^u`>ditg7cc?$HH)=A+U#}3`_5+(ni5Rs5D{fGqCr>3uKcAdW z=EPV?)}kN|Et-fOps<+Z*&+3lvv@fv>AB-Ym2`k%PQp6PyR#v2b){mM^*G|BR$j+^;Il~}7G zt!WzkaO^}J(6b#+XFHzGmc(L&le+AiuyHZyIX+F6c8cL9!G3tc2E>@zVgR0ovweSJ zo&^m$AI82p;vra)pIJMKa?Ypjo5l`YO8xtcDwIm~2+-5^; zSh8deFNe6pJz98`?W=t}#YA)%{1jc6oG+z&JW(QL2D_deWCQHbGP`y;t`ar{uCtl5 z3EPLy0er5+=c=P&nQ|+iUHx{KBu}Z&g z1huk7DVDL_+B!0MmG67ViLi;}Np=l8C09Dm4qf^cF73?tq10>)3Qp=FX|jUAM7qID zg}1Up>(xRZgt=lpP@-6;NGIJo!w#{#pi`~oig(lXCTzllB~uusMQyXXVJee7pNMyL zd<&C5pRiNxbcEgBp9w}ByhEdh!2?5X&IrOf@tudMkx4w;U>}tE4!x2cb}*f6djp%K zF&xI#(6Nf57&{sJ3J9WXNrjet>PP#Z`r&L!a9CRHUS+jYoK$0vgr*gEW&}nT7SYRq z2Nk`TS~>H`4d)-Z@qG5JK;nz}bfVhJ{G=iN zs}x=*V!H5TV$Yjl^aJDgYmilHo+F-Po2fd?y+8eNbbS0|5H=!1y>8PMiOX#RrkooS z!@M2_adQh(C7O?b<=f==D7vgUHfPDwxP*=$g2~TAjxS^?-b-YK0Ujt0AooxW?2Ro8 z#X1MVU~NmgI*ufOcj%HE+xCmAREn8Y@SYP0ZoY z+0&%H4Rkiw0S|>miaXz_nYH;rTAsskhI@rc*dOG<%ofDV)+HyojsCgZMse<`g^OLy zjRaoD#&Iw!q3s9mA0g)7cRQ8EFt!gPO2omQzD5H7O%gYV<0tH&VgyfoqX}PbKu#`p z;~AjpIhMndC)MjU68gynF$Q7kH=ljwptB%4zig?U zJGFDij^fI@`*d>U&*+uA6X@CJ;=8lsm)POYdyVu{jbY^@i9rdJ$m^d0p6R(tOvkr-QVc#Bb!$h*yGGo%p>&rzk3-$38Y>jkIaC9|)K zy@iQQ4g<_CNi8>U2W}XF#Y0;3+k3(E9>=%5*v8$((>I)(dzy6z*i1;#$6j{NK(0@q zakN3!ZQ8^sa_TMoiNU%TRAH_o7EzZl{2a#>FL%$ucy~#vli}XkLpR(LAaFk_snF@9 z>eSA*M>2&MBdJ4{`8ciTT#f5;h`z5T?M}{BkkXg3>3VRTJnh-WCa zDla$iY=aVuwS1QG@lR5Ig4Rgv@ws$F^?>eavk_5_v(CVA0LQz69xPZ(SEKF(6to|q zjGUv95jhP9{-d1Cb}W9(z@^<-b3D%od~d@bmIX~Sh#XU1p;Cv+;EeF=B7-#LK_k5< zIRIx=`Q?-v>IkW5y?8ETO)9`2Y<`}*DEBAxpWG*;uD(4NDjVZx?F)OUy`dcIt(L>0 zIbG@=>DSsN%5-BzDF^-+v;$A6daP*uXt_)*9u|7QPTZ!EL_irEr3CEc9FhfCy| zbif7anz+v^4!}FPej89wkb>-A1kmz>R&EY{fcuKb7<^id-2F(F4#Yir1?6BsFXM${L0qQUa;W-h8?iWhB z(;;k=UVF;v+9Nma7djjb?jjmHMQYs7b)YVS_NG_^E5v6~-XKKdehgz|w-tSTbnn{I zR2tKB?**;QYR~nKzoa(=ajZ9K;r#E5JjVv=-mh1*?EVHqenxMQ?fwLFM8+L7u&Z?o^{8qw*Bs7F6_CNQF<06lt;7HWLfQ;MZhG__1><&!aYnq> zkjzE36GMkj-lR+~$Q%yFrKEwDF)-euayv*sOgcWeV^q-f?>H-izi~Q=5b+^AvFpL3fkVZ4dG4?;Gmz> zJ%Ke5oF$lx*2grNUb2WO+;m(BbY{( zMJ$V9EAVUBCOCqmB%;wZXFXxVVp2w(&AdtMk~J<9cHC&1E#(7aRf7Y)3w?qJ`m)%o zT9jH#@#js=h{kqcBKQreDWrdbh?>QoN=uN1Kj%aaSIW89w4F#s?y!+`l_Qx^z`*uk zGZD-{Sr`VLNXg7rO#6WRg-H-%S5`=UIT{Khkb)v>5S4y}icU+*g61Hu&!GPeB&JSJ zT_+}+w3(L$$ju-f*o3}g?b0m7m5lRdv^YPH<_OgsoCSUbIsf@Y?3a{k0iZNFZ9qI+ z#r$dW`1=-a20tgmn$7IX-L0I4Y?quq79#ub(1-D=HUbV9h6CpMC^%>?B?cYV%T*AMqQzv^`q$p z7D>|uvlc^rhXuiFdjpph3(5UXyq^hY_h`&)qHO3~=eQk{`>ak5^W7(`~q?t|Q z1As#=5r2RCSm_&_c)%1Zh$Uhm5sb8(2iAkhILb!uNZX&1yto#qxU@5RJh=yUf?6V2 z9BT0*Xoj2^MFW%3Mg*(MT3e@GD=(I3IX`qFR!IO(4F_f@^Uj8rwjueyXdLPsMmdzG z2NuMKdyVk=W8dyP#_NwgTPa+1Hn6SYRi~F1Zn)>rqgzNxX$cWS>Djnb4C-9_;K!Fw z-YpL(T}KJPOp6Z(rH{ttI`VX5T4YDWObfa*#!7b2xiRQBd%1blQ<^kc5VzflEKw-U zHDhne*!HT(LxvL>a2*V2WLk2SF$qrpGngytQ6YE+bV(1+Y~hLf74+!9k)0Vw;Li88 z(L1(ov}@I1_x=93&;7pmHurm9rU8ZhQn9-wafOGw)5I|Fw+_jRaa%eL=@~0EH?CIx E2M=6Cb^rhX literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.helpers.options.make_valid_options.doctree b/.doctrees/_generated/gustaf.helpers.options.make_valid_options.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6a384a3539b7d1545359f190b98f6909deb1b177 GIT binary patch literal 6829 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 U%!vMuvf>li6}Uh*csA($8^LlRXaE2J 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..2b020f6dadc63bde8b7d48fde181d14f0d601a9c GIT binary patch literal 9569 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 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..a5dfe753a99da00b8eed773fb35bc6689978cf97 GIT binary patch literal 14532 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.default.load.doctree b/.doctrees/_generated/gustaf.io.default.load.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b22c528b927e79ff5adb31f615568f9d1a603262 GIT binary patch literal 7328 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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..c8c3dbbd4968215ff23c372d512b7449da63f3f1 GIT binary patch literal 11635 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 M%XNWH@O0S!H#yUhRsaA1 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.ioutils.check_and_makedirs.doctree b/.doctrees/_generated/gustaf.io.ioutils.check_and_makedirs.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a09c710dfad47164abaab0643001b9db5d0c3c4a GIT binary patch literal 6084 zcmcgw-)kgE9Z#}5NoJBvHrd_ixtnzs@5e-UW<-3D8xcHiHeKKP zR@Jw@-_Q3~y;u9mFF&zl{?prO%tbWry1pMtpQX88_obJGEK>RN{NRWAyLnsJ6Zcsv zv&3V$UIK^5Mc^ka%Ae-CN$g4lX}4IvmNHKX8BLb+8eipWPxCgf>zWcOV3jHT`Y=nC zJLn3D|LsN|XWsD>$Bq0aPUs#pUnFTxJ79zB-(+Kw?80?Rv~Fp-?)}`}VKsIkvC8?5 zt~-+}@@smvxY?1u9*BtLM_J$14Ogi|^fLvGkOr;^Kc(BQd4ZdzAmY0gxuN}9_p^99 z=)2x=!Un{X={4mJX)5R2{0`sbclkBGubm#3A?qbs6tSfDOeV)YtA_Fq1WbEYu%0ty z;Bpo7i`fNT(Um7R?j|X2dGBx~>+>aD6Oqrx6@^<{@K57b{619r8T?+u?+yG8=!Q^I zBFw$o(2aL;x;*7JyN-w@z3$jR6|Gn z9_#@5uLG0bg7|IBG-<|31=OpuWCl~OEFRMykQELLjA-?ySxu-Xf=|wqi*j;1LxQ*9;b{oF$GX%oj5n zs}bOwc`Z~o+|$KqdeU7Wmdd zrct9(!@3zPt-4{fA5B7xS8K!pmI4=&UotknA3d(T@JF;t@ATm@+T z?+*XxWfvx{40se)tlDwbUl z9L15NHkN!aI-v7jj6RD$6(Eehh4IS_^&#}|&K3AzP@}Ia+Vpb6{~m@nF_rHxV%MYYpk#z-jbj+#4+|ipc6Xk{#O@!80RSel|;T zhkBq>xb0>!S&nzWQRL!u!n7U9l2-E3PIO+%ltK`*b=H>+a;XVi&`8-Tbp!;nU2w+~ z3LSKIoiZt-QY*@5G55 zq9?IkaZO3(2KnKVZj?OC$1tPwmUYw166(2~Nr$~zQf#NK*9!&V* zJQIpL4BU z&)g)U+=zXd8-h}Y`aMRMLjGuq2s(0Dgrc3mr|X#-biULv#qQnNNrxqgOdJlF1uTKa zNmSIqdfRHcvP;eElI#7snYk@Szax)p+I^=ol&kN~PRuRVH|P$)TFRlK!1Tadfg24o zcgUb|YC=}AfV978V_M|u^GI6zGgjR+rDMJq9;3ccxON;*@LUO|h2 zHarVsX97Ve)(`~Hmqczr8*Uql0XLa{N{UmK`O-nJ4z3%>^fF~mb)`Xxr<@a!3KZV7 zm*b1n?FV#`Ldvz$HQ;8OxJ-&@Vf+m2TLqgl5P^A)(R=iTL+~PCd=ak+*v*H@H}F6Q zQ`sRPx?`HXfJH+9F%ThYkgwl(LpNgvp)+yM$pswyN^+)eq^FT`#|{@m9^eQ3UJs~* z)thOEPR#jU2ER_BsGDYNhfW|pw@~fA$5EntFue6QXxXR`tB4|6n43vRkmqJCF_2>9RNZ<{mYrT5rg^E{flz>!LVQIC_vvl& z-CXa^P^o7zWb9@-1T&x>oSr_xzD6AOd-QYo_~>W&C)IT#n_LGbGjW#k`*>Y6^GJ4Y z^2eFps#?!%w}rykrW71uDdeOjpOw2xA!HdUtR41cFad-i-kKv$xa%`J*2`1PqTQMO z5pNSk0si*H%~`rZEk02UOv 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..8c528a461502fb057cc1c7179e05041c3c5a7c05 GIT binary patch literal 7734 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 yuzBCsY93<(mSK3L(VSu3lzcAe)m81;xxbj 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..c68667e79570e9d22860e4a857346944d4932a6b GIT binary patch literal 5908 zcmcgwO>Z1Y8Md8_?HSwSIN5kXi9<)Q>=<@tIB-DG3L!;7AQKBkXe9)psp+nns&RkO zUG20ji(ww*;@fX4gAuap>B!mPj0T-@-v{^{K;5i*+enD0li&$B{r`mvXXJW|E;;_%1CyG2JgQ}!&2^VH*o zUIB$CWZuLyB@3V7kSW zO64F|kdBz_lV?PhLvuJ?B z3$!iPk5$2P@p;jmi+e2YL8;*GI-uj7W3GdhHm$gsgsxPcE|`AH@G>MN9vYJq{kEYe zIFfEF2#SW@UF5T8L9%~-zQhH%JhDcyT(SjKb@Uc^>Lx%A-J^HtS_1(y<_oH9PQu_p zmN3HqCbnceJ>>=I;_JBOQEB=ouQGiJ1R3`Y(v#@}0t1W`jhuM6WQWob?j5Zf1viaa zmUVJ{?k)QOIl0bU`tM&R{U%9oMc<^O&r2=7Bfd)_es3vA-g^+y-Ws#l|e)y+vl{SZP;5DpeFQ75XT zKLug>Dnk9qFb|Y;DayDrF)@Tv&gi=2ybkrPGV&tC^-d*!<{|tRdbj#?S>%a0t?BAj z4&Ov*QY;;DRp{4U>)crtc1qA8wt-3_!VdI0z5u{N-@7~x8KD1sE`fC?K3Cn_jDinB zDGXQW79lGhjFAP3MK@ZvJRxT+x-ytDo>z!Lkca-2Vb#O~WneSApX|MG#Pbnz{Q^#Xb6e}l5W6)>L zAkHJ7rPEpb`oG*Y_mtmV>?w8p6KX$1KKowoo(- zm&&cn;iC1;Dl!2%R7~va`qW$A6dVIo*2vlO;Dcw%FvdPalD6v4Q-ZiPY$J5e4v|1 z#bs;~FOcD<4{SU-CWbZ*L!}B=4=>apvXb-n_ntc!5!3?aQmJNr?T+}@Wdak?KL~;O z;PR9H1foB}-hZy}S2@dHs|mgJgrgRV9IGGe9t(4G<9&^!H>K^%s;K3N0T&rRq8&CE zlb8Iny0yg7+%2wCd^MOEH?e1l4)u&#pR@Ax%BM@thBq-)9GpwhFG1X|L2fc-l{uH0=vdVu zBS*HOTgv98_gSh9WPAgs@lPQ)nn=`?^>Gw;Z36?(jN=ua~G8Qb6L%~E`{@q5$>o4$OA+=BYYFZB95EXdIjRykI$$GJ*!RUC`m zW8EyfQ52mR_-ISfn1=}lTlPY#Z%;66mBTy@FxsJlj5=dl#l;P45`A+R#|o7XuPq*} z>K%F>i1N^#P(@W>rcEtS;(BpNuMQcGyklp0z|D;NOe*14{W)$dHv1gzMVRSQ=60!?~P=m}x@&9w(uY9ojO2 zj$9t0LMLeHX0C?aFLh0|dv|fsm^ zLk|bXdL3>yL{SfoNFP{5>oB1zz0GnJyYnf%hL!?7bRH(|41!RsnUFwV8nJ*5+%+=> z++_awRFd)Bk6kp{pt^xP9%tOG?=&d!lzS>OsSHGSU0-Hw5Rf1xmm8I9z|FQHOomus z{0xWglw|Hu2If^n@6#79K|61J5l;a)&48 z?Sv;Tl^rPcQQYGa6j2HA4&KQ*^e2Q;N%o-M$8^?9rb@(7FHT4OLf+UoRtw|Pk7psTn)_~2mpPd!T^^w6&t{dd?kvb zO??1NhVINgX9BqPiQ`P)$fl8E6IaNQ2=D`b@whgahuwg{NRaa5TYZ`nCtE6PKe(3|u@ZQJ^(!@0D+q0BbO`VeL#`evf|%A0Ph$|7E&K(J#u7N)mm)5eBdGV+4lC(MlK RdAH?Luq)#NW$=8^`!9Wr$@c&N 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..75be7fc41f6884e9e4f3a504bb3ec505338b3808 GIT binary patch literal 9175 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 HtXKaFp!H0l 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..48d0cec13db058c7b0986c57311e455a4bf56f48 GIT binary patch literal 9725 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 NosJ81f~TGR{{ks8yWju- 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..08c1d17ec370b63c987d916627920f272b1abca0 GIT binary patch literal 13444 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 U+VpdpIh}%C92aN?4;%IW0xE&FH~;_u 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..9efc87c1480e029818b68d242eb294cba0d058bd GIT binary patch literal 7359 zcmcIp&2Jn@6}KIa$1}EP?0lGAIS#W5$&N#2j06W1R%l6-pp}I|yQ}3uLc6ECW~$pg z-JR}g$Cg;M92Tvmx}`bsA0TlHrxgfRdjkFj4xEscFVc_Gu53i+vp7g1 zi=}b~5*BwnJ7RwNB$X`^7mgSAv+?zqS;7hYVmPny1zvxWc6meAgd;pwc_iN)C9yDv zeJALTokP1nHuu?MV;uRTlm=nU{Dj28Vg)tWAZCiD_1Uy}`^Foa){3z`1A za^7=%mhL74Q#MT@B4>~Y*iCj`a_pFFs#~5J$LPfGns1KvuSGiv%f`U8_9HeVnMBrw zIig1?Z}Sbl%&+rHd{cg~&4V%9juPKz(e|?-+TYg3=3h`S-qwn38zTlOQ!qPwI)R9? zvLD5;?8eSqGT<|^=J+-{tU#$z=3j*+{4F4N6Q5i7yp7KmSp{GsN7>Q^9*#ePC**Ac zTutBI>U15yGY;&;W1UI2Y^Cyz$sXmX%ufruA~h5Kb>1tj-{m)eG4z}VtE>}hcJZV| zPmI_BbRvl+SkW%E0{VPQae>Axt1-k@f;(p@ugUh5dYV1!C;Kz1K+_%VC#|VD0bExu zL9bp2GSND6g_c#UP;E8=Y~yh3-HSt$!ebFbVip~+l<;^Dt31ru@Z@lV-u1vQsb)&TN=cn5# zXZ_TydX^0O84Nl^vY4PpRVcUo0D{qZg7VFA;t9u~9Ap$Wq6t8bX}Rzue)39|qmc&t z2M&8?AyKEYo&PjU-{L`30qVR=&_Lo6W;9|Vm0vM*z{hz~%J_%O2Pwx+`9Ln<7r2

vh)7l(=G zDgQ&wrXd20P!(~?U+}>%Q)~j%rJ1`_1VVR9DfxhJYK}tLcZn7%igbpt0$)`3!0IN} zAjgd&GvpP_D!%%A)z6aVi)U}QDh!<24>9cPT+U;i0l3P5B8cLBw-jp z*UsJ}q>gw`jokYv@UZ*Fd;Kist;^dNn>Z~w{zaAJ*g@NB*EQfphJ=PRRf)Yup-`S4 z>Y0X>3IAH1@bpk10{2S!x73bwk}W@lzD46J*Fq&M7E`qJS$Q#D`^ z*heR{n@-38GHsiPZ!0_f_9d%>G-Lf3y)H{ zL`mu}^ngBgL|I2u9ECVo|4zwfyO#SNCRVa>$Sh~*Sm|f7ffG}^6`Yp|PVd`ah@i#Q6$cygRDr;tGpv;AvgCOy3lkS9+{yyYPomhJ6#FC#s8n`N+ z$a1YacgnGM?&QJKEITWn{qmLU_=2Q2+&@eW0;R4h%1mon;x#?wOn+f}-Ecq0A{V3p z;rc(Oz>=mwN9Q-aLr(OSru}mYjngwKu{NW^KWNYesZb{#;GC*F>7GnnfWHta)tZ^R zC_`U2<&>+Qop=6oz9*H(|9!q(9`pp?D|!4(zPSzZMt0)jnfxBroYy%J1p|+UXHglnVJ>c~wNFAA2|k2EGwS!3f12T`H`J zK$u>-Gb5Y1471TpXuVn4vXY1jkw#H=T+VxR`B5%rK%nBfMukdMLLK5biEF2w%7u?i zFF~y?KU&I#AQ53A(p}!(m5r=eh+97zHmZiGp^if|mh^&DVAw~qnKhHhLu-XD!&JDW zr&zeAog*&~gFyI!V3mhEvvP$hxqdP>4u?TBPSMk%a#Uzo!B`)Ncjboe$&bj!Ge>YE zFP~z?Y(Q2|-IdD`qf4*hu>%J9=46wbUeT<{HFoF#HGzs?oD0=t&1QpS1PfZv%*dxB zF6L$C7(ETZZ!t0oN5Gcj10w@>+<*?kxc?_&*!y-*RT{2OJ~UVq1(CsVU-wu9#7R{Y zA!J)4U74k(W=ZAd)RU6?mz+aQ2ldQk z92x}$0j%n9z`n>gJ({qsdK9_I{bg4ev&0Sz6g?reio<#kGow0EvBVO_ffGAIQM7H? zPHYZ5G9=Too`(j)Y#GMH$OM5tcollQoHHotOEb2Q<4AmM) z0NY%QJuKD`<^WM-3!d&Q%1v-`Y!u;1mm^idF?6~4SgyuLzAz6B?u@vH5BNLp(VbK- z$79@Lji(9XItEZzR9iO&0{l5@sHUN10pG}5b={S=(RJ=;bIA3+7qP=!2}*DOfw8w^)L&p>&f z60K5uEqk2=vU)?E){f;R<{!{29J#2|3E~%2#HQsSIE0~ZiR$&u8k7RH1oA6VxJ@r? zK2GK3iC(H)sBX+QEE-hwr1wD(uT!V~?LI<`yASX$mJRAwdm4n)gX5ULh1W0YIX1O- z_`^i5RK2IBTfyB{Zz)(p_fU}La$4_d4>3#i!rS9P;1z^WomZzi3+cwhjE#I%HR$rh z{K&VFpag$ydampVwmGB_3-<-^1h;f6@H`+5OtFpBA7uT{fy1Zi`v?aVP!L#vH3k9n lf<-2o=w2$il@FI3-|`ZhI5VQRZ%vz$U6vPU2Tun5{{q4pnoa-! 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..72d8161fcd066e073e762aad02d15cba69b20ff1 GIT binary patch literal 9026 zcmcgyTW=&s74~h$o>||MO%}3F8V43{5|4L7AmD^3(k21c>>v=A5bdhBr@LmV$35Lm zclFvPtP~^y*{FmNX#|KMgoKdbfxi%eNKk^52S5n&gd!sG$`cnMh3`~#&$MSeV{a~N zX*AQ-r>f5FJE!U#KUMnP{dbP3Ke-Tx-1T>BmgD$=!{SuVIDwsXm@m@j($im0ucm9V z5?MQOkVH01hS^GDVKr-RQ1cc2 zX3D28rLt-X5xI>-U~}4R(sg1iET?VHien7ocgeRp`qzw;guRD`Wp78UscG=TbyB&g z_gQy?b-hoT$Z27{dkmTry9a%e#Yk@87dF}p(JshrEYwZVf9+lUh1XVJz^ z5N&Vh#q%%BiZ?X%hS_4EvIKLow>?Q~Q7qD=!7Fk)X0~txzpGnb;$>398eW!!D?C;Z0wl|a#vyJ1K$FyS5tnTUx*>&mva-y z6K-HM6JNn3Hkv_XWX8-z8cxuY#~UKg0j{45Gr3RW!9-gffh zVOYA3(6)K++06&7Lr^fko=ix)Kj^(y#UDH-h{PJA zKEKCkk|Uk2Rv%S^hU*)3l|jfmI+mzat6pF^YdM+r7lX#|N(81JFk`n9dTduMiq*~q z{uLI9*szRGsMKU$z;1>JFz|@0{13w1W9)F(=7w$gMuTB*!J;r?2=hi`FLzC1vz9M^ z*Ih%lJe{GEB7L9GnO!TgELu^Jgaan0{4foNxK4kV!IT}>5j@?hQo#BJT;S*MvR~$K zJItX93p`O=fMjR{&fbBHPDa7bfiFsw9|q?X(Es2jVs_AIZ(i0OU_98L9BTT-Lzgca z7nLb5W)5=kw8G^Y64z|VdSESFV*E?3^r`Kc!7SM_LpyP#{!E1FiOY3Tj?6fCu9bzaI zdj5b!`EG|Cm5yG8bDxoO`vOP7Jg*kb!-gh$@^s1z|I3ox??>5#h+l@$Uc%O|^x>+I z)*c-ayz*pnVkkk^yV{H6V`D`LMjz@R!3|M*dk$aY2<_WfiG9S5dplb)NkKQ_`%Yy9tr$AI>S z4^e724Df#zq24}+c}GV({}=x^|4*I&R~{e0uM `$nO+eOAc~08eMhyr5HhSM>eS zo&?`-e}QJGQ);`W79I^3V7Ps^W?(psXN!l69J>1ldvJC8SRTFq4TEd*x|A_m&u;;- z=euwlI42zd-vOFJ;?EO)56Ta}-L?Bc{v9%*2KmweD+TZT?nqM~4e{ST#4f`S|2*cs z6~wO&AbwE78w&qtl>+EorO)UE{nD%JL;tU6hDQIl)Vib5N9g~C-hVjycixFR!{y65 zhSZLDYq)$_-y7DTm`C0T1`2BZO`lqMH@(SwubV#UJdVYkj%*SEdIK|$BciixWut~%L`FqNn=53j+h z(~MjnMKT!v*uIixy?t_GZ0wt9y}gos->$xyoatD*4hwP5KK~~E(ed5xrL)g)Q3)m<$h|#n&jCv}Zujt`HR_Rn??EOZ1#)jjvDz{VeX4S*`1U60t?4 z-vh_9a`5|M>q#AMbvYQ^cPo3SopXLQZQn_oUHUJHK;WXiH72V$4Ri3Akmrxfc{_=yVsB>k`MR9VM^sI}E@xsU z1n&K4V=Uo@tlJXJC_vH1M{A(`MaxUzP`Q)Ja*&8H5ow*D#$`5ho*<%|t%FKF`W2lJ z56AR|CU)7zV>NqBA`eeEI@E88vDj^Tgn3Mjm^-fEX5I+FUfG1KGXe!fjOt{j$F49aZbDYM<#iuRa*6G_ z(3h}866ZuES#nq-X<@s0y7E(<1nV-ZgOLgpZ!;1HMS*$OhjvWVa|5cTprnw9=K4q1 zV;8?q?tf{rC<-EzTfXBll>N)Zsx4BvpmkhWrKDC#-KoaXP?~v zqHnTXBpKjkF^7sg70>28%WoxCi$UWK;@bo|Sn{Tb*+Jx(Kreg*+fe(WF3Wb{Hz6i8 z;yUnBgreP)m*qSKJhL|>C#dH%=Omrb>^dJ5s|HlD(6vBPjD7Pl__lCllB~D-> z?t*HO3Q93Ei!+s%ptgR+ja{LfbHQ}nm@0@6B;#^A2L%8&3t?iwKp_l^&Shj~9!}*g z^b4CHx+@eipH@R-17#s=2d2`GaM2|~7CZ+jg~R_lC>C8<{Ggl$&T5DXE&yy%uXJ1O)kcJ zzOZ&p?zXsx5BwK*dvg8R7^Q7tekB2}V<_q-^{gLFFR(40spN{y(W|jhGSqm3mX!)I zdmDA#YpP$W8hu$DxCZYDY}aqX2lBwMOrZh+wU5s2kn>U^Q)r}4<~HIu>om}BiNzjR z;0&GDYx1}as%?{@`sbPG?NW$UY%gUENI0w4)B)|9oMir$6bW6<=x_r3!WGf{a{&&4 z3O)66Rg-lIOu@ATA}fM75;O&Fxx8;ww`Vbo)l|tv(NNKnI=j?_TtV@4*5c>!b-_Y+ zmS*U8I;pJ0vO;52ucR4j^qH71tI7OS`z)oNQ|KK%k;u8CIn`EkC~4~Kf<5&Jp*E+} zf)q!{)zm1=-)W%hvXAuUzQHbaWgl53-&L)&yl;I3;7Cx!KiKT zixZy*)kDchWz*-f@#jbvA!OegkDpFI2b`cU2*lwc5yLZRW3&n8iPZ)=Ic-WxOhr`h0J*5 z9`)lmEBy{LMxK?(Gb~xk^5M9g(lzg?Pt_m$3?(J~UknJ6*}nly(V6N+;-h!E%^KjA zT<(VJT$!Zewf0M(&&z<>QMRko?D>rR$S2{w5kWLpX{OBHe& z$odcL5+BmHC!M?jx=}hA&_?@jm~ntE#&caHjiZV9@j(%Xbo56{Ix%@PN#A^%l71<- idO=bqk9DoA;@+|B?twVlg0*GUp#wseOUYZ4M(zK2nKJqS 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..6adb61b2faeb58d91753e08836b7177e79a5100c GIT binary patch literal 7262 zcmcgx-EZVp70)J_Bs2NWcGFhbEG}r-3Ei0~f(Nv!prYE9AZ&!Ts6r}R*JIzAYsX_7 z`#K+pMdhKWL6--#M*IOthaxvitndWjKvcMA-Zpykj6oSvmg`D>TIq$mx%MQ}6 zB^#CyvD-}rWF{HsTqhxU7H!{35=`Q`7FYxQwB)2wIp|vUVa$3&lgdS5_32f{*ZB@# z;Wzml-<6L#JRGo2oCX1lJI7&s*wKO(|G;3<(TsJ>J_D5{n3KPq&_+8>AlR+_*|f`N zWX%m6c2d!zRxtk*1mUkhZJ)vKZT#NB?;Z&Sy~M5(r3rPoK_5ntx3#95dq&d@j6vw6 zJ~PJ6u{TBYeBnT3R?1)Hty1&@ehUf)m-B#=J;7uXZ`SCInYhrKNaGPWT+exe-uYdl zM~dB3P@r`yY8^q9^j*M{*W~6n*KG}-?epH`cmc=z+E|)nYeaobxeWeV5fDXZ$yGX9 zK|_t%hzu}Sdy^#h-IXgui=#YIV8S)86Du!8f5t!D8P9k}IZLu2_0#Xbq6znkxM~(QE6@XsZyA%yF43WZO~?N_l^9vAptH zkXcpZl3?G5U?&I~BM7My6&g4KVGK(g>%a+Q))a&_zfaDc-7aWK{(gQjfBfuR?w)=E z?$}f@(i~aIkpGiu+7t@?}$prlbg+LkB^G2A%6W&1L@O9tRvHEo1VYd+-o=9N+U|iiGfIDQSP{F1&$$@h%L^XI1G%3 za7va8qwfFVq|#gdIK^8kNszGndt~PSZ5W23ewQ1nE*m|U`HuFTGUQcmL+X9SMCGe| z>3CRce6xt7K#vaR)u~b`A75Q5{{+t;FrlvS1kWEBob9J=elmi1%K) zHZyZ&6?of3z2j}+9~7`HXN_hy)TNrP?nO6|hy@O^vU!5AQ(-EPYcq1A;F}F1ZY6F~ zA(AyEb78=IRG#0oyNC-Xk18Pdx1Uc+c;@_Djz zA-5isVn3vH>h^rzg{+!x>6BdT{FGNKr)V3D9=w=?t2lc&E{}ird5(Vvi>9UCs@A;+ zAik>B-vh1pb^Q6z+s9x2%=-rZP3jk5y|yg*_{Itc9W!^lb(}p- zOftwSvAN?l6sfm{e}&m|rzkytU0sTdCVaZ$?cR%(HN~YUcklcfRa)z(blR1{lKb~h z6mJv$P1DuAyvxuu2gVB|sppcfUyki{u|rls{0qg`#iY-TqF-U-=_neiWCTUy8iC3t zP&7_+If{OKiI@{8n!2U8M5^BLYFF5GPLcAD((cqP`QMQW|Aq|kk5TA0`M-(@x%`Ns zW(^D-Ds>7TnJcmI7drK-80ARA-k)iOzVgA}ym<_ZgD0G5{vbpzgZ$$hyux7meaX## zuFTEz!Yw~?I^g~dHZBPzxTfuRA74)AX|pP=UD2}B&HvZp_QrQ7N`iAD<8ML!hBk0f z?~d-@)FB`D|3J6I#;S)r9c!vZR2T|WUS}40Le<*UaS*n2+XtyS2#d$HV!A~wo>S!U zmHcHf-ULNnD^zD*@2u%)$b<;kMTRXPmfUd>Z zmstbM)S-Txkx;lcuDJnpWU>JL0fLyUr=r*TQcG3YH%DKZERMt2Ra_u45wC~LF3f# zm_0L07AMpjShG?Qn&p(7MLPq1t#lBX zLkL2#YQhEj;=uB0!*w;Iz)j{ar=os?Ix)H1=RSUc-+7!Im~ww0@P*XAhsZ5Uqr8?>xch}DN_gm_OMVANNYJPw=zJ)!Le zJz$^+3|kZ`lC(QU=MD(GerRcLq^~1~=w-1%mpO3ZQ?S4pT5xCbh7GDilc9X{O*G&s z&?>e!^RGPstKZXM?M%+G;E2Am$R!<4;J<((QkDzn5T>py6>v7e6rd##UlGC``lj+E zlUpOR)B{n|*i97+9x3g0 zem|9~RqLtkR#6Y@l!7Dl3^{2*r}?hV5VF)PtUc(4{tysq@`bUf4QxMk2s3^1`-VfoE{_Y8!P9R0zwms40ssI2 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.io.nutils.load.doctree b/.doctrees/_generated/gustaf.io.nutils.load.doctree new file mode 100644 index 0000000000000000000000000000000000000000..dabdc1b6d208d839c277dc2eedddf11cf27c3148 GIT binary patch literal 6712 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.settings.doctree b/.doctrees/_generated/gustaf.settings.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f6af416164b383b4e6042cca4b24cf6c1ef2396f GIT binary patch literal 4416 zcmcInTW=gm6}Dr~*yGFivPoE$m>s-q;($D3&@Ms=4@lg0ZQ_*>f@P(sx2C&hs_gEr zrY?^C5Gg#Ylt}fkQi=y8_%r+henWl`7C7gL^7cQkL?1%U42XBP{?rL*73L}F6ewNBq+sD+YWLfRze~lCq`fmDIT@x@4Pud_SmavuG$Z<+>KR27d`n@*Oc>q! zI=JEMVDuh4u%BEbuZ;{gE~{<&Zfn^Jp(nu zp28sqcD_F);gUl1jp+1%tfR9q0np^Y9^3I%^(T(jfxTKeh_48*BUeS@hY-9FEDA-! zu1w;Na>^Lu`jV|Fc7l%`e3;=xgZkdO>@+o&ePnNHNph7EUl^l8im{|Bbb^)^nxyV% z&aTuvG{Mq%i|1`OHquw{sH)e;cCDtAHU8Kx*U91RR@0EYV|M@8cB+Cdq{AXXWd|U$0*lpfVT4;wv0SN^My6P;YY|7jFZo?`)0Qub7tU^v zgwVOrbZQe_Xx+Dj++@-DNXX3hrLM19MHGw7_h1E)-wPC)(vlKA;hIHtcf^g=fvR1? z4U!f@>L{gW6z;oWR~Si~Wy@~Sa}KX*qK&GVTDFzYp&8@4?h_(&)J8z{K2awfdhInC#e^> zQBq1|``AxNg`y@A(Rt?aw23+@6pf}&mJmVZJ>!b&5}zAU!j-R_Fr?CQsm=@J*cyyc z7`nKNOz@J??if6=o%0&F#T0An9c)Xrc+2>S`$~%z#1E#YSmvuB5B83vo+|jb#0U)!e z$<3ywMXK-!d0{uzMXt$t#Q2z{_yN3&sqna8QyD>){na3;6&&?mxem)H6)~w?yAw0? z@fd**$p$Z%F2w0mQ{W0eK!;uviogq?N5niI0Rwea*!Fb-HFbuMXCAz%AR!g~aC_>2 znQVw|tn>v`U=*YH3wtXD*J(sE!qW)DzOS;S+FR973b3Z5P}5%61)85ZOpbOr)Dk2w zpoo!>BRO;w2K*8@TTlwn(s%)&ekXnyNB7^pL=6Kw$dEQ_7HywGnDzZ=x`T0ajj%)f zdqgm>d#135rm~}K#}o8L0gZj1d9K)Yc?^T=xA+~huZ&%vj$*0Bddz_ZuNSTg6rZd$ zU(kP=68Mk~hDlxgJOAap>O*5$<`nKj`g-;ih?r>^76;&#pWA>e)YM4!?T#uc;yDg@>28m!9%h1GQ+ATtHL&wD zT%xXdyLo^7<{E!oamL9napE(> gY7^tK$gT1`PEF#A>ex5NmBdd2RpazPHN*aY0hLaj*8l(j literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.show.doctree b/.doctrees/_generated/gustaf.show.doctree new file mode 100644 index 0000000000000000000000000000000000000000..07fd7b45b769f5cc0961a38206d0dd5baf315c26 GIT binary patch literal 9127 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 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..c1e9ce93d7bfd2dde90f0803ceb18febcf8f193f GIT binary patch literal 9292 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 B8OZ4}^J?`ml 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 ikz`5z41S948#vR^s|1v##zrX?7$=n(oTX$c%_D zBOxt%t7L)L^VJXRT!i=8AER(n0> z!Jhg^i58?2@34K6;TVdCsg|oAT987dd`ULULTo-R>zTA$a>8?cmTo02OHNxtL~bh) z(2}$ocb%9tn6y1Bj?szdns4>=)0C5hWus-;I}vLWO(G|S)uEx3FYxPpmOsnK`Lf*H z;6aaVM2YXSXk#ykb~dzX`4;fW@M16aGRY`HviaPPCar5TR9zCt7 z4X2s2Y9?7Cfty<&ugTeptn1o7t_^f%CILw|^?qnctv;Zdat3m(g)kc8Am@mo+I`h# zeLyz$d)}=$w8-eEFePTuE=viIH^Jpjw(D=5wd9K{1HK1g(Ptnpx_2qZ@cS*VLmCEsLn4y;El9C7R2HXUT zJQp@v*`S4iJuS9W8$&U#I;W=Q6qHMf1H?3gkUS%Zs>Gu=bG7kQ>imO~b(W(+YE?Is zl>0uE+gAXqttTrrkAO@@nRA;^jgsL{Ph;pGW%v`#koB2iRjM5JT@Xf)Y)^+=82wc4 zAQ?pWi;=OL1se2NO84=}((%J%!T1$eepD=6*B+TGpEpYepPa(r7e^S7@?daod&T zQ$WBdm`LRnQ-{(xkMPPpWep^*lk%3V;|UI*%Il}ZdlgcCU&^inR|SjLEDG{CuVAgI zoF-2WT3sBnX@9_~YiUwBQwf(i(o}#;d0kGm6VFrT4%wzn5!i&IfU!U3tskd2L#azg ziMk5aD@wRG__78RLcUHGpgc%NYdi2o^{!Ao>>IR8oyZD#)s@qGyUYnxyt`-YVHEDZ zZrrhKZjiGX5mUj|7e?SSBfCscwA{l{h&zJurf&p-vuGM;tP>j^^P4nr#khUj*jhFA zFvN^4!ww<@?J)2`BLV|6jKXS+b`Tkb7|j)ZsL%yvL0wQxY#dhc5&J7qZl)r6?jwz2 zm5Lw!`xG~+oYiEs{{*H_faf)N`2Pb&>F`ggnpA9Z;MPH!{0(=Yr+*p(p1)=$*O1d~ zmwAqM`Ep+}m&N5$4Oe!oymw|Z2V?#8+xdxBMEq)3fkXFmqa!0#DEjXe)qoBtx-Ss* z_3m@@rCnzPTU^NB3Y>!@Qu4nSVfcOuZ6*83q<9meh~BeYKb2$Q0b(shiv7@YZ5PLooJ3O`gm^Xhv!cz8ithVZ zSkcBIv)#69ryt4&u7g>~=8tj3Jh-JJ^%j}Xx3oYS%KO+7n_*agj7b*)>u<5}(}VTXVRSpEtxlIw zGPl@jS82C@7)FTST@=8790p)HwyNVi?3Nx&pIkJ9Plsnf7rd3qMw4FE3m&}&8Gm~4 zsCt$T(wy}ke7*b18Rr+H1+)(*&|;Ub_UW;+53>Dn#8q0y#RHeV3SZxLbAEq_JcKD(ZIWsALNhodG{Js zFAne`HJc6Q?IloTxu&=vTJVFsFQ=oGh+oWvz^kRs41QJZFqLYKAd**?)+pblK9I!C zP|C;3+6>0BIt#XiPXoDeZ9IHcS8Pssp~-7fd{tf%k>$spMP)KGjDijlRk|is6M?Y2 zbaO;b=QPYgGa-JXa^6mm)bfQ{)VF5y9$n{>Q<>r@Od zYkD)}rFIYqKM<@kxH&54D5vKqJ#!yfxL%5$c`Av7rXBRC?igdq>$-<|O!b(1uHa@~ zrvt}qLRPrjlC#Jf29Yp5w#xwDn4IR8S2SyKiS4^UO`s$d=R`GGb66|sfZaSQQ9flN zur9ND=xG3cn~_p@Q=fNzU}Pd67*M_fnbJhG*S@@_60*S4^bxem*Rt9XShPWl`aIiM=&OpR-N?^7;$-bzGZmR)iTDQ^_i zl3r*QCJ10vhYRbAe9NN+7gUcjZrc8`D~wr!*9uhKK(&aRN)R)%I#XGREzDgvcBwps zwM@s2t(HfMWKvG%t^qfjg)%Xsfbuht&t+t0+x1j|R9>SeFhOlk`6B9qSk1wf&!FUu zt%dYkvdE3PQ}@NkT+;`r&|1w(B@> z2$R8z7e0UpoS{NVR|nV1MsUm_gxEns0RqWXJMcUp4NP&2OumuzKLQR9)9=6?P{4s> r0oE7>pcxjCq_2CX=vI3;6h z_ug}U=j+~6Z`ZzG+gniozDOUY``=C9N;|RHSo;h+Q~d+{@;##LN;-;1|<*jo10g{j|dyvL+nivC1p?p-~bG zbJ){sm{HUl1c`6QDNVtQD_>zJB+B`W@1$DFdT2r>k@9WXFbXC3vaDyaAIdA9!(#a3CqF2w2mS+B%VaB2y;ZQQohM| z`8vPJm-(K&*XO~Q^`pf1S=4_JL`QwCX#O7rjQd)!zA<9pG6l1zgzgdgx@|X1zaLWsnP))jz5AC;YXi{9PVoJ=SW0n#gZ(x_#Ggo-?GFQkPLq$NJA|O1yOYQ-a`J;9)oUus} zA}<^)DySO@plNjK)kxZr`LM*{n-}4*N;qf`R%!WJ{rT7U*GbuLl*;n^a8fPPRV5Q* z5;zJLc@8|dV!CB0s*RQVL&16;o3aJDjWMlhx!8_W&!vvvIbTP)=%;4Yprp*Vq09*q z#DrH=nR2a&PIWC=Dz~P?8ltHfOnF_d4inE)4gfiuh6pSIR-j-! z;)Cy{$o)jh95>H!O2*gtp7u}3`UP?e6+1e)Sb;C9HLqH<8f3UpWQM$gxoq8INM3$h zZ&4(kX>#d_zdGL&tNuk^@k>;YXPY(v!Ot@Y8nQWbm}hIREJL(XwblEI^5v^+>U2Oh zznsT?R>*f`l~jWAr};to17!YvX2J!Su8?~W*rzkX@%Q!N1yy1fsixiO_;=d&ejCr` zY1ea(*nYd)Z5K7BK=QK;1mw+f@4ctk+x;*mU6ea<v zu_gD|FG1v!xnoDx+JAlfVFl$$hDu4Ex*+J9v&;W+k!r;BH_E}u;Nq2j3#Q*7)BSGJ z;XC|~IYF-I;#m}jVqBW%$4_D&j^g0{h-T;#PxayN`EJ?qs4NKiNjSS=)@M_G^Y(3B z*Kgm>ohYAFO8AQ>kOOlt?baD2&h)Re@%(-nDjtXUM_>i{qNM2^NVG*3Oz}p zr2Q_8WtYU(XMu_GGN(4x3bC~`ZytSGZ7xsy6?Gg2D>((>ZOIA0Y$6Oa@ zJqp!-Dzl#NP+1C9VK8T?UcBkAk!saBp6|_EyB?F{e+qVW^T}^Q(?WE#o8yk<>n7gR z4J|v8X|5IA;#8J!--NNyI7FAAI`)IEZdBp8<_Gy>D<^lUDRqjo+h`J9MMKlV&&kQ!kWjLFdM^! z_FI%KD~YJPX%xN8^_-%6nsPOR0WI8Z>VB%8>=1Vu+-vPr*1u|c2|9rJ{Z7_{M1+Y* z5BcVyY-Alsv=uP0(TYSSWxUd}**K3L=A>zU{FHh?A&ja>z}MbY+#AS|ycx zQ*Wl0aDPB?)za&hGUT&wPQI9$EVoDp_*%>Xk*AuJ8=mQp5_80WIQ5j4(8HJ4B4!1V zZP<*ig4l){#fP$va2ujw14JAfzKYh+3H4uEW+DQkB*`VTjL;`d#-UNTAb?c_2i_O? zrbi2IDvEM$GJi=5W0u%~fo3YWws6S{VrEolDlf5waqPs7P%gS@*iLK?JW?c+awQK9 zgxNZjiIEdjoMF+8jLjH2p6Y_j9eTnhXxXY*M7tNO*)aJUK6b!VdI%TYR=qoq`6D=@ z=Ztav{LpgSp|(o%roCLO}xAv*Y5tsq2UFVnL)c}aWsD{7+%L4P*xCP_E8cd-_s`}^&Ke7184A_z;gT{d>~H@S1DD* z$zY1l8I$vRfvKaBzULgFU&zJ-W+Q}8Ap&P;bDqiT7PyWKh8BWn;L`ymS|#>&_I(P@ z>J4>TJCn=IKc??Oa#g1j#4lVCCCfo@2t#)l)Hk7R2nE*?$gfD@Hhl$pE0tF#sMHNp zWUMwU2Gmofk4#`+A)h^#6anAD52n7@dRI_f=2+N=EaL~c~Arq&c6KyGkL?QdC%bJP5qPAr$esDPqChm{_rq@2VzUome0FHWHNJuTQU) zy+N5n3bF914}OB~jum(wkOrnGBP*|E^oPLVo%9~U0WDYr7GRCx0D8kBlT47;3bL}{ an&VquVw2B|=#yU4rev4p1*+i5p!YxCqsTu1 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..c2a42ebe26513f9bb7128562e94d1ceb02c9cf3d GIT binary patch literal 7606 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 YBx_jUYy;M2i#19Rl6xt6Yg8%!A7eR#(f|Me 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..d2d7b475b10d403fc1578b33ed63703bc522d8e5 GIT binary patch literal 8569 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 BHqHP5 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.arr.is_one_of_shapes.doctree b/.doctrees/_generated/gustaf.utils.arr.is_one_of_shapes.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3e87df7948aa9c900f40739717df3cfa84acd44d GIT binary patch literal 9110 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 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..0c3f210eedf3a7c9b35086aea16e06a19be0afc5 GIT binary patch literal 8574 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 P;gGY-{Q^bswA21Cxv)o0 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..70e59c4b22ce7b0095c9a28acdd594efa3b4453a GIT binary patch literal 13672 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 WCKl;TpX|PAk+aME0!8qo+xah5AHPNb 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..353151dc1ac2a7902ef33245e3b6a9eef837fac4 GIT binary patch literal 11694 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.arr.select_with_ranges.doctree b/.doctrees/_generated/gustaf.utils.arr.select_with_ranges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..473c98968fc5de06cba43d389b827aef4c7310c1 GIT binary patch literal 8003 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 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..b83cf4cdea02290305ab1077930492e91e6e8687 GIT binary patch literal 13200 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 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..cd79a143628fe28904fe74cce745bcb9bdd0c520 GIT binary patch literal 22650 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 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..2333145203af6dce48cafda16b7ad2641f458ee7 GIT binary patch literal 9036 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 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..3a40a97152dda1a366d055cc0debf5fe76c28624 GIT binary patch literal 7429 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 OQnJhQ0#)#|*ZmhV#>X-M 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..39842300046e2cb54239e2d30ac42245fdfc268a GIT binary patch literal 13297 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 baKQ;IFSW^L`sDZXHU+ypE>H$fyIcPOK}3T5 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.connec.sequentialize_edges.doctree b/.doctrees/_generated/gustaf.utils.connec.sequentialize_edges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4de1b20e73f1512fa534e6b4ae239ab63ed6a4e5 GIT binary patch literal 13221 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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..10d97be368785288220c1caf42395aac65215e12 GIT binary patch literal 9222 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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..e9233394e1d3101326fa89654ef7414ee3171626 GIT binary patch literal 10240 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.connec.tet_to_tri.doctree b/.doctrees/_generated/gustaf.utils.connec.tet_to_tri.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fb9f2fde1df6b474c83e014f37b08f817522a6f9 GIT binary patch literal 8664 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 NE{h9vf+yXL{{Sa(`o{nO literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.connec.volumes_to_faces.doctree b/.doctrees/_generated/gustaf.utils.connec.volumes_to_faces.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5bd0c2cfd891f0df2ca809a8dbfc5eea725fd5a3 GIT binary patch literal 9308 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.log.configure.doctree b/.doctrees/_generated/gustaf.utils.log.configure.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b35ab4d2147b7a7a73fd5b73221b7f34dcb8fb0b GIT binary patch literal 7392 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 KD1)cH{r>{zah|vU literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.log.debug.doctree b/.doctrees/_generated/gustaf.utils.log.debug.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fe7148ecb6d7e810eca3b827bccb85b0e29a61c2 GIT binary patch literal 6350 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.log.info.doctree b/.doctrees/_generated/gustaf.utils.log.info.doctree new file mode 100644 index 0000000000000000000000000000000000000000..819b32ddef311bff25de29e1788fa871d835cfa7 GIT binary patch literal 6334 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.log.prepended_log.doctree b/.doctrees/_generated/gustaf.utils.log.prepended_log.doctree new file mode 100644 index 0000000000000000000000000000000000000000..aac6292f515731dbdbeca17307c3b1f2dba6a535 GIT binary patch literal 7505 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 G2mb*h)8~=^ literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.log.warning.doctree b/.doctrees/_generated/gustaf.utils.log.warning.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1b877d674f0a5f6d92feb0503c28ef43be6c305f GIT binary patch literal 6382 zcmcIoTW=&s74~gB9$&`xZr0jm*P97ZvUbRLcmN5O6^az)0jwAlA|$jdO;2~tRFAv6 zn(k`vSRyDq1jSNCAZ_!C!~<{qjpYd;1zva#NCa{D1%UWYRo`Z2ch;ahU z^_^4aoc9|)|I_sa{iC*%h9g99x;{)3X%CLf z8on4FJ+$M{3x^ra!IYJE*_d>hBl$sQ^jwW>XeBegt6Elh48E*ZbL~&mitmLiJ4ySt zTDPT)y?!cjYC7ez=O%QbrsLa5f=+xlLOU>DYi=4=i-7gwGz?kXdnn@5o;hmq4+-E~(Dm5dl+o3mfbKwTK(lTHI?-Ngi?-Ih&}}vW zZEGC(caz8_^H{@_gvDnpBSgN2UEa$1@SSJzA!mm+gdQ0}bbgmOf@=$h9Wj`>mda9Y zA1`XOTNkY=8v9!OtmO7yMC>7 zo*&{oV~wmP0I}7YMt8Z?eoyJ|YP+A#+b*2l?jy4uo1kJ{rvm3Q2*&VXa|P9nAoZnZ zk;k)2M9~EN7j(L4_O{g3{5^orJv#H)LkEvSrnZYu%MKkr0rj)|P77{Q+VPOdOx>`I zgGmY(SaKbn7IL1O@xEHc7kHnkmoMQJwVD08I*2jm8iMz1a)t2jxVucP6O~1OgeNMS zG~!jGTBdfUoe6Z)mY?xewKhn7Uo!xTu3J(#gse<5{+RcFlHu8*E@LaL!iybhCEw)x z#wMWb8$=AvE927~5z6|DTYoZJbalhnj(DBm+xg-huy4rX(&5eYS8V*l)7e<(7%}5x zykGxke+3kNm!r^9>jRJZuAye-8ERpJ9p(n*|ZK6ECR=sfIpnfqmYpbnpC6y5Bas-_*K4-RmJxCD#$yUYMz+=sZ&! z=wRc>_Z$ySPc_k$=Mf^c-)Py~F^xWpg|%!FF~=KtPWGW{;rY#d0)LEm{rs-+0w*w# z(G8=J0dw>sTIFRg-Y*V~uj;_}XoijqpA>IQ8Q>^CaK8R$YU>;HC%0S%af(g#ceU-? z&$I2LlpF1 zJghB6IMl`;R(vWNL5BRIF`0=uQ5gc^Hz=zsRAa{rM~X1wwy@#eP~atnhvR zC_2=}I}9Oo*fG>LP)+nzeE8YaNuO>^q#!)r=p&k8o-T46|1NgT-9Y8#R!#&`E4r!C zEMbAD8Lw3N)umN=UcTj9&S%^&p~kZ=>SN&Wi%ZDiLN#8Oywmv?|4H#g^8J~p<_V1Z zEyUk2Bram_$@LG6sUn04O@clZ0OgL;NHq~8X*!Mmh;ySTfVjWj4n@~wpm3_8C_dXo zcbBrwb9mg%e6VQmLL!fLl2T|p6h&VlM=Q~O36qkF0Xks)sy-g2*fWR})q$=KDZ6-Y zyG7Qc13+@Hh0JVjjZplK$&-oo>p*fjNAh)(aX;Nm%Gv^dUA-VaTy?7K-}nN zYW3T;pCY+0LI<@fQW>Q(JK@_Ws+Ct45V)h^qRfDjOAw*4VK$^3;S|mFyqU&6T3Zy$ zQl*1Nv2nv(j=C}sLWV-J+Tih`+M>cwmIS+A0mbN~ZRwMy8e+?JdEw+GgEKhhp}v$$_cKYKP7Mt|c50`MUP7<=f#fwTBFd zQ`WYG3Z1$dGe^X(etF96lysSCA}oQKjLTihFRAHU%5icdL*+Drl@ zvepk$*mVM+uIjdFTE1}X9NK+{BeQaF@y6bOvW5_|PtynVHPmz$bpwC>G@HtfA426UXbP7M@YfSFIU$0{aCO@o0H44r!SzK-YVBp%kbk;a}mxU8?ZDm#Hfg zy_9O|Zmc#a8&tKR0y4y#)M>s)f5YoJ`V@Z>)uL|wra?##TqOJ@)NA!P9<_V?tyFE* zZ%;3`h1|tFDcHjFkdYR0M(=tLF-!O2wu8R#OG4<*7p6K(>DI)GtzuU_>B_|V@VBuf z2Y+pPt$YN}99)PaQgRT;!W`lIKpL3h8EL+m_dfy-A7t;q98ltbVFA_z1TY(xo@AnX fqwLmqxZ#D4pSr}EA(iXbU2=B0U!WH}?H~OY-9lZ! 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..8c822674cfc9f722914f197b814eb16213a348df GIT binary patch literal 10798 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 a=x{2|Az?FZy6{-l3G8BApzs|wSN{*X5LyEO literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.utils.tictoc.Tic.now.doctree b/.doctrees/_generated/gustaf.utils.tictoc.Tic.now.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5579cdd3ddff29cafa8220f1fb8d34d67f29b97b GIT binary patch literal 4059 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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..d60929303577ac04991efebc4abbbec35ec7f04b GIT binary patch literal 6546 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 az%zNH0L*Q}=6c4XVj<6~R3E3!`hNgoMXgQ% literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.bounds.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.bounds.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8fbbcceec051abf8803e848f54a68a15f28674a0 GIT binary patch literal 6177 zcmcgw&2Jn@757JG#xu6Zv6EO4jl6B zceOtbk(R@XwWwPfEmwpDh<^ZqSR~*tSdjLBIC0|7;PN}Om_N;Bm&AqVr-NdCD`k%GqOhFK8@$O|PxC%+%ZBiT&uT;RwQ-gTdo(y< ziSQhj4xX5gVU&e#n$uLwyzy;zMk>90!Uwt5x*6NhQRIA6wyp9|d|5V&vmD7Az8A9m zC>z?cV+)aZ!%P4JI`guJy>Y&lNrjeLKv*T2j- zy?_ZGxqH_z2X7vU+|KwH`F@4R5x)=Aq4EuI&Y9D=kC85oSg8jvMV3r)W^;xk{XNAJ znzg285u3>bhQYic+vOb1sO@@BK^f?GsO_cov!{^j%T;KzAA?l1wp^#J6gyO#O(EMp z3;aiEY?I5ZU`oo86P6PS-@q>K7Ob#d#)^U?rE|pRkBBHRS~%`Squyoq85rlef4Hb{ zZYx}7L1`K>^094cniU*Bx(bdJfU$jy9~8s|0kL5P5u=VGUlZUw}$i4oWi?sa|lR)l$09Z%DeRfxQ0lTRaB!4$dd zkU^s11OYgorejkp483L;1C14h!BV3!K1Z4FD{Jzf$&Mu=$AXmvV(~|HF+-Q1<_NGP zq`B|{?<5Yq!*{jqah$IctrRb{zdBJU>NigP%4ico#)%#CnziKP_ZXr=nD#WhV*S3`%h^5 zDYV>{jo!cCf8NWhRX(k+QuExIt61}4hyMd_k;=VaAoK|VlMSz4=}!>)1N8aWz+!Cp zSJNR|g#($>m+eyZ$@1dDLS6f-6@$el3p7K!IT`KmX15}^R#q~hqj=mk=S|ajP&`8( zJTNMnNtK45dld~QcS(9@a{E;#!AW-}o0xG8yQt%T2Bulnrs;|ExFqLPUj@KdU+FAl zqDM62IwsoayAStzVLS+3J4x*G!k@O~V!xvIu+>A>gRMsG_414-N z!7>?P+I3;6Z#+51#1AJv?fTIqz@JHo|K>2bI_!|I9MZIx$1ugiYx>I7oBkfLPTg*N zckX%gg82DMh^yy^d5+8~(bph0b%rzhjw<-4Wm)A;+3kNlk`q8qE+T;=9tvNHd!QX+5xJ|`mW#)bv}B9Bbx-AKa{scf(M#!Q^mlF zlW2@oNhjb95eeJR4;N&|$S@bpjP_fUT_;N@y|>C_e$Djgq+YHRu%M=~N$I~TQjG8f zz*7?uq4~u2Go-%eAtRenCgM!wM||T*wu=-TIRY9ka&c5Cf*6fey&)b@;W3(>qM0Q= zTI=)-rg8v{V&jH3mE0Odkq9HfYJ-Q1a-C`=VHQ|tqbLb-^mHk=i!CP#s05Q@$sOIp ze5QJ=Q%`Wq6eX}@F`=kZ9LcqW#Ze+GpPewkw6w0nSF11U}mzsNoN4pQVxiGm71^n zb~w)LF$3b1ATFV(C2u9ni4xax8Qo;qhAJdSvI+MaATce5b2N(us4)!~7CNof1D;D+i^Ip^B4a@aXd+5_a3N2g4HQ;7zI82Hdq5KSst`}m~$U_=SwXJRX!X_wGC|^X81FN|( z`6{Y^FqLkCqMPJjU`{v&5q&Sf-TTd(Z^~}WVv87O3_K=AY7Yc}11H>&F@VIt5U-R9iPKKXU8>+FgeuL2_Vt?QcL?L5SJMS&aBkHB?m? zE#klh*b_NkI06SuVA!Hik!HggIWHjc`jM@@kqVl}IXDvxnF|*_hYFmbW^p0!IFLHF z7~W65g#sA`TBY`8QLqJB{gDo97jl_}CsY`fD>|IOe?diDVIG`ASo&$Dh_eZ$KrMmz ziV*Hn8T45$x2Ae2V^rN(ZB#a>B0^PGh_|Rye@{M!k5B%H|5DkeZgs;!NDW-1{B=|_ z)i|!WxA?o6T(4VCEw_#bp}tbEh3+9IHF8?-dJi#6^}^c0F!D=6sLtCnouzbpYQ?tM zRZZHOS|9N?5ftF>%&t|8;F?1SaZt4YPw-xKBHstnz!cX=>z$(iIdJ$Oe-G|}st6nl pu%;k@-mr`$Q{Ag&x3b}?7dn3C5@*Kb_Z^plT@e@P2G53r{{kTzB<27B 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..ff223a984b91dcff01085759fecf7beb9fbf64c0 GIT binary patch literal 6549 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 literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.bounds_diagonal_norm.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.bounds_diagonal_norm.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fbb39ccbe7decfa0ce07636ccc631166c6416d80 GIT binary patch literal 6084 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 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..1af848098c6f3942de8755c28050cb7d1ea072fb GIT binary patch literal 8207 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 TrbltV;8LBO literal 0 HcmV?d00001 diff --git a/.doctrees/_generated/gustaf.vertices.Vertices.const_vertices.doctree b/.doctrees/_generated/gustaf.vertices.Vertices.const_vertices.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0c9cde38a6d6010110755c7c8cb0a08f4383f689 GIT binary patch literal 5708 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 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..044af097f5aa192271704f92af19965b1c19d1c4 GIT binary patch literal 4157 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 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..9a25c51a36b30d01c8de3d57599fbdc2aea887ea GIT binary patch literal 7671 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 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..0fb4a8fa026b3e7161f54101fb5afc4d9bf5d15c GIT binary patch literal 6603 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 Zc75AR9MYLS+5M73&Mxx{6v2~j=YIfn6%zme 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..38e9d677cbf943391b6543ade9dbfa69aef29480 GIT binary patch literal 10399 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 T8PltB*Qa1t#s$jY`S9RB;g$*> 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..9a009185f8587a73ec2ec0612d3efa15c17b0d04 GIT binary patch literal 6264 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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..961f723490365e6f31762e6e0f9c1c9eea062605 GIT binary patch literal 7391 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 XWYFR~!@_;NX2oMQE)avQ3nd)&* zRj0e!mxqYtAtIJa2x*&_An^o9z&`*ahy?rsK*|F`;s@{(5Z|fl+l<%VF(RxqJ5#4l zRh`RsPMtb_ukqs_es0G6)9XpZ198%EeP2kQC7E9GrI(JFP}$RL=l$&6Y+E;D_c)Ph z?6FMGfWzZK=*LWCZ)dti>?#P8PQHFIVV(-4D3|jFU*L;xXWP7~8!AvCt4-;gmhi>LN`f3#P5c1Aujz|^3$jq^jz;SW__AT z^`deIG?npnzR6el9X`*uwA1Bs#JX`R1dF@JGCu5DBNSf{FzH&sy3T-s%T>(JXP<4U zLgP-HK+6~R=h7aZ(Tza(?4)LH>k0mOXvJTGMPJ6}E*({y0jWWJ)pfWe*U*vn0c@FrCZ~}zC1~_`>WZ%Y2 zi)Nf8fNfP8kHP8I7=8+o4SZ@N8A(cA;QvKz(9>1&ruSe~Bg(ml&?6w~lhdD{) zdhAiV(7vsgibYutI;ga7JzlC*3U2qRDW_-K7UQ?+SGB{p>pQq(j?=Tp znOpZB8S6wh{}=aXjjLC!Tabe&Sc<&E8+xg5XJMR*P}xXcY@={W@vlICl`c5wC;h zl{XmDf=JpzioN4FP|WRxtbG))V}fP@*#c72vR7{W^~G+i1Bx{JCG!3MEtX)tU*y(n z>g9gGLf;7kTnJS})vjVQ|IDd;sc}%XR4;!W)*dm%VtCjhy-up^^XKX9^GC@1aqj&Y zc)gUnC;iiN!tr0(ii9%5ffTI0w`bF)xfMcqI(9<`SxAaOZLz*a%!SN$P)Ylb>81TU zr2Pa^-qwxwKi_*=Pt>2(cd13=#0_gPvC032I^)6|O-z3w!(5igiRt%X`W@u?Lt&P} zy?-hQdNB`%Li=)D8eq6EJ2O+4{&KQZr!C_){d&057Ewp|ZXCO(#xdK7f!XbLKqZVs}U1E z>H+5j1#vALbCh5MQQP3Hi487BA>Jdb@5_-Jh)mB#rft^HQ-~}o>(~B5d`~Af5 zDmNZ5mC<>IHHnxP^aC&ZP&ZMy@xY@H-^irqR(v|J-gZ^v|h2{4Urh zLITP@s408&Unx5buxx5&A7n!T{tt(e4*O^r;cNH~{(F{24dd&Ygy;NO^LK8Fq<4X) zb+`VA4ma-}TLn+&)~jeb9Fbzvt6Dkld3rpo+2iM*x*mG=;Z-~~w{vw2F4v;C$|Jx1 z^i``LJguvqdx;JYAow(?nbO{rsrm9le}nthR9Jk=qWN<6pMl+!vqgD3Da5wLdG&Oh zsL=ByXSo(p#ha`){1@~=+W~Kc`dG+4``kwY6tei)D#&~Ev_D05T+Jto@dh~ZB0DLW z)`cu+1t0B1=Os)jWcBQfDv&28wyC#q<w-vt zvq;9u3E2^Y`R4R8cf)en&>QR|fYs1Dn$0vrDG8 zCT1qK81Bv?;#zj!N`_+fo$-l@#ritw0IVe(CJLcbrq@DO3{rQ%U~wPgIW$xC3o-L# z>^nZA!U@MvBkn*i0RMeFI6>=7x7<`ory}XO0PtG#(^2G<5QJe3AprVf z;fA!~x}g|wllv=Dl(5v74jM$@x{iWMCd{d?G$`?ua}*?jG7w#N{2-y{H5AFETr5HZ zVYUio5@ZY8Yy)a?Hm4tirpu^r(=Qx?HWW4F;2YY_hs#&cbuNd1=my0XkRt{FVi=52 z>V56{J>7~}MaiRX7vuzuD#fMf$av7r^ey5v0)W#| zYy|fxxMKn|90Nc(8kLyp1 zuoMc?g3robrx3CX72Y28WLN^i5N}QpOYY{_j?Lm!v*^ay{>Znnq6B|ya<6;_*Bnxa zCsRrgcpiB&3}I>56xYb&YdQTX?C?SM2EqXyHv|^Ung9Uyz%rAJkylEx@!?7!yfF0% VGXwgo$+Az$F3$^egQvaDe*mqc_WJ+; 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..b7b514993c815dc2903dc748dd4c0f4041bc4ebf GIT binary patch literal 21632 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 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..e6cffdae988171c4cf22ac7cac0a5ef64fc3ae0a GIT binary patch literal 6744 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 BJoo?r 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..43dc4bd2f80e21f17b2860d1f9692b5be3ec139b GIT binary patch literal 4239 zcmd5<%WfpM71c=7YPBA%hi3)}JW6CZjwRUY&LWFoFmPZb@FGgI2m-G>CfHT%CatPs znPh3Cg@FW!oe1D2m`aepNIt=U|0my&bIGde$5{5(0vak_UXqvRp8MdRd;k3F!CLt9 z`?i#-xEb*@Ep#eu?YB~$RJkZz{i;6uOZ`QC>Ia6uw7N2hsQnr=5~;G(h@yT``yr`2 zmDy3VzHde1lrFmEvL`oX|3!T&2fpW&%f!Nz|Jkgvj!#F|I>V`U^l|gQDpT&nCv3_S zSVilx{NbO(4cYZQtJa!TU)It7&62}fSIa{`VBPiPhTm*%b?F~wsu1;MHQ|1nJ7?6S zayXZ6zoAk~H|-}Gw-!Qt_X-YU>1!*k%K2czlPe>pG*kJ$<1?D7<-UAV?#icfLmvB2 z$5Q8FY^tIVX8cl{t8s*&{Rac>I2tx)GXX6Ckv6mU;1n-BG8UKo$;Em#k!!xEid5Vz zU>)5ce~L@Vw}9u{_`QSQyZD{a1%Z)K;aaDFMin!-%8#Na;t8i`C#T=;u#;RksnfIC zzy0kBOZ(Jv^U~G4lJCj$1#G_hK5QDKq{vEP?AUN+1yj>edHalDgZahmL{Co|6B@ly zr>BZ*o~e|nLJFe*D?*Uw=qJk* zZh;FNrlq@KDFqyHqYX0I^IPr0NcSfTf`-X}>i3aGm%&87>aGiGcdvs7B zZ5WFsXAf@j?3pbQUEna5SYfV3O%C}TPWh-I>kr2v7Y~9*1_8WP5CoFmA; z3&AZyFv7P*N4<`m{6xMWnAjX9`6+@f+IJM}L%x9roG_U}L@u~^{q!uFcV7^;yMO-r z?qcrj=bVBUsR`EBew%F8lh2TM>t!cz<~pq?h=dP)Dm$C zR=>@hP8jaykdVJxSh|e#-)dx8(u|wk7Y>BsZ{=~s4!8Y~+!A~o10>OfTdYED89^Bs z5WX|ROSy>ck3Y;5wtX(@X#R3U zt}ggTd(ZaX)nvh|!KLfvZS6N>GF|m%s&lT2TK>oP;cjG$ z3*CMWTk$#N_}lu3X|_z)TmhHKYHmr7WhDDf~!^U3SF~oxqR@pXwm80Ky@Q}O}-z?-~DdrYQB8mKXQf_ zHsjQ;u+r!m(qOFlJ*OSd>WekM-Rg)G!-~#(;DZk5`&$1Aj2tF7;ZPi%48Vr zQP5EbLbEuy7k%cBrdqo~JFzf%@xbpX)T_Z|u9LvPD0DS9yTk@e|{J@og2_DeY!lcveF;W1wb?_fln4{?q0@=S;c1paHq)7 z>u9I_8%8ABq%0MsK=W24)Qw&GO$6Z-nI3SUcR{h9svC4re#k4Q*<9q;6}YvRR(Z)f z{sGk>P)MhyK$nAU_Jbran|wbPl~z=#X6Ox|bs%m^P5srv%0Q9Cv1?_O3;f(?sj_^M z(M1|7`)ynx#&&TTi%b!M44dvXYHX^q&}#Z8^o2vvfrLOr_k!J0_0X*dJXKb9`f zaM-}{2|_4!vcA~z#~@_Ry4dV4z+zW+=MU^{;rI=cY9=%MK;DO$Cf@Jb995WoULmM0 zfO;d0|xK7gR(cQwR>n95*w81_YJj5JrJo4$n{I@06ZhU)26+NlHCP5M#G# zH`t^Q!mAGIeG7N01X#{2~b)%Js#L)k0tR=Ck}qwQALtfDe+`R QF56Bi!8N%cc1)xH12Z~)H2?qr 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..4f11e41eb3726f466f2435c9de63266a2214fa0a GIT binary patch literal 5050 zcmcgwO>Z1Y8TQwVJ^mQS&c^I&-JFU<>csCxywE@f4O+~@^Jgd$F& zf@kKr(R~tEaZ(QI^{XWhRV=e+x#)y;$VxH+$e zOs_Mgig;KlAVLT%$5BbAT@4dfmYBqICu1;}p4Or&pALpBye#;L-c)*3u`#_eVq3f` zHpN4+EcW$JPlZhRX;EbvFHWyzae3-s@PA-ndFl*14aOW&03)j3z6L9Q5ANegl34DodwOS}(Ezk%N){GQ-Z-O$06IE5rF!#wURU2rISurl39vmNEUenW&r7rEYY4@T?BSQG- z5*@wfcXBM>YfaSj1u{Q$+&LFyGn?_>q27RnCpidCJL@e{WSMHme8#`MNt!$>b4J0u zh9xC0uDBume*i5X*9`rC;eWPh9niDT%;VCZrwZkOJv~1?#faU7(Hddo09qq;FJmJ< z6VC~VU{xdEi%wxL%tZOcnnAE`{043V-Vq z@)^put@5y6L$HKp6IXU9Fnkcz5dExqvvk~`L61}G{``9D#BW{+#-E__cg@CK7q$NI zemGU|*E zJ#yu!N)j6=;_rGrP%zNLJmJ*Vl>^W1J0zxb|IZzCZ?z3X zzJJ5~?@+pg`Tug}&(^7S(9?o{`g8ho&j-q(UdnHb?z*00-g%KsS)7@R2a5{}dKC^< zH#s*Kdo;8ezCF(5iR*-J^=c;lW8Y7oP}g%~ZuMsU(vNo_QDa{=Lfe`2b6$>iB7G%S z3O$Gm$M0J3sPD7Lpm0w~>ieUUE7$Qhf1SJh5c#z3(ENg?{i_$wH&o2Gas=@@AYOJZ z6i;1K_Cba7RhS5_7ho*S!pnFsw-5qV9)PL7jHc z^wpbw#`V{Ft;PtKjUDR5?d@SySb`&AbU$TDh5pmmR^64A$}45g#rC=G)!i^M76x=j z!1W=`G1zblDLGzZxLyydBEe{jVvss>dJDxJ=Qq7Ol2T<-@z%?;MZHCrn5;^J$w(Hd z!Azfe%RC5WYJ&({zUyXuSOwRy5`n)TKx4h2zA&8Y&4TB$P(i}4IN)2->w+cCu%mbQ zBnD~$`oYHu%*KXJ5=M z*7xWP;94mFQDQsOt%POcij6rCr*gG~+orx>@K6>}5b>PjR+EKvO*z+H#Nr5v9*D#d zxQes7S*2t!ozhEGkG7&J&4Y%50M<^#NUuf4654Rv&RBAj`=?WR$*V{P=%68W zk56)0@}RxavLsZ&Rb0l@zG1H*ic2<3=peO~t3EUkW}7%niG*R}4B}h0STKrFROxcL zM^8|KKHbJ5dVK5_!Q~scmcvzU2#W65wjklz7(`6sG*;$E_nzo}&hr4Ea71Nj0o$aR zA%pD{9QtjcR9-$iJ;ii6$Zv3e%LcL-pBnvuB&`9E3=~h{9%U~MJU@B#!MA{CzZivc z+tbW+`^SEJ1S=!TUh-lPb2YL$kN{4FN)ssSDK)%>e>;ce&N~ z%9~8FNg(2}Nbm!HR}x9o-z-y9=HT-Raa{ta`*!SxK_Wv|L%SaeRL&5Ncku?4EreKo zS>-4O^l`&}v8eOFE!ZQ&I2(ZjJ~8Z4szBR1Cl{wg-b6ANjr48d(ttDRkVgpN8<-$C zI;dOyAcWLqz){SS0JlR*wASpM`b!GPnv7gpyVc7)yP|Itdd;O1#4o6bdKM!%RN(qD zOPn1T1!^heSETTWzDT?K!uy3AoX(2?)Hq6Lm0r@=};yOA*|?I zbCZp9Z)V4y*J>B-&g_qTTPRBK59ar(-=NGPg@m%A1Yz_>D3b(8;|wSxtKX~VzXT3n wm>(k?(2OCl0BZ>XIE76nnVH^brmYV*;w((6h&VH*xL=Pb+0}W$byI`?0$9?h=l}o! 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..acbb6cf0da6cb9593c3d35728492810d5e561f88 GIT binary patch literal 6661 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 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..312056bd95177108f537a8ba788b110dc460c110 GIT binary patch literal 6901 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 VCCm&d?prP;yCN^p4W9LT{{s``Cm;X- 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..d9aac7fc6147df9467a61ecfa24e722c58480454 GIT binary patch literal 6247 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 literal 0 HcmV?d00001 diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..35c9b62c83fa710ff594a7eb5c62ddb9271d536a GIT binary patch literal 2486946 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

+;0@GaC|yKx;%>NiGm4NdCH^q`zG1e*+Nr9vL3 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�prJ5gx?mCrRtT=!pn@ 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 bW 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

XV|W z$SlQ&$*RvX-egZ0_XXB~)XX}#uZSnpMqYRnHttk9m%`IXvFL%)nMjYMc%B3eYsHh{ zE>b>EfmgWlX^cgvRs%RVCD(eSeDX#>Niw=ohVpqn4uX`=3-F4RPrAyle4>;W7(%IH z$orV`DTS6>`P57i(MhC$y5yZwK+R86lu+udnnb|we`D{9DWL>nj}n?+2_*#X)=KE* z$ZVIvk5WSMj-iC&vyfJ0l#(Gz*4b4;kx@X#&FlreDM1O%P@{q^a2eib%ib=;8u4`t zt_&gMSoX3hojWY3oz2~}gIr1{PARfx4S?r}0rSeVI zRH{xn2&9No`Fg9Z&R93HDaCtp)7s_2SLi> zH}Q&;MY_tbETVK47(yvw$my7}D20zpSwv!w=pj-PUGhpQiQ2(hY5-DGkFzH#}7Lv;s0+ooT-+qLNDZxgi#Z(OG-Lh9|dcx3t#>D`{ve zHx33H(Dgdps&5}|O~HYi>jU*luyW(Z8#ORd0AHNK%IIp9MFDy+4_WQcx6V?4zZs+x zU65Q9`Y<$*d``1eOuhy$h=mq=>C^@iNj;Xb{8+3Hp7jJrx>7WS zRCA)^e2dM*`PKl{oH}Nrh@D^~GdvF)k5u5820vgT!>o~FK462n+Iukh_4zJ?Im0@? zd~cI;qlv17=UJ~YtHnMwo;@Tkr8^7-p(hH$>zpT`OU}9&UJ#tM4Pg6ag2y;ZA9cQ! zfW;7?!XzU1h>e8U3xo)Dmm%ZM9wOuR@{wWN1U$K)AJnNa>p1tl3w_Ssx$oBk;&iPb z)Ttz)>2u%hzAK>=!%zUgBD1IrGZ{*l(z);0NpbG`d+`eYjLv<>Yi`!4%7? zphu(%Kb1&!TUM8P7-!Z5_TdX*mYt9Fybwwyv z2gWf%{u7l_IRghm|HLHX7z#{c|20?9?HH-pC$y-el9+^1cbSNp_c@d9 zjCss~S$#GO?;`lYR^S8@z4!hAC3oY0ng=Ky2~z|sUe8Z8k?punHStg8*R|UO=$Nj- zN-c41%w4d|q*wHtNqc{Ql8v(Nd7pk8 zqk7>+-`DzeYqK7rbUdDVWPA-)rgcZgD$nt=kf!=1HDo(3sZq*VNV*a&pBQKLZ2nrt zO0@i=%&;S^Ds~RiYmjSA9e-cm0#|Wf=gH#*&LEi~(r`)8B-xju;NJ_t3aF-S@3 zy(>Y$!Wq~8yC#eGKxjlKA-$Zim{g4xpJ-j)(5ZYDKyEL52tk_m!adZw&m2mC`XrUIuP>T0wv5+g6+BqV(ni9x4wfyg33Ud_>i5PT3rf|JO5#7jqL%a|4x{g4q4k!>2 zY9U@xgc@Dtk5I!95kZp+!0TnKjW!aZ5QtcWTC3KMraIb+=@y~JK1qpCqs|!%x8a$~ zUGk5ddwU|(@<*r<0(a{OwH7kh6#S?NHN0a)sNu5^`6a{+$Po7{XE#C(83nwqmzNZw z=Ake$P2A%<<}!RE;*7iviZ7`15)TYS}ro@wKimk!z4cOJ@T) zQyX-@SS4zY$w>-jv$3f*eBk(j* zD$0oO=orrO8Bv2ektQi6;xTBPeb7<(i&7(g0Ix_5P}ZL|#v`QAM{$5kwxtAv_-|Qh zrIR-TN~h6{1hjhBpZ+Zlf>I;?6R$||q^tajCrWxPrwy4OQ#_^MN>MylM+_0sN~D0g zWL`_@tV8htg?pWR|LMUTRIT>Y#&giYS~HT5a{ZN+2gM zBO$?7HnRk#-(YpVJEHO{nKq)rXJX?{CG#A38YvDvQZi#SND5{H8s-WnVKP!KZ-&QQ zxirQhRHyTBU`lTFNV(*VfbwH>qYUNpc{m7CF7L!EQZDH#zjBFETwn+#h#}8o%B2)e zY04$~z9agG6ib&(GZahlS&C9gom7(tcs&JsT}-JY5POu${7NMuaJN<}UxHM27yKxt z67LvFB|Zyj+T9gOJAsb%uQ`4*EB zzqJOa=F~A0MJxv!nc;7+@kk+#IgbZ4#dF8I`G5^(uP^$Eydq^7y9~z8yj?7KRt>~X zxwW6$38(gR+JT5}G9(=4i3FeA+k*kNUtmv+w{-690R@0L(oMTe%Iu|^E`qV@5Ia;M zq)DaIP3^ubPPC1M@N2*}ktI-ur5L4~Vkbqq>G^nte@5x1c+HJKgLj3A^K~XkQjEZO zy6L*JtF2mVeXt%*M5T%k>$lu)RTmiE3a<=ZSR0?JHSujbF>i?k!9y-D!Eq$%K(R#B z!8~op!q>0C_RR400o`NXv+G}_>GPFxZ>t+MRYDgZOWK{IBj5=BvV zDp46_rykX1j%Osr^(k#Nw)6_RMjG?VySou0dm4Ak$WZ z_E@#OvNcehni{W-B? zt@IYb3U)T8$43L$rK(TX0!oopZEb5bCDUyrkeAf;>p$<;K)5UQeJh zg16d@8wLY#%(iYsK#i$72sKltq6}<+d~1@>leGvq=9Sm zKmMkjc!lExIo}HK*(zAOf|2QF6YDNW#4)^0PmRJFREd2&JPgYmc5ZkW``E0u>pN<& z3gQYx_^Y>f1tVj%k(+pjL`erdg!XiEGQxPg`|$R3%`sT6o^ZgFp>zriUQlT3HG;#!YzY`JOzA#G_fxerIchBd>4Qjc0s13)+DQ7 zrDYXFk~M}kZXJ}J)~cxpbK#TMj3}-33xr2emt{d^6`xOhsMUQ#kBQm!DWx5_N%1oT zX_^$Dr4IN^qy(rlTR$zvkTp-N^908NsQ7?9RL-}UPBZUI4ix1WkyQ0&lN|o1tl7vx zAv*o-@5F?bkg&TmQ9j0Wn@kcp_LUINs1|Joy=e0dn}uey`NlMf{jA>hNYSt@%U2?y znzH;!rc{cJjSGTRo>X2yupbLemFDnS2f)e@>?dUq>~R#%9Vve_Ayr8E17eCipKE-# zWTAf^f;5Hxk<_0YB2o+eCyF6u7W%6)8!L*1Xc_SMjx7w&aG^2BsOP}KaBW#LHb)kQ z>ypGUSf*K40(eb`elWmD>PsUvUGSe-v_(aiwrIZtNzD}P`x>GhI?MU{PEW!tAj@y} zCYluIeFuP*A=Mvh4m#1Zm3doz$HiQcTP4wir=n z*&THA4k^|kk=^}uCaFK*LRyY7&H+jN-m>Orj!5c6KMJ||vdC(BF{dBJw-H5!wt)U; zq%c!Jn|>5(g|qSZJSnn(i2k-WwWNsX9{{j2M05r}ion|35z^lzJUaX+_^@QL{5u3` zisgr>135&N7Rz4|W5_I)4|TcU6(f*1cE85N@bZ6fASuU~=71Pp3d8ZUV`F|TF&}e8 z3>#(1w0{wIAhJkde6PC@K08T6_G>~>o-KmcB6XP}ct1nm!#21CKFO093rOIncoRyB z1l|b1%8n`}~q@oNEC8NxV&#{zLScVzJk2#b-s z*^Z~+lZ)?`ESleeAWhMHC-o%n?C-ZIYlCQ9)T`wRkfU*IA_W`QgB+vrl z`cZGA12D591JKF%J2pRX=>mnQ3rAeG_8T3D8`UktgpDT77LbE+(3dm@eL-L z8!pu37|9&awa3evg&dU8i|D>f9kLQ);4_M4c(c1mPSmi0&pn$_#Al1**C3UdqS(~1 zMLS#!zs{2^3y9$vZ<0w7!}kKPGQ@BO4O^mZ?ug)*6CxcV7$24_fJnI1u_TIB|y66sno*+W{bJhqu=zF_o(}x~98gNa=SooiqGC ziboZ9vYb1jw`ei`ujAKK5nItY(W|Gl9q8FN^jde;c{L+FC!JHhz5=NO2P2Cv`n4z5 z5#tD!rC$+8uq>1R4#S7|#8OvN5o);Sl?xS0P z(L|P4tiYkG=vmABB&E0^bo+&nT(5VTRyCv6M5DE%R4Qp?wzOl6d@jxH1G#4uw`9 z+j4^iwX=22SYx8Lra3(c>dKm(jpj{KUy1(lJU3Nq7letvlsjBYO+f;FcjGUZsI|u$ zqpM~*nP(-b^r4MLRn;nA>BAv8fXEGybY6=_Z1k2e7?&HqS?&tB)0%75Ne2ZLDS~&q z)mCS+8(j&lcnwwVX|~ox`OuIUj}+H#Vv(H2wjitWEDbeacDsN!lyZW6d5$!Bk1^aU ztRZwqSNW8=akhauQy_AvW85-C4`NeBwKRg~+P(eGm3w9g2oxKt~3eK~t1YSwH$E!+htF0;NI6c<-KDUQ1dKa8_T)yF>$ zSL}t3Bsp1sykitTRopKJCl9+ZNJ327vk|&l5r9ngJ&4t0fP#0zQy4Er=S*0Ss7gcw zo|9btg^QKXv2GMwn55%-mV|{s>)*5S09uc6qIIS7$sm8y8MwUKtioDTYqk{U5{}IW zO#FP0b)y(sPk`Qt!F>myf~}=#3Duzu|DU}t0h6n$63)`unw_wU%OeO>Vt0qI2nK=( z1i?U5b|tY>>8_;f(OuP4RR`k03=WE*rH<0>=!haNzdGa0ucEmB>bT3ej_dd{Dx(ap z<1&K-|2gOG_r3e--TPj3^XH2*UsHL@dFP&c&bjBF?V89+zOh@jb(e2$LSMAu;Yf_3 z5^pl!?GE50;x=26*d=3dzb8herjH0SU3sdQ^#U%g41X0NDlHcv z>?C4N=5DaRia_l3SB3klh=6;vzbZyS+X;W9zY4Et{wll|qwLV;AjZAK{Q9d1L}l z+McSmI@ioJJGJ)gtsLL8pcy>dJTQEH_G3MnDGZq7_>&$IKYz~Z9&Hkp=Nj!fPIl$F zwudE^W`cO{10EL}vocObG5id4P2fAtMU%0WKkiDL-7L}*mr>*H~ z#(RHns0J{7^ZT^VJtuFA@#vEJ)HF2IhU6v8$b$CfaAE>Pn4pKhsU^w*X(*cWedRgL zeZYB#d&?gUW(1qPjmF?$_U6ZRzSTgZ*ycjHDW3~a!BwGH7I$V&*ZC{V{@BtHS&3&I zcM{(ABe?YuRg_Sz&i1}b%fncLvgwKN`VC{8FLQm=Vd7^k>Q(7+dtWU;5 zt6{f$E@kP_$0W$Atz=cyz&hmx_6v*D)87~V|%WPTZ2LWB`x=kYXl&5*3` zxIX107JM?5WPOuH=L15QtoW_)dj9ZB{9PPFnqAgv-+K^IPXTPqD97nuZO zmkfIS3cpnnHz;~>l$?>T1g^;K7Or&3z;(gB{lN8qkfwe|w5@iX(XEL7MLjWK5kE^7r> z5%VhuMBLwq`Nk5(NSUH%1JwMcsCDq3h&XfO$*DJpu~Q=E&n;s}1yr`cKfhpK4jB7s z9nSSCQhrG&2*t8EX{E4ifb6MAxw%Et_C^6vRixb9wi~RO6)C5+x@V*upJI{nmm%v> zH3$6)kCbE3iEUZ`27YBwq07T1nUQjEt`Ad4W|)U$5(OTvpo<j-kH>MesKGBV*`zMT?>1y%?n`MmJ@QUd{Q9p`)OHN8(8( z#n5wf*u%Uo!vT}?9m4?p1k#b@`@`@{Q&B!UBfgHQ2>C}XsNHS7VvxZRa-hPTgv3vP z4|&GGbIwOv(Ay@U^wN6-y^mJ@yb(kmTnX}k%YFp8|IM0oiL-;1iUhg;)%sR|-(A);)%F#gMt*TFCb%RCwIlCRF?z{J2ElF8Mep!6ZV(B*WH=;aPDv z5u!D2l8sMS3_2|TXHVU8g)`{LHPAC;G;{!9`x)aI(ZvM>ED@^Sm!GoJBU-(TKPG8K za=1*y?s;?k>v)b==}hD=cFd!Wwx9HbsYKBFM@)$q#BQQE9!33>REG46UhN zwk!OBu@Hdum_H2NczTcHsWJLopM;}*;rQ$E`dEidfYn2T+h;maXQJMY;Qy{|^q zifsdw1My~n3SJt;_qank!wj{m7;Fi#?ES$ci7M?*z11UvoyR=6vqYMxsM=cqDo}xJ zfJEdPZ>H|X@<-JMaP+3B!7dp>^kLVB9JYFvuUo~4K1gHp0iio+JxiM6dvFYzdlt2G zj%c+$0e1YwO@ErNv}m>SmBdoz6Rm!eHzoNRs-o3zAQ1VZ)rW91HLAc7@wG7)sTPcs zj7&@W)o?+`s|L6I5@)6)CxeotU$6nDOA_8p{bYVgTFU4kNWer^Tr|eF`0I|3`G^9a zKqXBJ0IJ^>Mwh1et3Uyd2=x*iLz*Z+!6&qnGa6`sQJwYJN~$oH%b%w z>GH#@6t6XF*b{5km_rmV8Y6s8i6guWFk#l;WhFvYQN)V@s-NQE;;k4CNk7*NXB32s zStE^M+%cx*`VtAK7;iT~Ex>rzx{)3FPF+x5S;nvmtOi|ymB)(kGGdtkWvdwXC7~b` z1aHyHvw!{7K63x9tGnUBKX^ea64jS(fL z=P;a+L4_`llw^g!(Q70eJ$yGJUdt*IXRl=xi4&5VZ5n?Cu`U+iCJ=iA+~EOkBH$h! z;Qk5<*%#rD3~=KWEx?WUVhRJIi!(-#===t_QBc5f@$HfV+&LQIv97;{C6N0q!%FxA z(voES*YHbIL;g4)NXhD3=u33H!FpYjZJ=bn|cP`6D+>Ff6hb?a@-_yB}W zUrqt{W4__XK}BNQhgsj6!={E@;$(Q(j&3jE59sl2e$5cL)z%Q?oH_)q5{E~)ZF0pG z{J0!~9pNs$sbP=r&tJ?<4@a?iQ&Bh6;(XJmqHgv`9B;|PqBE^;_UZ^>D zZ4C`|!3cYmF&-f7{KT``1{%f4s{8`e02Q`fikr|Na>lc4hg4~84R0xNaLS$jLVyax zak^;nz7iRYqzUcd6X`YB(=i3%TtZU9n~j$+qnpO8RxTyvY@|1>zx zxMOhL{Us7maotYurKZhLY-Lg2Qq#mUm^RB>I`~bnHhX$Y@hRplU5CHO zTS~vey`|`yU^W!)h%=}lx?^T}OPP!b6J7XAUHf#cK1jTn;V~sdrR@xa9YB^Z<}oD@ zdp)M%9#bOV9_=w*kAik8{E;40yrOwb@m@^cB;20HxSO3{k0}ZYSkw=ehO=`GDWC27u5 zn}*UwFGf17fl!{fxG&G+&Rx*I4-X zrd7D3)TUMZYW%nyK;IpuJ-$DGj?x3PLOGgM*C@hSyKKV&M zf|E#o(oe%L(@)BHP`F7`YW%`kBjt|^i{{=na@Rvvr=%M|2;PL{{$s;@Fgbbht#Q%B8dhpayxRluHSTKG&>fctLaeM=vdrfQsdw z4N${bZUy;AnPHi$Z<6+cv0~QC7+ewWsD_yC97Pi)hjX+>JQN`Nij%j8f>4}{b6E-} z2WWrg95t51r1J0mA zm+!8#oTDUQ!YmiQQP-|q^NsTNGF+pCrZkv=tk)pk#ayEVVy|m7+%-xB+@oEi??5rT z6aGloC|=QAqj)by$%%1C8si3beqEy|C}2sSUXp7xN2i_X=Cp8gF#|s5JI1`uZW=}TP7``C)NE#FCMEDap4-Xv;C2tM2J0l@f-@U zK_w^7+ClCY7&FZ|K$nc!Io=mBk5*0$F&`s3qv_5;Y?Ss9Ot_sVITs_X#P-}QviJIU z!63p@eTm>PJEy15&QcR=Hb3H`f!syD$a%~VL$1^r3Ipb7i_}A&=P&Z0w?#r7r~(gY z86^S__BiCKk)YNCp!3BJr%!>0HZl|i9{vJ;nSlpV-y-gy=b_`uYPUtwlq=ifJ!mXg zpp){49Ugy9b#k&D(PyG&BO04&wQ7w{Bs%6Ai%hSF4f%PYulzik+78kB%GNJN;ujdB z0TRzo4C3_$8pZ5s<%D|;K!v@x;wxO&<~|1Tz7hwgVi4~Js4yI73z*#BiPP>hby+1LCZ@CB;Flxn%Uk9k+ytsrqR0x|Swu2CmrcDpnmI;5& z&|kkOad;{W@v{=4D(CIL0n~zF2&DU5b6ZFlV!!V=#I+FD4Fc3~u9M9la>XFT(+0P# zDq~nh0uTZ#J^FxlN{;Bm;{o>|?o$kWR451)eZVO!g@FU~zKTAWc7nD*2S8QP2h+ea z7&R;UZ~~B|ck}_DV$p{y@E1iN=vR330iAu!ZbDB}1{Fj{imd1Z+G4^q7r_UY?@J3l zu-7tT4}_%Vn~Z;iSQm>u5Qx38hw#_~5pa)=J#0fE+X{bV>;bQ6u?M^tlZO^Jr7`Yd z=Qs9%f&v!wuS$wNRC=dn&rFZQ0kG1HBilXyYsSKQD^ioB{3iINsiFXTK}8^LwxD*$ zdZp0@r)D!+%t;X9B=#-OI7I%5Nee~Tl$0(Sk5I%>T0SZtf^bik9ENzWHSZEz2R9W7 zL%hrSR=3%U$4X1p7V;-O_;vtdsdz$fY#}Zh^7m0|6ul`Hp0I6GEWQUnE(c*JY$tr! zi31A~PlR~6zwSu^pBThf0XC>+I|d;f+J^T|Tr{TV$G*sUc)1yJK89~b9O8>KQiqtO zI#d)ehnKqtyUd@LTTeXaf~FkZxC|#8-S$wVlqINtC(uz?(|vMuFZ~ygI&yUH55G)D zx6l#7*S#{Sx@~v2Cd6z{ahJif!2bE&-RqdUdvvs2>tN;P=qNvJzP_slC(rMI<6^-< zR3EQ*c1L3qwXv(M{QH3S4RJdhNmG(Fg1hI5L+5Q(U~_SZF(8UwqiikwYmM`hYA}cs_>ME>_g%ciw*NxtIGx_J*~tMD`)uzfC^(IgFDe|A8)2I zuSbjU+~L>DT_5vV0=S;69s-C{GUO#RJ|7STd}{HPIEL%t9!-A!7#7zLjnMIxO{${-BbwoJ_p`6Tb3>op?B)57)dH`cOm!qnw_~PqOA;V(Q?kBF^XIt#5VPy?CuO=d&WIObc-f>yu5N6aq5x*nX5LguR zdpTF~lc<<4Gs3ma@?)kxVTeo9_3NHYt zuxnF{gqBopZ)IuCmS11u;FM$X)c_TS<8*T2eI+d#NfRo<$I107`l@4jO$|D6p;jIP zoRxwegTG{B?@t!*CtZXK7`5WXj{($hUewj7aBgnAdi<~KAeWRX1)*)>z_&_pkl(`1JrOP)H`zI%Ino$FnDgi?>SVH zkA&&IR^QIc8e)1h0?n5k(TEj*eh?cfPF@-cLUA(AWhtB-upTJKt7$(JTV<5v)wJ{s zj?Hqs9tBkGo!yI1F~{rK_=_B`^ef!)iarfyPvPDty5+90VDCU4A5PKc4;SN|L;2!OO-Gm}{KKzjmSiGV+VDVmzQWWFP zHO7tZ{5oJ!P{7W9K}il+SNz0u1I*N{g8BTf87plEsYz1afM1$o@>yvUZr5upsC~@! z1$73rm=l-lN$gvm?$-Phljdr*DJlIp9W_!372ZB4lv!R8doq=^_2);t_`rn<#(qZ znQYC>2y8i3GoCZVBQC>A2!cvkkydr zbIocYPSje71XL`y9iWD@+&=GhwKEIsx+X1w117b7jvN!h`lb%_VPjX~9PF1h2Z5aj0t&eXR zO>Nhg_2vTh<^uVqvC{ruq$$bz_u-eOmIBr;mB0EU3uSi_SX;gH)RJ)dn-#w+pTPDku=!Buid$(F*F7E3l; zfcDPD-rH{XyvB3A5Rm z0;x=P6^+%wG^wr%1492P)<+y4m9OX9dQmhi>{xd9b!u~EJ|9IlX z@p3F)MkJYcyoSHxYUpC8|7gx>Ij9R`=?#kgBZJ(qypG zt4kcQ^0>bepu!l*KSQ*kSQ(oO^TxOuS3a2cc0 z^>X|Pm`|Vf9)wd)&Ab}06-(m6ia8Rzm#Qt;3Ti8I=i`O6@^OTq&zhFd%E%F=$V0$D zRM5q=B{d^10ICYQn41ZM@3Vp~#8S(5%rwT(bepZE?kgwmCe~wNmkDGB3cJv+@URPd zHJNpdKC}!v2p3%?r!?bD)3!75x`$XKu!@HN6yH3bz3ugQ)#J*VIg+S~Lyo3i{ zh=6-^;N=<=wg&u>ffu}@1zzx8Og?Dzdc^1?ncu(*3JR{hkju8r1rtQTu={8M-oU%4OtyLC3su<7G<@PRIOeM`MT5QpnK zX8Fo+EcSzA&Qhj`W|5jC<@gKwI$qq%Go3FuB8Ebt5TMT2VF23j!NJ6`GAi+R%sbs9 z(ulGJs3M6%=11yd3-B?+{=Lf@pY)*xEUPM{^fn7>{8qd`bRB@fZZzjw4%TBjyUXA> ztX3T=6t=?jKO5)v3Cy8&y6yBAq@L|Qo;_i=kdY6hMRV+-bVqwJfEAh$(0j!u#B(h5 zdoz&95{V!(EvdI*(6hG?`^TSzY0x+w*m-V7vuPodCX<*j#6f75sbEaM@qmMv!f$oSKe#Zw0xPXmwMFdMhne-L>5f8b9$g$mC+r#U%U zBl`=3Sl70y(-7r~giY37J2qKuw`=XFGg0kC#5nC}W2*&ia<8p-CZe%gt5dBv2DjHH zs=MmVmZ=#^hi=gKM>sG|VY=y?p{zNNCMdhu!A4b6p>$WA$IVx(fJwV_^HH8b;`V&uHe@1nt(`?U7O;uaF z&s4hWCUbDzR}RAe>J8@5sW&ESE$H(+K3eT`S{3{=+Ne&|hN5d`s+0I@_28grmQs~` z&)EH1if9mP*WgMmYQytUwH@t*X3-7#@KCgUrW3J;3Fqi(@R>SXtdXQBJ#veQs+xzF zIc`+qS2^zZEMUvWnv>Vo$2$|Vn+Eypy%NAO*4gJrWHXigo#(o~^G?@z-s`wgiQn(I zlThiC>mexL+#avrmOlN_8EFO$7%C&_&!4$%OSFY}W(zUR7R5DN+|HTqvr9)qYSjzP zMJ!$ilV`-k4@)13X^EYLZ+R%rO8fGbYlAhBb!&S!lSpvkyvEpeBRg{LC1 zXvP~Zs0{$DyR22)(b+v+o9!+}JWQ9=Ep!`>C2q{#N*$Ml89u_(H%5d~nWb#q&GCnzR5K^GRE5Pg=FCNef`4_ki>;C9x_L zi+4y6Y!&mtqB{VqVtaPeBF=_g32S*KI>+pfwz~VM;)&<8K@DU=Nqb*q&~TLgTB2m` zX28CaGl{#m5kN`X+9ax28e4e!~QXQhGBowy1a({)o9pXL>aXgOiedior}>)*Q!j`x088x)lgK! zo$2UQt=+EftZfC;{-WmC)lr?EZu29}tCKt}w;k1Ypjp2=s^Y;|IWErJ`iY|XOSFDMNU zsVi(-{dcG!^hUJ@Cx>C0ZNK+aDFy8G-w;drsHzM*{Sg4>X{X1VajcZL!%Xruu0$BN-Y=l0z}{|X>=qx=_yna{LxfXXPp zpA9azQGQxsl}n3kI2dD9J{BqBvDM8m?1cCAvp8=$kypVtf|6xyA_q*oGNOMHI@QXE zX8PU-3%3#d#Y}Ya8quH2gi_RqmNPk5M)WB;jOY~orVQvBu$s34eWf>lCUznj2DDB@ zn{_Jj9pLWnF0PNS1Ba2}g?BqE72HWdgl!Q)o=NaaR#g1C6hHcb98po!tMY$wBsYe z-(xD2?!aWdQJdW~z|FFUVFK7!6OIfO@q@gFYW!G$h4~73r%XAGi0&KC2N!z_K7O^B zH$G#De3n&Fy-k~E@XOa)HK_W5-7~Yn7^WYF!M2N?+x9_k68jK$p+;QrsRUB&+$6=O z$XDUY0qIG&Zxkooy`>ZGE1+!zSDJ*Y#g7M`+Z;cEI4?e${vo9e2>a2jv@DObB)h7e z0w-3#I_sn3i5|zFITW2SUTcqyw(C1b+tbxCSRCae(eY=V z3Cpg?&m+yegx)h3wnKmH;LiA7>-!5M0gk87M<%4lxgfdt{0H!XtZ+#DHF$t61c;@d zb)DFUd{zQG$U?N+>LohNOptZ_GThpukY7HRSLgCTCX}?y1%+t`(t$oPsYV zw-Vc}4fZo2spsrw0?Wm7;t?jM>axKXmwS>f_Gl+?F~ElTKKW@TV=q)0(WH*x-v&zK zz9^jqAIMZ7C&2?ufpC<3by~|8B@dm(QL?9TF{~4E2D8s*rbi7DzR(xnG(VW0I5Y7b z<&BR&vUvfB1W z;va{C@@GWbwPbpe%xu}jvZ4A~Y$mJ{;%NpBQ!RCY_QXq1_hZJt4x*o)70mw;hf zAD@lS#`S6``~w_bv*bDC#8qbk+sMmJae_qq0x(ftm9r<8-MCPA0cOd524^`nANL^Fwl zej~kC04KOAKbVD&`Nd{Trqg#(@mm3y+DLV|BhD;9xYaH|h>0^Wv58oMB{vDeaC~{< z(mZ;w7(*gk_&MnK0C@V*|Hi4+Gh=SW3p$6}al-H{AA`}t!5CYzdkl1oIr$k$=F=<5 z=CtP&JaP`^I7c(>+IZAyMo`9Ci?-J~9jF3jd9!S93^y9%5D(mm9(=5Y8v_l*%H*np z;I_UR5^f{$Umg)u>9oxg-DKX`!=eBAS2rgNhAI0xTEoVM6{%-$}59*wOrI{_!kjd~A+o z0D0Sl_=moaW1)!qSJX5s?XRiRgn?#chMB%RbA|Z=4uVz~UZ0&%Z;29)i)x*T=D1az zy-Zv+^#A_%>C2UdZ~(Wf5)KnZsNH!4qrNnV{Xh!(Tbu3vIOaUsrPBjgVIeu`(O9iK z1XBcv_q|$~f5%z+kiUS6GqB3CWuSdzz@25gn#kc|&%9Z-$7VvwwM|u}YMC78Gipva z)n&}wFM%LwJ1VEyT480&+*nWFHb9H92^9U$9R`2u_={SM(Xa3pW4NhfiV)KhG;LxN zL8Lt-Qmcm9cA1%Bv;%EH@tmP7#k+|_x{=g(GfsCQbfv9ssHsK1TPTqeOPX$PPHcEi zED>;z%!w6wuPqd}Cj60kuXsgkGKTkJO6);5PK;ikK4iPRV8gb z;JR96w!O}R+O79W&+*J`OYd_rC)sUhq<=f}$QR*1gd{iLW)o?NZZ>(P@6#jE%{7da z9yvqNbgK#Zz@6Qr8_ugvwrg63TYod3K4I~Z9H@gki)23CV|}Z;s~67}O({!fBrUDX z&bD&3cQL$Su7?b<|Ee|E-h>U$y0Qrye+54-Q_AeDt0(5+K%oSasa7lG>*AS2&PK{3 zq)WBy2C;tPNi3iAmLCIbKl>^pM)U&$mPl_|E}C6ADUy7G2%;_<^!Rfh>G7vIpvM80 zIum3`X7{X+Pl{)l+e*7`Q09<-^IT0m!qx`@Y}oty#)wz>qT~@H<|x?#*(J0{m=xpJ z3~HU=i(2uJEW_B|f|;8t(*xC0+`@o4Lb5${K zg8)oyWlIgoB9<&9`#fYW{HHi4>4@~@HgQ&xwmPx>``rjrn#dr6`2)4LmeHbWFr&91 zi>x$iwQ=at*@Vaq1Wk58lw%y@G!!e1sLV{pIhg)>6yarPgmGVukg*%#A-H+A;us56 zjd1}B&CeN5yA3poZT8gBE4u(HIE<9s;4rS7C%Ns#HXv zZ#5nJG>UaJtva0pH7XV#SkmE)G`%!q0N)a~nKZCV1|!avNGWyp)87D8pbgnpiL;;Z zrcyK7e;X#heQ3sAE>MnbQ&!wgo$SQ1ccvOzXm-`n4hFL7vO)0=_66sE zB#QeCThIAm&f|TswDmex#tgafvIAuzmp;B5$Do}?MQc#{X;hq;7R};MJl3At)n**; zYkeV;&Y1R*DsH|cK3)>tcjIkV8Cj24_A^D*U<2o?2^+$2gqt=Sw@h#aVEXrE-fX}@ z+$KT1gh1q1Qpbo*7bq%Ph`qFw+Ig9>BY>Jr@lc6Op|sT>*@)A%72YgKTkZD~2Phx0 z<@2Sq6~{iew&EcogWPGwmXGTTwvPd*er^C=PsLw?*+|PoV~qvunxFUyIEH+Bij&b> zPo2^iGU+U7>nS%!I`veKSF-e!^VLFn>OV>30{A{$Pd!t(I6zNrZ#E}~WS>N)upn!z zgV|fc*ovys8~oIf=-k?l>dYi0VZr8ucKvdrk+i&)i!Yhhm%3~$1l1B5Na?h#Bxeo_ z3~!dC)7maj0duQ#8pl4jP8+}pHL1-m8I-=MFSy=Fl=c~J5smgD978^h#))WYwCWrZ?*J@bE^YT0hc2t?R9$p(IJ1nh_Rq)RX8k^B zSQobmM4wL8eb~iMJ{p+QUb%K20;u_2J9c{iSuAM@&*WyOsI=t~D&)a|{>#E77{%=H zv1Y3UMJ#Z7Ja=M>rK=L#C-DxhS;K(aNAND?iBbk{ul%V)*aC>7&fY!11(lf>kE4yT zYvAV6;s#}>Z|}2Bl1vu+udsh;&x+9`s>j2`7~z52_it&)mDFB7_Q$= zigUe^b>#ZFmi3Uci!Us3W|hoe08qnaUU~P#PTFa$5~HZ+4c@4hF|+~(rS81UX;y~v zonqbRhJsM6i<4Ih>juc6I%e1mcWAEc0H`Vf*o?y&ESh!9F!@Fln>llU@i~?QJd4an zIl%NQJO>z4>e$+k8Cw~25Lsc#9AF-_9F|FZ!cL2N7&c=5mr1Joq_?D!!w9M?Sn$`Gql%9K@BE1|oT-R1@# z1Mx|K+uj}{$^j}-t<}eysA$1d{DK{X?fP#K1>r5zKK=%R*NeUVK^v22r4SkLzYpe^ zkFDC>x6`UN+LP5zb^By(_7*;Y)R#fmYAsawq}7(QS>gM2?HQTD;`4p}J(hnEC%*E} zKsrCZOc**vMgq@#I$ zD4Geqw1n~2xrDS28z=M<8+RGA&T%R*>-#fxBm?F`3DBBs-_!{^9!glHma0U`#Qa<8 zMPOvBr4GC;?h&@udzorUfBC|`FPuvm>+rB_ztj@{N~<`7vWY2!K{-wZ7<4~UOX>V+ z-P76g_TudM`gHbO#`9E!{hH8C@39$EzM&)dzEA`cifI|+u6Glo|j@?2*2QkZ_NrZQ}TPpms`#bdWbn zsnUNU5D8U!ke#cb`W9H~w0ofasN`>=b@H~(%n!ongN%U$Gp}IG{Bs&lA!cSIDTA3g zP6=ktZ(Bh!WM`(;u={I>t2!wM?++xUVuob^BAHvLLvSLkIhAr@VWgW|`) zXZgKKOtB>5oX2K;%#82Y+uJ0>V^DuksOA*-9A~ZRXe>L33Y7a2Wdp;FQ=lbDRnY&Jw7mg;VSW%Mq#hHC<@VgHZ?RA0;&B z5aALURC&Y&4mR6gjT%G!QLi7_e`F*YRsKtSp-G-EAmp1R>+_m%{h{@7w4ap?y_2= z)2c%sUpzML**HT7u^u|7ixZ1rsNDnEHF2mHTuSTDV58f;u-C-#Rs!|r+EM7&QSXe7 zjyMjcflt1A@q&d5@P9-B?Br!JX%GRH)Y~w)*;|M`<4*vAHNFJqD|ZYAqnq@C@mNby z_i>y)sbrEV$2{*Q`&olqzhd!~n_H0{qGB~G-HY4(pOXB!kjb(+L~#;n3-}CFC<2c^ z4S(8cV+XMvydWBmwoNvx*tczZ}HFAZ;@#$SVu=7=@Dxw%!~ErOs78C7SD;+ z>9A1nJFrfSh`R`7s@9&UHwOnVm_h{+RU>vG+71nS$LSwK#^XC`Q{vwm@F}>QfLyI{Fw`~zKlQ{OKyVetwfRyMJe<^AceQSA80ufU~U+$@X^tSO!p=~^j zAC4f;=oX-w#$QZx@1xdKTMXPw7+Htg0GO&6?k+|=%tF0e?3VF{$xX$>tZRG4%oh(inX#EXpu0`H`n7~v~g8$s$DqD}O5pQ+&#dKYX}*#ORG1IQ~q zA(k}%CN9hDn>Uq(b^s~g18Ra{v5}3uPa1`H8|KmON z8R~E!z`LkAOp<2qwc&peQPQ*_-YHodJ`N{a*M@)ao|1%N^*c6z+}iM{j18*fYEp)o zPa3-L1WzW;((`ku3x@&ipnOZU7BT8SN_63xG!+I81>HDA2ScVFT%8+;CNn?aDe{@YAn zcPw>TT0%+SCN_ZF`tQhui6?w+lAlTYWjtr-zFS;m3K-QK>b@71Mfpdw?gJ00q5I(9 z{<<#}h~yPp_x&BRgG=`TC{y>n-;;R?=)U)QPk4szy9a=ksr!&HbFcf}MI=eneR!v2 z-S-s)sq4PG=<5MmLg~J@u>lm(eL(r-HaJE1iRTR6_hT2C0!B55y6=Z&QT|b)`_lHn zEa0PSKXxTk|E2AL-GH1raM>>`9jI;e7&uc4uE6K##wEA}KILcfXK2Bd0IaAMOp<2q z_25DxN}3+TJE=1h!1+wT<6{w|t_L43E{zX)>cOKDHXvimq$bRK($IycxkweP3*+O^ z1EG`Z6q=|2fNIHLqzafm+j$oNLLJ7(;;%j++=uZ!Dbt6N_b|TWGohpfFcSw9sKfZ| z3AzmeIfLR}}hZsbp=i#Gra$fWB&c64X0QEOE@wQ-(apv9kO9k)eLqI*>8 z+uVQIJu>|+?(ALn(7`Tp74-K?0>`!KiSQ2=j=LIO@>>BC6Fn?}Wlprs-j(<*knhx8TpwQt zF>#}fvL1UDEkev|zk>YGt=vYQ*u{oo=c#I0JOlBqD;6vOr~mXIWxBl*MjgKfKHrXc z?i=F5uJ~07b(e}`1}SG~Z)=h8)*?i}J*%|{Pflm7zIB!utV(&7@Q+Ue%T;GY;ySS; za-mFI$1AtAuJ*aM0t%f!l(=8tYsGe#PXQ|p4S)z1h`2#{3;IBN@13hzV z`6vBLSW*(_49{rFePc)U7;7vtc|KqRq)J*2x1h#{;RV`d^{=GmNG3vBNsHi$+3pdx zc*$F7B`!Alk|=$sML8KL!*vQW8gSDky)w1=#v0P31=~2wY2+}CEv`8}kUcwje#Lok zj!>uGv}>QW>joD+&6;mXuml(3aPyR!s5E*LSxBQ-ymWxDyt%oJz~d*wA1pQLZ+^Xv zRd;KzS@Y2W>(}MZvp*A4>am2SvIA|P)q{f0xqbAoS@7&XzC`c#8U5XaJF6_}4@+@+NneamhFR{rE)c^w}O0 z(@A2InJ-M-tNacGsk=)5im>pRHx5v_O0Q=F$sJuA4%2S5Gx2=aSmEw*kuzZQoSe_K z$$58KHynu$(c&+}E8P&_@)_SzrInVcifbNA>}=diw# zKoe!=>fIba1Y^G${_W+#{bg~2DGzQY!E83E#D~JS(>=H;dRlsNQ}3mDbnWe%W>DH5 z-NF9=jkgb=BR#r^8@m$f(IxYBuSYlBqe}$bLp{34Uf{$PghDLdGi6!wd z>Cwe2nn#y7lq7B$axeX&jS+6r9&H}olY6;kl}A^YUbbiVv|b=|&#nNH^zfd9#PTqA z^Lcnr0H~fGUYxa_9$u6I;b%*FcoX`TL`Jw@3VV1@O?oexfvh>tdb%&43BxSt>AldK zxV=2RI$2HkWvHk3%p|Q`uBe_Qs~0EPj?zhXmd1%D$=n`aT!CRR{o2DJWL6^0Dfs_S_D}6${YGZ3u^b-rTL0*8%j=Nwl9MdEXwZ}G`JFU%@grU zmDN$D-iR0jtIk0}sji;wx~QDyWwps79SrdS@Wr%%U?o1pywlx>&|;o1;q9ozkFlOQ zIJtip53?k}-#nAwelVqK{ap_9n|yaG2}!lV!+BmiWW?apsPI0X)?jz!G8#In5ih zZ*R)JP3{8@(cp`FJqZwB0UxSn*$&Tu2N)lG8DM+b4jVDFd>;JaewK43u+J9&7XK2! z+{!_oDM8wNYE8(m;lVT^_UT);0^-Chz(3o4%qY`4ZLO0F-|^0Nm%xMd@!9yJFihne z#07?<{VONhl4tFWX#7?HCSnzpcp)4k5if#24uM_@w^AL6ctSPA$d}{$h+n({fBg^s z!hhZj=03if;R;(KJL;t~anzdyX3M(0YRS&FCs%MgCgcMTy~ z{Gg6)S`31^?Z;8v8A8 zhH*yC9mE|Jr2|gdUW-sMV4@5c$mHSU)>`LWtxhkIFzVRxQvoWFg1)*as+eI2ys6Zc z#&)su=tTSQ>Lo-oF?#kLe$ANnXSqJ*u+g$sVRbC|MKn4e5PCGKyJ&j1)f4Gf6`YE3 zX`sjXA{SqbW6;iIq*a2NoA7lEV@*sqakAUgT6mR7DfqWRrFvhe#F5E8r;9-XOg!m| zf$8)6g6Xw|<}t>Iu%=x??$53cKdmr8Ys=m<4cSiTs)tNc9<}G86-_{r0-vUtm zEN5M2edqY?h39x7czN|`Jp9|B(mj2l5}#qx+x7|WcrRUTv&Dsue>Rcq@yg?SEN;et zov;!%dPa@_*O)3Z^ki?g;2>11b2I|{0zVvtIw?IO5FW>=EW0@M7z%OKAlxrp^X9XF zag>$mb3Z^0H+}ZKkn9&~&nb-vSaiJg-1LG8y!oUH_SRKn??iIC-K>$>BjJD|=F&H)L7;UoZ)CnNz9-fK2$ueNa zXm3OIqhqw`SNJj7=*3|MJ^I5l=pcOST99oRcZP}MvRyuSktvaSEHDb*^Xo|rEciE5QDQjjDYf0a_LB3gU4+MQYO z{Nz7yMa$6=Xd4@!l>5e_|7L3}(sv(V)2R6D8!f2u8}Ncimnc7=`fOm1Zc4R^AW2HK zinx^)N43%SDIgIu=`J7Ho?GMOevYb*@d!g5aKcD! z468`+N2^nB*M{&XRF+s1@u-DKDPV=7)lfev5ouKi zWugfKQCjK%K)S!>PWH!3D0dQq3yaA56Hmx{tjM)k?o{309;JASta&kCS)_H@K4hp;b;A)_@VYRG~$e13{C*gx0 z%Bw&H)$zmuK30&*l0Z||aD5^+-nkG#?l~bjjQ^JQN zzu8LmCS)o-CU$TVPgC2z$de5VXxkTfvrLAzeFXsX)VA??I9BbpC%FJ3H5bko-1(`(2Tdw+NptWD1D3MRD8YS9$w^+{P z9F?n9y2qu~s|r=6%;)af%m-6+n%2?q_dt5=X!r;EuV=@?f6tt^Tm{0a-ZhirHlJ1E z*TZc0tas(af@sf!)TK~QHCFf1>RoLIu;w_h>s^=r8f5$xfR3zpMcmjGzmTD7Mn-Om zy-}d>C=d~FkBkB_)`#RLWVvdLUP<`JJ@^mV!H`%Ixll%k@QPONN*qcOw-~vXevy9@ zeXV_n6&31W=u_{?rMg(XD+iLScU_Cb@^DV{@<~cpT)1%7de*z547lrE6Z%%U zM$71Em|5>CW~oZsl)@gU5TqE0);}zx z9##<3WE-s>Rz6@b%R8)Tl?XeSrAR&O+pKT(_719gSb=@d__pFEcBK6#NEb^K#cGaz z!#AZ}H>mVM3-jJo3NMefsT6+zKhE~+FqHWzkNvVI0es41KM$}yO$~Q>>}Lu9bCk#S zn2@$u>EI@^EkujMl?!=o)&NRa2 zFYe4!2zaLJGY(@TYpbdXJ5Q&P`GC-a4lv-$?dudQ;)ASsty4K$j_$YNt@9}fkgbTiIYDZCmW zbgD+ov>!DM8~|0-h?%(=YA#G`lUx^r!vmv-zj6m#-6NbkLiGX`#oKRGY zE&MHT*~1`JG8Twev}!TD7n3s;of9$oGWrk!^r#l&{)gQqdH#=c@V;K&q|`yVmbY)!qy+`&*qA_mW}zSZ5)i_JouUP&@$gbvcuSB)4#+5?6} zZnXy0n}FfL1e<{I7X0`;2NT+!1n>zaGy%4s)tyMVQ@u8?E&$9COz1Ho^Ab!Lg<+~- z0xofU%d3J3HrkSB69)W709JA^0r6wOgty=?{HF*e9FmmXiXBzZSf1J5Pe&+nN%V>; zJoOx(G+-HP5G89zn+tkjXog<7%NSO%m7d2K=2+db>3N$mj(H0<++(0ojGW4AcsD?W zovPwV&{p#qY`C|?QL13WmjS9X*nl^c_-TYKH`wq~*Jm7dO1@yjeKay35W2s~H`s7L zjzM!bk^V~$Hs~a`gAHzqJA)0*R}u=}C)n@>Z|WtSuP8tT9ap z|8;dJ2<3mp2`hzN1LRKmU(F>|Q@H_9mH*YWqYSpp^1srg=kUMcbIkubhKxu4SNaw1 ze?=DvGcs`hok52#-`VT_S28t+!PPP>%(;XkHlIHr(<4hLO5+rWdK%(f%p*%6_IhN) zJ+ef=J=!BXi6T~qKhh(MS2T|--iuLcV%*`yxFMWhk1Prb*qE=&^2jFpcO7b;Ha}Hs zPt=>??YjH(OBSH{k_Rd;L3To*yQ!A2iPi(mgzJxEH^Z=FGK`?|m+m za#Qk2bmujTDMDKGr)}3gKx%IL@RRF%o@*6|zi8E95)7o+K91w43#PCYRaB*B!*Jxr z_G%k?RUs{gqybCZn)#%`xL>eX%+0t+5aGkh+7>b|N&GR%s=Q^FIXtUn7Xptz4u8^G zc3rxWT5v^U)kf58Ozw^*s?*bOxJY#e9Gelrt-32K_(9#PI z(5W|S(e~y{W4ubekLryZ^Q!=ur*4ifz_Dsg#12hpW2E!^>EauSKui~>H)q5rN>;pg zB1m2F-auFcC=aE0pU(!8Tk#%sVGgsC?P9Z@G}PkVE>Z=IjIU7-{6Q5blOxi!+Imw;|XgKx@CKR3bk~H3YNwcd?wwIco^EDz(p-Vb0HXqpXKW zH)-9!{seT!?qB~!|Ml$t^+4t%d3OKGB(Kd>mH2j;+Vt*UN#j|BfKu%0YHFgs?LOB0 z2zKwU6~6~@eia}idw(Hj?22C~QuY2Kuf^U7Qg{T32)IW^kQn1byDwz9YK-np_{Ycb zAF}rsu_SV#j4t67t@jskD9PJWmq>FYwE< zb6=wdlyI((R@nxa-TLd)UJ&lP@pc#tNf&8bpCqs`Mcqii^+Q9YB5uMj#T7sRj@w9 zzcwUE<%os#q}W7piq%S|*ylAqG%4op`-Q77gcxqfiZy%m{c^g?j9snsDPuoyGZ2U= zfg9nMmeLZiA5h`gn=Gi^i_3}}Fh}Z~l=K|SzU3<8VMZ!+`En9EE!JyOM#i>03U`J% zVu-{=*3P!(>VC{hv-)2o!q=Uo*&Xe;>*4Z*xF~{Y|AK zm;!niSzNI~J}91H?mX?fL6}GSNSKG%ly)r?7j7_7gMS++?e_-|DzcVyE|jl>4^*>k z=9j_)OoBN|w_7Ng`PNL9C?mKv-swcFyRtnqjfpd(?Wt<3bInY%Q)|!O$|Fc; zEj019T^MmjHbz2ysVX^#h%FZjn3$GIY){!DyJZbtFlckKFKs*~?F4`g>eXiTrEJ+1 zSTjBs7Y*dj_C@Xr=fv?DdWPgEhFqyL6b8&u$Jk@dD!Y#H$WgWjX|J`d0@V}o9?%Oa zvVyicr>ZJrw6T_}dV)5005FjPma`{f(#vPGL`3vh6=M_m2LCCl7?%q}Rm5m`KSa$A zV0z|l2t(>HVBXyQ5U)H9gnuJTF2nUdFu`U}CfG!m;#qr`bymlO8$4=Ht`X6-bvSUZ zJ`M>y;3khbQ|qW~R2+TJ^?GmfnV` zKRa5@DR{63ow0Zp&tSDx!wjJDk?1@)<#MVC|75g`n$w6@8~Z%&fYdpeG<1ABg2dVx zOfIV86N3|-&UAbI+O<0Y=b7yzW6i0xjrQ2YWV6QY&PXQERY)0JdH7yZ0teNb_ucq< zo0z8do^dJ2_>?=%oy^faXTj9RIi5FE^$jje96O!VWuKJGOshT{{}q7a%H?Dj2@_5n zEr=v7^NWCK33JgUj z8VJCbhoV#TODDl2L(!A6cEWr;JNahPU8B{V9M2 zR}H-25x6A2$VQGUK?LKDc2vhe!_z9W0a;??JiNfB9JPBL{ zDofz|d7izs3P4kl#Ynp|xk`FPm`dKugN&Sed2mj7kg0g4CtnMC(l0!q_EhmTpi^(1 zcvW}l^zP0?voRaD;ld5V9IV1WAa(pTsENrfw9KKJ=cg_6dyN&Mmyh%{DZ*rw*r7c{14 zI+Q;y%#mc9XVbmra-e;_M4G9-3!ed~$^@yHCJ5eCn+I*0^7ma>Lc|ecXQmFnW>`Bv zbbZRl+~U?w6{eiA`}b&cJ|Oh8XW!ln|B7SKO3i84mfm}TlYP6%oZUr3kx44NV9@Cg zeW4Ra$4ZQsA`#noE+JkwQRUYRY?uAf!9YG!l9<&2fa>S&)n_&SEs!vO3xRkAj-k-3 z4xmyniN!7%w0c5cXyrSz%ee9~(Un&Xj8Etb#=~s_BJq!I5Xur}I+`l-dbNscUa~yvx zA+%dfq5WxJ$i$~Ob$!Qs>5ALAzV~?LNcYNSu!Iv#q2+#?H%k;=?mwu4J(UZfH$fE| z63`NViKys~uAQhsI0jdF;q;3zT%*E55R);YIU^KP;+5Zn9mv?EJ_v9!it!F^(??`| zI2hxT&1-9|;qf}eblPBiK)|U|8`(KB$eSVTma(qY8Fq%2$zUuo+I3?l5BigXhkTY( zJ`Kv=*bksOH}H5foo#b3P0PhxnMzDuHpY0I>w^JfRNMGtXpBA}idY>L978^tG#30fs*aCS7#nm41rE$&v0$ks0Xj;E zU($V;NSk4s4|Um?m#rmAsM12up?PuadhljJEwmU&E-1jhLRXBDwOpU^Q5>9IleI5#oc$$q(S-S$ z66gP5z=C--+?Wz6*ZPXF!Lm-^g_Pvw-Yn}-k^xw}T)Knq3H2zcR;U=z@vA@N15w8W zzJocXjyHWo(z9KOhs-vYng%-$QUvk7xknXz?I9ogXc&su*>oFs zjOls&e>o=I$9CbgRYGtSKMQ25S;)l)H?s2Pytr!Jg#}Atn&c_IU3e~risk7MJ?MQ0IF(vZYE$GD|=SUa|%-D zXnBs$v6kmoBg0e6bNUtD@*Im@7)7vhF@p}G3{q7@^D@Ommvd*mr08mq+QEVlk-6(Y zx>>}G(wTyfnj{c=+fszLr62l&QIj1Mq-)@hY(0Tjw8rLmFGksjvF3w{G5gSP z!sDn(6cq3Q-&<0#xuYAHu_JOkW2|~_LOPNBz7~FIiX^}yQHADju%LFI)vGKxZ(DTi zD>Nr%=EvZddKQ^GNSsz;Zqr0oDS4Eb??XuSIt?v?ILbNwg!b`_(qQqark2_1ptz;Uz zGTgdtS4LX5ne&kqQX5?HGfx8e6o=mju>E#0D$APN%c^qqM+Ja6>LPng$b8gAejP@s z>LPJj;e=3ikv7(nWfR8o-2klIx=2Ki)kUuSZ}^4(6m^kHnPwGf@VqKgV{vBKegq-N zl?j&4+*Og?+J){8jS=2!Yr$*iHV(dkddsNk85ulhrqu#h0W|A}uKnmvn{G9s!lf;m z@$Z&CHMYNU-wB1NldNEEmvVqoN$AMn(;%mygC(ux z`(a@|EqX_uqRD2vGZI}f0jD!)r!HVi`l*@8PJI|shQ=laRfQ}d1O6olG-50fac$IU zz+MnmgcxJ1wyWNT2KM7r?OMC8Qv?5$a>gcV7541W(#o=D4$+Xx5rezSkjnUY1WD`v zQYJxb;DXKlF_Dw zP(GfgKtu9#biI-NOnC;v^_z_O=QXUhmN;nT6n+jsg<+D=EsCrhXS|uZaJa)mR@QDe zPdaSN^%=)TBDFr7Gp-ixr;+)9&|^Nn1w$PigXZogb0)oDh?6`)DPSAHC2T$x;}t_^ zytFTr;t1u=BQvvJjUADB%fS8izTp1)LbDvd7+&`%AbK;7!E2UDuo5{PE>gH-AWl(C z80q<12r%V-xi|H=m??)pYR!TU|Fa21pO57IXBW+VGz1^LS~I>1P{Y@Z$6d7XlJiF| zea^EsUILO+!*?nLcTitY>;hzge47QWm6(|c)A!BW#NW9Z1NU@0xgIfAA591E6SfZR&K zQu-AhEXBwMTNcp=uWiU|>UOz1UkjF!?^w9TxP2-f(|Vfl#~uVf2B`O6(SI0MOzdKx zCL}apP5i$Qt73st0z|7MzR-di--H)P+4b+-=fhYtN#opSBu4kp zWT$()o))CF5$|5qYeuzjBu-sMFp?$)Y0#hZp6>t>b3=rm_uLQM#Yv1Np+H{kv!0LS zgh|lHikoCSXE5sDSuEvdR3wD8V#g^9bIi}ldYfcTe$KNwH0zva1RmcBe;~UwG3GbI z>9wMjCa(}eo`^1C?R(o%8&4LgMQ~z8t=f_Wj8O%Ai`Dwh3D$%Nx)Kdy_V0MDQ-#h7 zn9V9HjNrV~8XQF;`YKK#_-1P-^|TxwWRDH+g6?%|j}b7byP8UtXWcHlc+l>gplWW; zK7r)ZG^U)zMDNH$Q^#m(Hpept-~5y7i#`fY^@#iefa6kjvg{FwqY}Q>$M={9134!- zY|AvOi8Dth!Or|hZIhh=&7wzY|F{f_a-`Lf+9sN?tx!uw|BuwRKi++AFSVb0A@?{? zdrSI(+SVD`kh^}-c^fan0z^FMI_pSm{W&Q)kH!PBA7KL2_XDx{clvrD_Ih~^D(_i* z23rD!appb_TXw%pI0n0wyg=nN+sCUO`)AO+dY6^d12T@sr_%JZLt7R&VD%XIlwSx_ zrMuwfz;My617My9tafd?*mc+{uCZ(?#YTW1eBE~?A&jjj5UE%UVL$!Y>(%D!iqECa zUiflyE`lV(om)qbC0rcrkQKmF2d*B;hLiumRlUQxrT!$plRNmRtS60?_evM30!GGD zXXcC@E-Pya0@y;GLVXyU#S%`TUMrOwy3veNs8ROtV$L(DpO^=dWEopU{uT0st|C*? zKwsd=Hw6^r4c^n7p&(xhz&sUXd^V0%JArzowUCk1lN)k#trB+=ahOU>KYbdXC|Mc4 z2|?=0a2H__pfZ#)Y_oynR)$AjsOL7OT6m-iGoCXP;rm@=3K$jNg8UIT2s)YGR~DH{ zP*?#V)XCG#e)Iw1K6(1jWb?YHocHAEKV?G6bu_X%dD`9v#d0R+?Br?3q0*WS)_r{X zxzl2)nAJ|5{tYl5o;v+o`mg7y(?9X%+C)$uTAQIN@n6HVrk^@(Tdkrx zFJaE6pEzy1thH^ned6?@{{iH$14QJB(})$j;uqXhCr;C*es9DoJYq!z+#@4ajOihI ziY!-+(a{S3xD)>&Pn;%}L@t!kEWDzfI87W%vi1l_Z%n_)WsC0PKE$;OojAR&*Ll(U ziPNCo?DM8i>Gi&O-ZVf+o;Lj?6mpLZf7T8Umw%@1Dgf1QZy)1)^*n7Fx!---bVA1} z7h)NwO`n`RLYW!FB2L)zv^Tq>wOvzn)Gs?G>xk+c;2teifMbCG_6;iYL=0)cXd2t*#3V7#9_j}8-8ht zF)ph#&7R~es)E1QTTsg={#B!#o8n*Q?{k*_0y=QQw1dQHab=q(D(-cFdAg{qL#V`u zn0LA>Ia1i5aEP5Rt$B>?Q=|{DHtW*sLA%4mU4t*)X3e0)*1;D=3V{FC`d0VSUZEE@ zFgigR*&;jQExkKRXP z3Nh3DIV1Y>o<#5|1O5!a_B0#ZXGDLJfc5K)=pXly3_mEJ4E7E)E1s-&v5so!9=ut0 zHT2=hi;}8^wsDrSo1n}a0GLQ0$$3Vsy(c$Lh(+XBCG>s| z!!P`&sDyT%5Ua^Lv-)mF7-Xg6LJjhtzZUv^86gpsm~!H|c*Y+)+YpOgubHWix9XE{ zsB5b_Nr(Q`+9T1qP3SR*wb1-LYAD0q0mranM>XELJF0d7&h{BN3>FX65%_`* zp8+dddQ(*_DlT}AcloxGgZ_U*-dHYH;&jVND`s8s5K~{*M#gFf8dw9X%}*t0#XzGN z@l;jMu>ciPOO$+}EIBJdOE`V*Kw|F-9mUn7Tr}SabLW&u7ga3!RDcSUAk#2WEQ&W% z`8a>EXx_8Pu5^9MVR&YFBUHiYWi&b;5PEKbZ^7tuaSU21A!+^ef>E99b}6Bo>NHDf zEk&KLB-Xgz^&ZNXbA~td_~NThoq7s^$bah80jlJ>htTA$vF_rel%$K5*xbU#l`b}T zGxd}C#U@XU^&PIy`0zWQF(oo@rjhx8&_yPmg4aE&Z{LPv$R{#7$!(EwQ`{*s&Q}VF z%!|CK=Mb3yEL79aCx>F8YJhRQ^b7UyfvD!*s|ZA&Yk=>AkEF_)4+nG9m9_A%05!k0 zU?;#2Y;HDcVlVENd16iWtYJO=v5X-V5XvscKc86sj%GQ4+G?HobtnkMt~g<(uxo(a zsj^Gcg4Rse0H~_$(%b?XY?)PdNt!rE*(E;5$}ZPD0>7y2l75AkUE)@i?J3avnL!8P zNELAuSBF}Mzg0xQQ_C(132otzUxrwbA1$~)ErHk@#10Q)69M=ugWXOW!RiM3tH=Xt>x@pD>odEl4Ah-OJ&Zra%JL z85N#-js>;5xmUm;U#$mbL(WNX>S+8@kI+;qank}*HZ`PQwDhjDiI9`Q4T-x3C){Yw znZ(k;2}J@@*IVD}Ufhd6`~p&xHLD^yb~uXV92>MrNke{xg=BAngomPRg2XS!k2^zA z)|R|a-DuzLNdTWP)Exl3v@q103IKD&UwTZ)+{a&D31d|87hFR4UP{GZY@8*-CXC{1 z0a%&w7etQ5U%rmN@Sh_7lHQ3{V{c}@?#B1zI^-378FOZ9_p1->oP5zx&i`VNr`R&h z;~afdxok?mW#Bw-QH}=VZ<`7M3{P+^0p_!xcr&M1fNw zAU~7sj5~(ry{JU?Q|jXx05x2Fm|;w3>rv+R#OSD5!n(bTA?e}}4*|sdv4}3mKc7H6 z4`BOADmRRj+w-bW5Q<%K!b)M+0J&3cPjgAtw0rf|MU?S0J?o&uRl4<-^PNzBeUa?Mdh_KHVl zlh$eOuw?r-9J48ou7`}#?z7O;Ebh_f+k}C=p~lHukeTCzDJuHT96@2wA!8ZC$3w6Ms=psY|l(hRa?8yRLbF|!37KS^Ok;?-h%8Z=sP%F z9jlFYAW?fL8lS07ZdGl`pe4@~e9G!bb`@)Oc->I6t2sG?uTfUtP&9Sj?&rhbdaVI} zTaBFviQY%k7W$b@Rj;m%;tlF_1UJu~sZYY0N|=}4Vw+^V3kNT?s=K4@)i$(9Yyt|f zmmE3!9F@~fNw@UY<%B?6iN~X{2ij@C(;yms?}5g@)7Ktom&iUmtY*#V>4RL!F0-ya zIB{DzcWk)|ei5r}Azp)jA+v4Sxvz!Xq&C&F)N%d%V{&^ni6TS0KYW>$XPpwm+ z_szQnB3i zqxI%!sY=VVN%39Xtd@&kfX{-3F5(*yBnyr*FTiDlpU+fs+e-Bax|j_ycaNaMc+HQc zm?is@^Ud{;VI92EMWBH3@YqfXZPM~F#>>khd;l}3Hfhgfb5}x}w5z02#f37VQt={F zs9VI+3)+*dy;8lh)ffJW%P;;17Se3xn$c1Xr-6M{a+a-F??(R76>CZ^!$&-Mtbkhm zpf^iosMXH^Fi*7_{{@cK(Nay2bG{VmKM--4A|0v-9uh2+VZNC<6~UCOQ@@QMb)EWm zgld2eQabfLY_z#`s%D}}ZYMpe-!OFNFI-l^R^a#*teM zJ~Q8Dd>h}5Z&TaxZL}ZXMjP^Nd`G@bZprzv1jpqAZ<6{P7pdcwN1N`A6%sEgj-PPs0@1g&C_Emk4H;*SKLiJV6oCur!D)Cn#p3=LoDvWVd;HU?EtM7 zJFxqzei_Cee+C0PaSPnNuq z3wx>avNE^=`>FyRg&k!$upPlKW2bci5Qho>Iq*wM0S#bLmFje!1+|R6s%n&TQo4E! zvrL`EtALKxS5+aHnnh*PMEb-$%2(HMq|gU2B$58`;wQ`Y>-u{gM#8n&7! zlO?>=)h0{)7x;0uL5D%uT~}AS*b+ir1cb#iyn$R3| z_EzpvI%}bj4TiDpvdGt{mjml5XoHwc#TGF^gGy}k)&M>vZZoc8mkbL1(U(G3I4Q)j ze}F;(igSj{KPOWm7l_ZIl371SZn8`ivgG_s*Chr0@tZ9 zChjRXW2!C&HqO!(Nl<1SfQi)bfG*OAn9)TVkz-v9o`$T1{}f#eTwSC!+l8&ZI}ir> zByd{-_DudR(l1KSC{y7p(LH*|Y#lumb!u?7`9y8J)oct6VhZm>?K=K%ILmyhK0ID; zk3m{*jbcZY9nf=nHOl}U#$;nk>y4T-o#~m5WlcXya5A*w(|zSUE$+bCj^}*%^nCWV z%o$^xYhVqGF+V+@w-{&?+cv9m=H~!Z$mLhkfSm8_hEPJ!=c8~}5V4-m*aV%2FMD*d zHS4A+I?OH^{B>=KBvP#u+5i=ZLLW`Ef5w|iYiP5Qzm-DX_Rn3{ryM)rEK^XmQ@E8z z=L15|p7w30@Nyi3Ry|JYI=!6&C%fHvVgQ-OvcKq(!3l5g3#~XxR))PilqR-um9cqa zA1|*O7=N%Y82@9T*^Tdj*YkG=i0{TRc+D;emEA1EEmQP(T61sbD+$vhU!4}y{L|jl zKR}tI{58HahjjOmn8KS=C~7fz3bgyIuh3?^s%g^IN*~ z4FgoCNrE?1Kbc?p29S(`4BW{I7LxRCjq#h(lBZuuunX#G#gfYUPE_3cnmcJ`i=_#^nT} z&j)UNr$o6@u9|NG)cmd*yAMdg12_Joj3E_}^OOTOGJFUB9?J15<>{xPAQZdegq6as z0dl80&zbH^ZT}YlRdt>-z2yd5W_6w;heD3dbNC$VJokj9@QXUn(Xa5%bLiD)+j>lk z$)JOA;0E}N^BlN=u4R@eBU7VO58NOmwCzBA1!6@h6u}2>5Qx3m&EeV2M8G{VyICB# zQ9&U(7XHW#X1tJ z&Yq1lBH7&pzcdBnW9o8)MCC1RwxE`A;D#9CoMbI#AGiUiK+a++ant&~+0>9BWRHx+ zi*Rx)yuZ?hOItILp2!+Kh-5`-wX^|GAY&aL#82q@AbvvU2m0BkY{nUD*5x=Iyi_Ec z@fzz}UPpEyEA_}`WU?gF0PS4Hd`EV?&_c2|LBjJGZGyx%;m73w>^#P&m&8g!-z2jf z_tn3k9%QZTgo024=|<@7Y#an&6iFdNo`+Z zWANpvANr!?!BZS1o2T+7Nj~6b)1GLn^z9@Nc6i3PCDAP4V#7a5xH1b8PI6pCb`^!%&u;C?{T5fh4z-Pp59*&|* zhI)F6FM&Lm>69>Ldb%%49?Zm13S*|rd=V?oObp+CGm|jk1-B%1(*QPi6SoC3;U$Ba z8omVbV5T^XnXdOm$%C0VN@2|O5?{oMGZVwN-^?U7fr4AomI_Q3_+GPxvBMoS7KDr7}|(Fh?ywkNxW0*8UD}MQ zyP9=u%UvC>Lrd-{$V(WCs*{sZXQCF3wPwcZkk5e03ei}#5pAzUJL|h@4MK&;v*#Qer z6*2$@qKRHtdS}fN0O83s81OkIQcLQg^QEnb<%F=(k~WM8BgujoX#Q_b8occz;4c;&d9TxxKe6K0^gV+!eF?-@zt znmv<11O(hD|(> zC^N&Gsh=!cPVaGjC}3<#PVc6%`GC;nG`*&Ioa#ik<l*D<(R8!j*-^i4WN_nktD{xC<2BvUw?!C?mUnS)v}#EG6Kv^K ztjt=xk0(5=a4O1) z>en`>h(1_>W5}lubduZpz)f+dKIrkvI|HQQz8h~xd4QgZrbNJXB@=izArw7I=<&*dwpK8u&-r#C={wb%_JvJ@ z$D_+KO#09%X4vU0sArf^FDa2nmGs?AbaF@^-kbyJ`&-v%d_*U)Cf`mY^8ryr`tHCn zQIf&;dX zYXCvn@|bV~f4fAkRr2_CqMSn>@#Y-J;{&eG_y|)%9{-(2<^!ULJU)nH$S03F$!&Rb zQ`{+!JziO5uZB^QGY!4(gjYyHzvev~4hapwLe)@S7-}P{qBL}>7c5FUjX-$RP%gWe z4km7!IznDGrtgG7hs^p&0;jzSB@6@9{Go(I?IZ?ECGwXaW;TUbzGe;HU$aI&LA;*Q zpK4=?W4jEnU@q6El?YYUKb{Ft{kG_w=!(^l=yT0#`!H6EI=iQ>#Bbw{!EzHN5>T;R z4WNdz+=1+TZs<~SIXj+PFjvLx-(f12UNpB1HGrOvpBJcPX+RFc4MSY=*zJ zNK61!RoiUl{}?iyRohHaiX64g_#CTk{v7fi)i%?w@Y?20n6Y%%36+8dl zg4(@g?L>2`wzf6XXw+J3uWh!jUdsj|{xjYjYp-oXY;df$Hpg*%b5ikqoIGE*$5Acr zb9vKhpKapElv$73=K~aKxF_jT_3~r)@neo6)yqd%-|Ak`i)AyOR5u1)UK zJO}SndAtE&`)x`y%4VNZ0GK0FzsF?EeWv~}j8SFk<6^@td6lVe<1CpqVMDJ3V8T=^ zqia7R$1?RB_zV9jGWGY7Vp&-|%TZnlCt!dvuJJcBc@M>x% zBk?=0`z?JRjeTCXb0i6|&zF z3^S)(rM%mI>eJEYbDXWPd1h*RtrazQL{MAQsgKpCp(Y55l6cQl>6=fcu;*L$zgZ$Z zRCw=RfGX5WA_Wd_D#fo&f!jrDcjy<6$*+O$1kU|+dQgAv`c%Mdt2DTu(dc|Y=#EC; z^z{dD44Ma)7TxspbxwAhTKUdiShTNWT6_k|*L+1Qj#6LFURc=|j1L5;e#WXkyYa&? zT^>o#hvFE#W|x@V4&b_Fipd6~4Blpyxb=7?>Zy5*y^|AK;JU;Xjjwo1TEgRvs=1)Y z`@;mHPl3}5OJriTAYA}Z!xyB-ZEwyr#;dJ5l?h46Z$HMY~Enl()_>Lv98tsm>)7qU`&&*1e!NEWPJB+ch*Te)8 z2nhlHK!89v5)#5?Fp!WyxWOR~U@minBL@Wk-+NWvRj<0MyQ{lr*66c7dv>O)`}M0= zuU@@+?^ji=R&}3-C^1v22M-OYC(Xp_fGXl{X0=2KsPyVK8&xq{98NvLtQk{jD}_QT zeIxMYW?mvHjg8xHm1b#J7ENI#On|rBnjpuBqE!1OKsCQ=FGIZsEe`UscAtX`XLviS z*dLcsu>zw;H)Jd0(D7>0m>gnP$;VgaC82-?*m9-lZH^A8l8<~MqPd?rsH)^6k7h9a zOiDhIw~!(Ei1&%)<3FSBQSy<#Dva2yZD?w^$mINbCn`$a%{?k^uMX?BiFkD}50@!t5hn(Xx+N=2LzLW2ioc zT<16Yh#dvy)vrv-K0?-JfFs?G7#;P-RHCsl+o?~r*M}qEw_y@}>s-ZuL`dOzl4<6|$U14oY`{PGAYPF$*q&oZRcY0g233CmFOb<=43*o+n=!1MpS{7l z%U~lJbmQl?K?6SrTkq)U=EUq&?HQh_5Odw5MA1m3Brfe~GT(hpTH6Y;YaqcV8_}NP z3z`UJu^B{RXml=7EUCAlesi~z68jYpwREgeZ9zAC#s8*-qBC%TL8Z(v;BitwF>(s$ zTw?N)cqdcbGYu89D=rGe7|#7ig+=%={gKi_j}YCPP*r2A=g)vpZ=Lg7;tvw{PlpdU z?I}|4qw7s?=WJsf7c8{tgg2=lp@kw>+!4j{OkYzX)7ycUI5wftlzlk_+F_P6ou^azFTj`G1|L#l9qY@xThr`=gY93x zZtePWsG8qZS6Z(pa9TRyqMRj`_%#XC(ih&V4Qu}qowVG1F#^Sw&JQcAk>8; zBB~yoJ~lcqKs(U~w+Us0-MFd~P}FITi3?+LFBl>U)Gll`_S7)NSoJQMZFj0W$F9Vv zK5Y3_^)9NDas#8o-rmXj_++qgSiRAywPx_3@Ck3nK2PdBvN;-%9~!c}a!?tC+j*T; zOWtWIsQC9-N?Zn)<>Sq%z4eLC$! zt63WV)o3~NG{{nUo(;1vuW__575_nyjmT6io!K`6b)TyxWtKMqTcX|nklNkFFH%4U z^lMpI5!XD1U~Up&LqZzzNfyUpQ({0WFZa z7wf7S#v>wz5gTXz%;KXYAYm4lRfIFf4ITRJ(?St;69#T^d+Hk znYQu@R3_b4u8Oe8yW(a??JHn7FLzdz1jBg)5G!gpgFVT@$l_>JSkg=CzjJvpNlRGK zrDCeeTMloCwHrBllJqKlB&mCq7ZMYNjOh8I9+{2k-ZG}++qb(-$hU6~r{onO@{7t~ zgE!dk*&56@dU1E1JO80Ypy5VF%11NCBRHQgwegul57g`uYY$NcV$X!eS|yWTm3O0y zp{w%q=>0jWpav?T$~ky4J@gzT-V{3dB0S?lqPrNvJ?*(oi=;8@hO}l9ourcwUI2mR zABa$LOhkF|7BTIZN~99^d}NWxi$a!oupL65VM}6+a1>b5f+#9pc80AWd&fyj%^I&{ZJ-D3{J@F(q=qyCX@rM2DK1f0&HnZDc>_Hr8+RT25Y6&YXN`|E%ScEpu~|%ItoSQHCAtUH zC)PsniAC#Uf;<7hAht-)U`*~26*H5QT6BD|e+R@fAV4Ft82@E?N|W;;k|AZOx= z8=$4TR4j^|6K{J0pOAlbG$k|kOMHS*e89D%%2g><2|rE;m8;GMM?;fJq85hO1-x>5 zo3i+r%_j||{`O7OUiwC9I7|ul0L4Hn+&3+3>xV@@2E8cO&YG#uGcKB)nX1EaCpA1E z1-{{4{ngg4T8DNNULWoS96H%2g|3!x2F^;Opf*PhX}}JtqugmZ@DLDHiL+>7X;uJL zx7n?aZC33rnX2unP0eju*j+3(#yJKCIBr6^i>K<1+T5na(s2JK48%rkt;+rZx}fSG z53~>!khPK2C`sPenU}&=JuP_o?x3aQL`dO6PQs1o8qE%zq_eXIN7{_nCIWd2!Bjvn zZD1w)=qhW8GYvuFRAGgITw>>yF0rSBMG5qfORVOf z09v-$e=_Nse`?7_?sp4I>{S$<93kSzr1s#VZG9?otHXJrkSS=aTGyK71w&EWPOOUm3 zsJki>>kjS}gGo#|(~#dc+A`$Wq9H{#Qn<}{SNDcA9EGTy1I|h&uM>7s2$IUIHw71& zXzn%GO&3l6JrqpQ`1jz;#dIBPi+LdYN=-R}_KqIv&X-N*+e_gsjzVzROW}<`+tHcW zh@<7j@F7RDi=aD*(eqD@#?632`QkD?uHz!Rb@=ekS4{i;vQ`S*dyR4g1vUa1diQwfvnu=hq}^E@CH zzy&jIDiH(Bc;6yGTfEF)4lAXJJ+ZCCk5F%r+hALX<-xEMq$A~?5?X&3`g|)sN&W>6 z-CzTJf&7_NI~Ni6?Vm1@7J`!;pSR9`_RgvJ%lbod|N!%O8hmIu@*-s@r zgpfw+coVxx%<2Wd3L7Q#Ni+-P(&uHplu^7#)GOX7Vqxqnvm3=Mhm5_|_L>|uQwH(P zR5KS6x4*$$z$P`G3^PIi#(U2>+Xxgi=>*uu{}DN54~h8}O-;HrC{z zs`fVEvudW6NqZZR^O9k21H4b{ZSXWyJlflUzUANB0B8Tg24HYGK@LHrS|zPUM66*h z2yO&h8(2fy0q`JpgLPs=8~ptSaz-J_MQ%|%mG&bNPap^KBL_%;`z3N9KnHBVj)?qWCBmdH>KtQEh3J~0-7=jL(dLbz?H<5Tq`2m zy8P_l9~i9{a%$0uBH6!}8t>{}m!>K1**}6As|@(Y1j;18CQ>_YZLvg_;k4Sxp7uBF1V8mTT##f4-0Vtg(fnVeEx z7wap`2Ce`@j=L7fiR5Z@NF}~+5W%XZ-jbh?cv5B7pRhR@Sjl}HCIXq#cV)ABeV!IJw#Vt4+Gq(t3 zYt(9>iygSMvpF@@+>1M1@2>4@uODbMCu;3sZ#?+hY_=xgcc;1wK6i*eGx#S|%jk~S z#y}tc0sAeuC z^x%+d3hQL7gBBVh0~(*g(nW4YZ0!=aMr>0ac~1GN%#5M+^^x()CC9SFx$)#cs$ySg z5DLb=eo7=9Lbc&3w9GLLuQI`HDN*Z{8N30g<~M^pp>A%Zoc(OtnG)-!Hcy@^k*W%_ z)`6;<8yitI6nei^jm7?%y0H?ba`%=fK&5hb1J(R0SL)fcZ!V*P`Y_<12^6#Ey5r8K zO&AIO9Eb;lZ_L@WSnN3b(kKxRCHQ+AwY)>5t87BHGLDl%I)#RjKP3UXR4~%FQM*g& z+c_$tQYhSY*F3QtR8HUPD-IrpU99x!TUrC<)`?KQYiE-e+mWTonkVBk+}pp zbY+lFOQBFiDVQ(^2^32#Ffn~XOoWqM5L*YiDwaMW5>KR0@~2Nofctg&cD@V&1~e4LJ+eSP zvLJkfIY}q42H8>XeiD4sOiYepL?u@|gKBqMTF5+WawW3ZzAu@Ur$%0zns&*uB~4ro z#uQx`5p~GH92I335y#p-MrE(Yy2NPkkZX$?70Jh3XuPXCo~B&x`Iv|R6BcI0Y|O-F zC^6-%3tnf`CtY^=(>A8;{A=;$*0c?uA)8qnUTUsT;-zGt#3fewDaXpYq--XEw%c4c zA!RdBfS4s^lhPRTk+Qh~YN=8-IFvUT?k3_=356157OO@VGbXTbX*lXH-bEr}8S&gZE9-j72du0z?)2de+ zyJ&F~B#Ew3E1udX2EIXA`(Po*JV^gKCO^%2c%1En^(GsimeDCGA1mw;-Z*pbCvSg35KCgSW_vaE}} zeqwu7j@DFb8y=}F0e+hVU3hg+J(rJ{1ISF(~U z^<=Tvu|47VD4^=*^XaYYFM-Fi2f+Q~u?|kHOMbAK2etPpx_wE^VlV3>IY$j)#{bp1 zZ$u)5I1ChF%8|{x!mDhEcvgvOr-q0tfNK6B;-HE8_*m$_27a4wW+Yb) z4Y3=|(_IZRtlASLR$JvLx0gs&C*(+g`*lL@%h_)C@_!x_oRee^rY6qwUb)gwN3}{uLTZjJw)UlMgmF! zq&#v?>#tCH)T{9u1aU4;%W5R2%z_uXAJZyX9t|jjt^kerky1AJA9Mt-MHn2;F~X{J z;($TbUx63M;`Q#3R(TR@ct~p~j_#3s=g_bqE}dtx-hEbDv&v*uKy}n|LTga2PF*bj zfY#GM%+j@%2ekHv``{QhE-dJ}CUE^&DV(T`Lddy@5GLKo6!z(cYS|SQg%M;kk^;nH zje|cJs;E4il~*p<)?6OWip2dP_=r24^%<8;HFs2}yggM2_V0jL|C(_)rL|LSz)6># z$!h1cwl~{`P0>1&t>)~m$>waw+b$#&ISk`zDWo30?bT6YJm|j>S=9_xC^3KaiF}LC zHh}Cop5t~yw5Kz%_pte$Y2EqiE85;CL3=Tz_5K z*7(7!Fc{X&z4gybBcS%y4@g9}*1s186=%A07+DqnxEtl|w1YggSnAgLsQX4vQnWC}g?@rEQ&9QcGaH@tCgiCzS^s ziNo_xfxa&%mF03BOeVQ-VkVPEN?~xB7!yg`O-vz=gDUA=$*z!Cd51~lAxM~1P);Iw zrHn}=688^kkczJ4QS#jSU>%ci4_;mHpa1127pMr&X_*CM5ea`FJczT z*@S?-vMh%H)3cmuwQS$P?7skCb{l-ip4G9wynB6`jmT!^*RNZ<{+#M;r`evJp02j` zovQ*-FXk2M{%QdJ)f<50nrWiqjlmA?%`wazj#sBE@PDmUg&hQ1wRUrAmRf6YVBj)! zzqg~-*;}hMJbcc>=REn)=)k~qb$4wHwHPBKmF5nA%P{N?Pt>;onM-QoXg}OIgC2)F zyd6~xm%y&@yXyd&taf16_#Lxw?$yp#bK2Wg-vh6L+mMd8w>C9}fAI}t%^Bhj-ikjf zLvT74@I5rNdoO;2x8WOT!1DICsxxpllj=;jbD^kKzSB}r@$a#eIGokgT@D9E?yXOB zCg(N{NZoiPkQIt~1E@PFV9D>f(e|D!h&FFRASo)zOpdeV)cuTEV#=i>iYj z%K8u+<=f3)mYGKQ%cwiL5k83V$9w8m9TlyB<^7_wY9v_RZvin!%j>@e z>#7;tW3=h}D3_5m6@9g`pCkDQD|@KvCh}IpTT8aDzeJL{ef=!4lf&L9`}!GCqs;d8 z`eavlJNm-gb2!66SCPw%PDp+Y7xlnV7EwoXiAx24!OKKLE=Ha?#lvhAbI4ld5s^=D zlxfI0Bae*O_+zbg4zt|X@n;!{A%`SQt<6!|kGr`M4aPokNR zp=1MzMHqusksttXExfnnv80M5^|53<@l&W*o+YZ3c`P}6dl>219tm|+BF1~Ac6+G& zWK36tbhzC1+2od^n#zpNifW2CE54a=#(PR`v1gm3e~b9YQ59uJMT?bSM{|&PlMz62 zA<cpR^RI(%oBiwQ^9FiMw(UCjAzJ0V z&I%uCm64EGVyl?CSn+=ZX}oxZ70W$_=qlqXQ?fmxI%eur3+OL4kX2uVn)}}Z7D8kd z@*}R~MOIPz;0a_^eqp?ZOdM3t-hm=S~@m=jdUDpE^r?4--2C9yTDr~7# zL>20NfMtmysv>q(r6~brUl>ufHi{Dx1KJ13+q_09)b38VcC&XIMRZv^*|Dm%Ksd=gK>^n#s3m7=|08c zLT#m#vW|M+Y!5AsJ`1XB$+zVZLVZr zcGg>Gdwc8#duS;J=Q1Yq;t*4&07F!Y!|rgvgrkQcET>s~`C!a7-0t;pVcZR1_t?P&@qs+5X2v*zOyHr})6zgZB?ej5|x zOO2|fi!uK;e5M%vm*C4qPzTK2d8?U0>zysu_~u4^%jEOH9lp6&U*rY~k%U*7 zoL=iFCzl=j?g!d#BXne*s18}0BVrL@tkiHuR)NIcL_%RDOfc{1pn>^4cGf56{M(^{RHg%cQz=k&u9?YjIG9Al z(g0!sA~@qFnJhx(zi-ik1rU2&jz?}IXJUWMBaeY^_%qla^H{6bG8n*~R)Zb^I#nBs zgdWczRhs0YFAL*S_H8n=;&a%5o%JEsk&nj;hfEf8xMfncZ@!HX^D(RjAm;hmLvbx* zqnIGomPDgKmFX7hk#!HnyOuErC=9Jv{5eZWWU2UZ(&zCiQ}uSoYqq@3?95bc&>I=? z0{a_1o-A~Em_mkEnZ{jFqM+2~ih~{2QI6CmoJ^!5Rt@&mXZ;)ab*|dilM^?gA?eDRf zN*a=tf&3d$(|7}kg|V;9ZXgc;VeoE5S6IzHZ+nf4ZIf-N%;P^(&0I+6=FznieF5u` ztrO`YH#?DC;?_=NeWXw)dY`lO3U{JA*gRNuqxw$oTyHHM+biyv+2_?^1=5~seF~Q; zQ3;%|+JbNJ|8x^RU?Z1?*V)?)mNpF!?5%m4&+b)WArhX-T5G^^r5f(if=l@X{cxF4 z)T1%xo%wuNxZ!e=t1%@$117I*B+d%dfQWTdFR_dBk*T2Y1La8e@SSjk7VpHS<`Z z7NpBTRc+PG1HDWwleTK6*?Weqn(;odRr5Dd@o1}N`j&sIW(-J+Q3*5q333Q90|Yi2 z(QNbxBG5FsN^CLh>fcqr^ z)PHEjf(5tE`QO7X_8s^LQJ#23+pZbQeC#zorl5SxSoHwg`I5P-=KNm+O8`R^TeA5l z0KR^+|77@tYbVl=uzSGV@ZBY0z2p|Kv=sm?K!rn70X~HDZyw%>+z3ad1~)Pf;IQLB zPQ>bg@J%x|ImRS~={m%q+Px+XQj=kW76$h33y|wH_R1vmR>I2QILMYMpD>l`0NFa7 zGbcB9A>`hMi>p)ZnzoBepd1yy9C+55M*D{RTePMKJZqituI{yIx|9{3#RQmu$ugG1 zGvC@MV|{C*!Fjrr@}sXzDft)S%dP0EYj$LLU?uxZM*l{b6K*cv3ZIKyt!3#__Z+4Z9 zL$m$4&?HmQmx_JD0uQmk{Iv0j%z zODL=t`leE#3hQMu91dL(v5Ww*(y(60nZSDe2Y$n!0oLmfHd;r{LDq&lp%QD5KRcvM@dCt|C9RQMCAQNpKjo93A-#l3^Kk6^Y7- z*$iu~BWjopngBZj_ttw9y7wI>S`f$lpxzEWUhe{$&g5ue72Q1us6rS`bvSJAb1X+A z`z4^>4hLV=s|cqa_pnSsb!2fvPcKn2DiM4dPz`iH0&~McWskJR$d2L|P%;Qii5PG7 z0@i=dx4krn2B@^~2CAnE2|b?f3VC}b)(`-y2Mq|1PMbH`PuD$iCsev5;{0PAyd+VJ^ zZ_7z|*Gb#F-L-wA-bM;Z=x-Ulpxv%b@0i*r2?0Dr;724XBp{D?l3j2N&W}){+3;`C#zB0QZSd6X5O@O$> z>UM|iMLFuGI{!^HDNAA1fg z&F@j)VR~Y%X(2N=?W`xV8|Ald=LB8Yai|m--P|*_qOV=EjH|A zJyjnk;2Qj#ZYS82$kbd6y6Q5M=0BjumTpl#NYWH9j#v~djD2NxixSM(naK<;vig0& z_A(cfAe&lQmCsTATu2nLDqq4nWV0%|;7zMym%G)fq&#w3R%K;PVkKIr1AoA|Nh}>W z2Nwz+c0yh*6uJQ?ECtaG14N=n@UUZ_Wa+*x-9gG;P1BA7s@bP$COm98A_&I70Smnh z6BTyg&`@xX8JAQKGc{dPVm%cG?DP_;Do{-YsJi76WCJL*!v^TL+A*XTv*oOWHOo~c z3Q(!vvw&(r^}|^~sD8;fFw!`>pH*#F8C5GV&~z1F8Hby3QkoncU#af)yd;$BV&j#f zx;ae0!h`WBnl?AfK~>?wcwCsNXc8Wb<}DfUV0fRvgZ&XIAK}61TYfwk0y9MD;1Kwh zAcw9*AqYGe#>?p&p+kZYy^P`pw<;uw!iOXxzla&lz4blht{C!*NIZf3%8&da0q)nx zuRp`i^m_ORkzaU4Lw;eIkNv~Pgp`l@tNBHKVMl>r@MuZMujn?>Y`px z55PCggya}$6w2#CgKBqE8ZsvX$_rs?eF1l!fNx5|bVX$v2jwz_5N1jppj<}~E9TK# zf$vimXzM3NbA_B*l%NP`>xag>x>uyBMpn=kiYfuCC3cr*eIsVW`Ns_Q(nXOUnPrN? z{|&y}ip)C1Py?j}CKzi8-Kok=yvV|#piIP#;5Rc0N1Whj6dceZtAI9GKNBso7|)dB zT!~AJv6EdHb3lp+##}te1T4=%qLyaEsK}ty!#r4?XSfQ%p>@uRZ=E3C$9hk2k+sle zuFN^KkYKLV7RpD=g5^o+&wa-7EQFR&SRV8?WFSIec}#{wV;2$2BVd_=i9+Fhn~*bs z<=KPZ@MnPKSt^EJV~-}yE{f^S_n4IibCMmxGpC)-5FU!)ZLE$@!s_&0ZAf;`Kr$1S zox_QlHLnd>OgK>0Ywq;+!s$EUfOwa|FU&Iz>}|Ft+TK*HQK9oNy$u_@&BLBZRBrah z!=z{%^9#6^eWu!i(?8*0P;Vz}&=Z~oQ5n=y469FMdjWOb50khJWm=L)r_ejk2dV*r z;f}|T+?ee_9%E}BQRnnbIz~+Z6VwyuMCkB7#x2O!1_g2mE)P6AP%&dH)eD%+UdOm7 z=Krf0-)n&?1W;7JMcuI?fy@x|Msi=g%C!yXdRwl5MUz{^SK$d_@OhZJ4}ROWZP>dA z4$0lp?zD!z3mW^jZQGWD1LE$HaDn7CCY$$^C>w19-!K}kkF&3t_Yw{V;!_~9gQdP2p}nTV3{Zw*B=*ZQvV@%+yU3|bF4#en{?pGmQLoP zw$hnWn(x}AS^Md+J>m8!pz4;!()+1vqaKfS=xw8}>xr0L8&%>hS$>pK{(1rHv(M}a z-{foemTUW5L7%Y&jNr+2r7yYWI#~ieF8zX z3ssO1RP-%Bf(k(oqG>T(pCE^>%=rrh6{VVkd`JMCilPD%@ly0^&BXX$MP7>GrHI56 zc&Yq&DH7m*jhC9it}_iEAzlivXm}|s^9j3xNk1QRg!7A+!j1v~^KKGe3J@ud*KMaz~e> z0b7zWPxLmzJ3-~MANm*^ohO)OQ3_tf+`=~+%!ira93fE!1ABu()&EnxKqd~(SoJsZ zCR3+9WN)DEGPyzc92_6+KL=auaB-T^Gd#WV=en!;!J z%-!yzX89iic}Ncd^$C>bsx+mMXei=;&DdDIQSXe6jn3>_kJ5RK#$LYujI-9CQ=RQJ z+q2VfdfC2n1(a$M%_;hz(2i(N2{$?a3wgzODG5wfNqQig~Ae!jyD^P+IVo0 zKOxFu9-3l2;H zxlIGItzQXbMO!}#8U^An`8_w<-t%TleJcLjttIcWltd1Q8eI=20@CH{x0{ONonu}( zcl*|$T`FeYxjW)SD4^qC!B4V+y=kD!>Ur0|dnUa_h30XKBk+E0bhTR=f$gaH4}xe! zK6&ZPz7bq8R7*->ZwmLFUj?snj5jWYv+|&y&ykbD5@k;YV(M_8E^R@=v!S~?1{fDq5DkP~)AAnLAJ$h`6HZ2q#;~~8zG(O;{Nd-*fN1U5J!8HCe5G!gLqoSD? zyZHAcmpHqKB_-R%hmoXi7yp*tp2Kb^yZC-lfy{O>)*}SXWYb@}?-<<4EaES0qRLUT z{#wNUEUN(?Cl=A-JBkR0VHCy1M7wD59TUk}t>f`08P<_|M}jCfkSE|H{h4MT3$H3| znq2{6MGa)EbmqlI9!a8!vyoU5+detEgPdQlN0PdYTupD!VM&yYJXBO5vyF^(2Zeq{ z&1Blm%u-%y6IhP=Nr8PEqs_X&E-y=9IU3QN59c89rf^Cv0-i1;x{D!z+Me6ANcNL% zNbCC)Jhe&r9RQ9EFoBdbFzjw*MchldRe=Xd2`D5_UzYe}__OGYU8|ZP_)a&4fXr$ZV zAva4NX{3>mSYjiYs#)=04+_#fpgyq{qPr{tXhcy1C`RNm)4DyPLS`ygOFb?2?|>*G z1VUv7>J3nL|5d<5J4i+$N8*Yb%txJfMv1N`P#pPD93;T~62&1D9!?TNm8(+z7=B>t zvpO4`g+?lgS{Ncc@XGCN+D00;lO_$Ne)c-lUiwBUR7~gg0PErZU@>-?wthO=W6+CY zt*yBjbj?Mxv>z+%%vztuZ}pDXfd$vKj@N+I)a$*I^nmC|Dx*kKsx#7_h7EP~=V4>r zQSK3c8b##b5ho04J~|M>!h8~_I+{#ut7>=2RBcafYHriQ?&8kA88{W^7#QBT>A-VF z8@0Jji>0CdO_=tG*jDN&~)s{M=f~y?x2Na+X&>$Nq8!J zquGHa_B-J)_{Ml`B9OHZ$|F$2Hn5R>T$MFca{ZRGTwNr(P?IQl3^~Pgc2rC;*pyUh zEj+ofw0={%v_1_MB+x%Dt(x^DL>z5Fnism^yN)pNU6?b@kMWYxF`=m==#9y?j^MnG z0l5oI&4RVC1YS1<7S zCF%@``!Epe8RQGMiQFCTrXA*XynX2z-0W{33HYPl9gWAp62JAosuV^SF zl{`Y~>ABv|4a7KBkX#>O=|VY2PL^6ijC1RA0I<*L?Y7a&G32YAX^=~30P;YV2eRWY z&R&saQs}%YOQ1P zq;{P#eP4;fR0vYeCLl=FP;>||-CLlj`SR}8w4o#mP!tpq-GudLtjh=%z2Rh-dm&zQ z2N?_4s;V_OFmM%}=;MiNfDRR3;Dq4nu4bb;#qMguDL>*e?70J&&KBZ}aXTyX>FHV( zx585N+a6xB-QH-nrj6V2QsnmWsb;%2)@tr;3HvHnXKGX{FkAE;YKIu^@ebDN8l=1i2@|55xDdAu zgY~B%Vw;A7@yXiw?zVUrP^Wvui|8wgO}>E9zfe2|0)iXh*rpE9X?wfWdw>QVtvEgg z@yAYm*KBi^xUKF3Iuj^RWb;bcOO5743xKx-W$~)sIP8QLJgf;0Xt$ajh=U65 z=sWKA1Tw_S@O7+ua~;}gqPDA5qZeI8_Xix(yV?O6ydP@Ns^44*o<|!x-wp7%1(opuNR+ z)LptkR~J!)bZWRO9R%2CryD>@Q|(F}#6z7yoSFs8048cThyCGV_$hk=@UpiJ%8u&- zKy3vL(KGO%8#wz0)NQvqwI0U%~C;&`#WEE9HI+AXTD6$?cx+F=nO^?7^?6) zK+G{S90Rk~F@{I!0YjY9$p#A|1`>HP-O;r+hKXEBcI$ecAkn7c8dg40yMEM)%XL8n**l7oNYB=^I;3z~ZXxOWR4 zTST3s`BlF8)1tLXz+Z1Pj9BQ0T5V%^MTC z$R?^BHS53e{9sv)@OU+z6tA=zPb|%6JhRXZRmwD;-$9*;GoDD58_(}Ls#gKy`7LK% zNHCuN3B-D4JV{LR=8t}prWZKsTLEjj!C5&Htm!5oR@9nG@P-1jk7`nyH)DD> ziAfmKqcAQCIUzH9$lDN~h_x9xdXdbYZ$py0Z+a$imBR=r-}DSovCQW6g2EZnuz!#d zE`c61)i>G1oqR{F($IWrS@9TKt(6L6O^I_b(2cE_I#06DDqf%w zNqa@8gQktXAJs><(JM8oyo3Ldqox%w(yww>iv%P6=RmBek&ea-bTQ4FmA;4MB&_to z9DKps4sR^kIKLN3>c;slVkU>#QO3C|>XX?xUs)=^BfJEAgPPf1!CHvav7JF}~uBJ`@DQcH)(+@S7=EmV? zj@nqju>aUubrKBw{{gY0hW*4yAUGncd9&_6AYo}fc%Wh6iw9UY-jeu4$!7kLrx<4b zyUtA*32}T|R4lWZKerg3FYG8}*NYNkhWuod&Tnm?!~^aN21-OzK28kz6}mws0B5`b zr=p1A&TO~UR!(3m(q9v*pJ}HrN9ED&^zwin@6}g0Dp>*he5tcWB-rQcfLKxcd`z5u zCYjG)mhK`FlCaB13J@-FWHrn9K&+L>(QjmEWD-g0-uDH>R1W`9dEe)XdSy1tC#A!n zL)|CSo8+?G-Xs{|cL1@XMwsmrKp?cJu;$H6{$rAs zu*Qd?HP+Wy@HWI-OSZ!wMv}T6{v%>1hka6Z_zy*mGTY&^uFSWNB0BXlFhbST9NwN zPzOx|{cBVt-9RrDw0MvHjib61u*(1ItQ!eddHHF@t#WiRg_O{|nc`oPh=eJw2*)_k zAMlNXug2;$-k?aLWD|WX$eNkxpE4>PZ$SeM`0 zc*E(yeZhEx5d7oByefw{)NQdi(q?DXT1#PYgU5tFOiM14Evs6O5j-l_Zf1F7sBWgM zy%x1fx3z~D)OjDh-cbn)7~QL#H73F6R)JViS2(&J!xYuLS>I=otc3MFJZ>#7Z$-R4 z)|BMvTrw!pMv}TSdGen7w_OO-MQF)PHyO_sbH0 z4wdLd0AiB6v&x$4OV86Sp?G@-A}A(lbPW$YD!_rQj-VZl`}!yvzT}(N0&c z&bZG`*cr$;XMc=Y#QjWHh2n% z6}7=ph_f!Hc{9E@lAMI`eNy7)UA!srxsr|X?;%Ou7++7k73%HRi0Wl`nu}~uCYLD6nhOd0!7%TleS>UL&U!G++Y_lc z9t>md)#-;V*|&pXPO=^S0^?7xzgYM5^qbU{I^EMU+>Lt`%w@WhmPL1;l0;Km@|R3f zUv|F?UZ%xn02Ox+6)qMS&mPMEO(Tr8bu=e#R{{{4#l`&Ie(Yx3{c<==0}zYod3 z|3-fuj}-biJmfaHOE^*}v3r|Ft>QlgOiTQcLec&9!()ZwihisgXeEyp!kx7B5nbDp z*gRV3S0Drbc(^}2S_nB4SMnY$L^~iqakNnWqlHL-`{~g_s9tcI5UO0&$KCDW$EElq zJX(lU5^oES7Q!pq(L$u5)ZhLawU@rpKKZz3|Ksgwq13~HB9KAzc%ic#j~7DNVf2Wh zQwF(B2>02yIZ1Kujhx${D=Ic=KM|-pnow-B)FXzl2LwmFM2{GX*jlycdKpIyof$nl zM?~G!!7Zr==bR6MDR|7#24~r(9W$g$l^>jw_n4s#QBhfrLP?d_jm0H)ed!XrO4CCw zG5b+NIQqiQ|Fxu}hWyXLupM_aS;hYnFX=|XYjWpg7OAn`#pa_ogMfr%(1LH1M-(vv z>NK8NgKGDxvQ8loHKj9)#GH2#2zDbJMiwVJhaFAny&+9sMCI0GKL9D1 z&B{m#Xw8Truwegj){BCROf+vb*i9GB*;v)}*+nyK6^;M@@Z}=h1C=<>s01B<6Vza1 zQsJhgLeh}vQ92)Xthj$Yyd>$sUH@{pLFmBW0c}UeVIz7S7sH42LM{r4eV_m_|3^UP z4oULdkff=jMnn7rZj9@`E;eWd98o9^nVjn$GbSufTOQb}RDG_y1n#R(%=vGJTB^u4 z4lk1HA6vN&Rn?q;`u75{;LxgyzwmGn?IQTF^yQ^c6t`jh`xY%&07r@~$H$R9e+7Q~ z5q`s;FP-yO;*-k*+ZwDyTn!w^xU8cas8BW4&pk=Dz4M4CBwX=JMipk3(g6HvtQbL2+<3e z09Op@tyWBcrvo>la!Y|K(-G8%b2zi=I6G4vj)URSt5h1W3}aB7doqGY#teERBVJIg zioc1I>oR+4v5F^@Sli3P+8zs3p?>tvMP7wxXs}Rq3r)cO4qgHOD@ah!;4L&rJ=I3a zGS0`2?b7a4P4553=9!sn;y}UKZ15VN-xD@BkdR$!s-N=FT{N?AuDcQsmc3b=5j=N? zN+tSe3+Z-g(`hvHpARy+-TxXM4^L*1HmsNO!;R>LuFKXp#ME6h9O|mn47k9$-VHsG zlVm4zbFMzZY|aVJX1ynD?kv=t{x$HpLvvCki#6w<*_?2JHRo+Tk&|O{b_c+AR`-#; z3{0g^KfQqQ{mP#3{ffS}@4Z+Dr}iadz0iO**=;r5zQlX@wtJ0Mw>}c_+P+7@{v?~M zLUTtsOHZ1mXM|=QhhVoPfF$vhki-E*!q4u0ER#E&bIl8{GPQdEn=Et}wQor}$Lr%B! z9^X3f3yZgo4_Zgr=(zMk-O+L#nLlwXD0Vi>jdc#)Y}1*_EfB-o8J=%}IJhcIAf`K# zS0DqL4zhl8!8}W*t8?b0GKGfX14-*#xAyppr zVHR+qwayh`C6)(gpU=gIt|s44_xTUt;MYO*`$YKdlkn{h|3Uiv6n%c0K0iaB|45(z zgrBlC4#rt)=x&Ii6eIizatP7|Dswm@M*q1W_$HmX;6`n8^YF$;h1VB{^uREgVhKd| zQoKO%Vn~&^Xk2$Gob(Qd6VC|}Prx_w!#Ai6_DlGN|ImsB3vQkBZ^e#u3w(qS4ZLzk z+kXU9^;Sr!VVO_aFAOwO#-|6sjF-$^HRt~tSVBMv1XJM83GipL|77vwMEVi-SQz*( zD=8@(-3(Rq)~yN}8B74kXR_VDK;6#<%D+JQ5#z6iZ<>K|>C)0{sYLCc8C1Jl(h_f3 zkBb+z4=dA`jBRj!+(dAod|K)@lFl_L%*Ew!O`(N36^9(|;f8#AoXq`{(as^u7VRmL z%zeOkSGSs`Q+boQp?1xwgs7R-jU124dSRrL^|`MYHA$CR{yeWKHUG=_@_EYh{@AhN zE_vP`0Btu%Bmx{zdEQ3~5VPcYQyOAE^1NSzTBNRmwB z0hY?lPuhE9iB(lWz-Izgn8&G}g7Kyq}q+F5#$SUV2E*0^)h$e_~R=Mjk> zrM(x8SY+*D;$^LssJ*&f0Edglz#xeJgiQC z7Xu&bSaFvm@sU8=ZJwNvBtEPFF-wv-r6J}cNxT$lsglGv8p%n3N)nq~hn+g&e*X}< zWVuOVWKSfCFTrp4Ge{C2q?FNy)zm$6dWVga#WhHZkE_h7GE#!+nbTMIgw0oxkX>r3 z$L)${PRVq}XHKR33^8TMoW83ka&m3X)XeEedcx+13N@$yc6hu%<}^ohre;pR(i1s3 zHfN5^>GylW_al96-ydQfv@m;m`;xIX7Yw7Y<83wF9+x?_J`(ZlTr#IK&eDs-opA^* z7+s*09ChHU_}40CHk#@EGHVYA9Y<;!kXp!5(TLA@EV|+Uk?wVY-x1s2TQhe z(pCk>Z0U@Rj!T!+y)M^b+RT0cYm?#}R8_W=$4{7bNXnLytD7NPiuZ|Z z=?78$C|gS3@@GpiUm>Cu7(`EyLsy37quEl5`vw86V1aFN5I-?XN-SwnAOGKw$70D* zBJo6WG=FlG1h`)(M?a2T>Lc*c_Wxb1yTvP7aumyaN;P2w*T;bG{3b`Sqrd?9`JN|7 z>7WqiY}u2ebT4zieuQ$P{`_6|rkR)=!-z_b{=lGGdU6yi(%0lDzA%4sl;j?l95n?M zCMI$uM~TJWZjF4{Q{A+sNOJUG<6S*Wj#BfeY@#hWDsIyktpu}8Dq;QVM1%XVVJ-ct zNOIJal<(oo=P5aQmSe?TlA~t;ZMSK0LUMFX0b-WqXi7uOM{@LJsHIAd;%Fp&ew7?G zxeiq|;%%=0Vu3GN&I(#&Pb5bt@EiU#lcQwT%;c!1;le>)iI0cl7!15QlB4*hY{}8M zJ6ZSl89T*>)t)Cu$$Ck9A*8vBu@BOmpXBHZ7#qc;sA5CU2dXgpQ!0dh+T$QOI#*(C zRdV!hpbGU9kry*LiiN7zXaaUmj{b#>lx4unmK>GbTjM}R)-OFd`re+f`EC-jOHK7K zUD4zyna=p+sFa@}rVPo^f9i>xT$?jBIr?usVe{*Sn$!OjJYFCWlcT@viJTmp zlZQohKiV3}UAER@pj`Tz^mr8HVlhy4^CR`{>e{|5unt-fIK6$zSewaF6n4C=rrYC^ zqt-_vo}Ei_^iJpA5eYNn5L__KypKrqC^>pgiE5`DkF$Yle#e8&HG_DMJvoX_oh>;^ z4j=PZpHpImRdV#o5~-@>=;c7wt@lRs4_l(&`o~hBLHkkHWhJaxIwcBF>ETU4HNPG% z**Vp$cEas&tge}`O5$c#sXNN3Q~`tB4Qi0hCclJqCC7N9H1Gc(OrXRJM4ZFO#%ZFb-o?BIxt^I;PZonMzJj=OFh zV;v9ziNFz^hQLHE zUhm3Uape;n_g481VlGD@hN!|V5AF+Y5n84$GhuzeRag$H_1F1S>l3alIjELo$yBXu zR_zO}j1^Zb!EbLBYene11{zcG&5>x48KuSxOp$)%DjbJa`@T>l)3h#=K6k*jQ1tLB zWAE3l>^bPUV6W6h%16wGcrxm4c&YP(cmkFb;t8kuQN)wMb?AsjWU~V941#neA)fHv zbT<6p8Sw37_!%Ic4pj4wN(AtPj|uNzI3+9bLKq={fJSz}(<`p7PuHiaEtr&gvyJ*q zvo)Hz4|_XiJ6?UKH&N|WJv;-_tG7K0;J1gp*>(+fjerZ_q>T zH=vNKtM<$fciiNx!L|vdtHodZ)hBXC`Y21axaBw^w(k6$XW8CqnO!C!XbuA|g`Qwd z0{qXyQT|42EhGIPTYh-*i2h9GMa_npyr7Qr15&$=v7xC-j%HIix~qXIW{DFd$Utv!*GYjdXJ+CJD5Ha}3PIsG@m z;{|YSIhr#S*Y^3I$jPxebKu&()f2w|y|3;29jt?fp-6AvSX>(lJKk1Xac$N|a{4X8 zpYWZfCnpy7!Wb(^>>?7`2i-~-D2AbzJncama4)Lutj6Fw~LjR6<4G2YM^Qzjj=Gkg$?_iJ{k|&Naf&OjmDDutfO%VAkqh92`XZ; zKD#H}o=LKHsjxmMyIS#QU>&mcaw$f$Q9pFN>0%iNraY%7V$xO8#M0U|(rR;39$6Lb zvP>1Mj~6mohdQf5VUzWWn52VO+0krH>6Qy42NY8u^{%2!ciYob-J{;c&6c;P*6P&9 zYi)0Dy))@y=wKG25(6_$xD_G}6m8gBpPKSI)!j9(>P z-CRf%F-~(>hit}47rJQ<>@v5SgOo>Rq&etcKVWTZ<*tym+2h={g{{qPLB`3efKea| z)0my!QEQEjwoGQxjeltW9ldYIHzr zAT%!xZ)dAH4ROp)2kcOLbn`WrUbXRpi>?m3Q8e_SvR=%nsLQNH9xSo9DNFKkY7vVi z!NP);aB;#ND7@<^l4 z+Rj?m%3C2T@)75jwOElHT)ZNjsZHda>?ue-hG+{y@}Di{i>L9ZsusQ-<|W-_(wpL) zGQ7%~@8qXj`oBxBlCoEUX%DDo4@{e9E5AnOn<&8C4&%-0V6wr10eMS(0?ViMQ_G;R z-T0Q=h%Mc zXnOawp&?eGp&_p_BxC5RPD3Gb(~P?N8?cSUG_vBGi@8=ssPkq&h`pPqcAi;c9n4F4 z#qPAdB}c`STIv-u)zVt8GSqUFP|FSpHb)gw)$)X)A!*&E8PyGZf=<32Ii=U2#nYEFPdJ%18rMzMvv%MupQz~uLD`sk=wO(at<6%M@ z-%5hbQH4}(ykuxd^C(Col~XZ9Gf_9M!f=KBZ()Pj)D||mW^d=JyHYFTt^B^~J($>U-djCP7}K0ad~)^eY?n9Br=DReJ)?Y}{YL)cbyj4|GGMt>0G9`17 zmaK?cCC!0J8X_nMRc)0t1N^ZmSkfwKO4?^wC5`uqRnq653EyayG<_?uN*Wi^kuQx) z>JsG8m2330?TZNtIYMhF1N>#MNIG#rU*hJ)-!)eD`M<^s1=mO;i6_=b7g!^W0^G0H zNMD8>>SFi^*GS_PZH+XR`Lyg5@y7na@G;M8q@hhE}(na0Ng^k(bRDYzG(&~$9Sn$NjD9u zx-BS=ETJ@tMVdxD!UXZRj)HJmy8J$%?dCcsEH8aG5sNHcUP67!E(TsK#2~IQF?_y< zV)$(NVsP=dl}s&5ol^93K9)MY2}GurI^k$7=OSuzXOru&2S;RcClCucU7!(B)y9OuC?$-dU<#h29gKyn}Q*u!Ee6AUjiqm2nl zKmo>Rc4i7j9E?5$dvdfrI3kyd1uluY!2pa%l|cqDsKd@3)gAbBy#ugc4?v!G!%*==`Ex#U<9VclJb9t}VMfuvna5 zb(!(}Cq3c$H9*zPvDbU8Yx}<5xqZn{npry(biAFU+vB#GwmuT^F|#cr7Q^})XX#1j zS7kniiG+!Nu#bJGkgunprdQW*AuQ=ctzB=`06dDzVgrSW8T~TOqW;AuViyB1E2~Do ze-xFCAN{Z}zEv~Z$}FSbcWkf8Q8P9A{Rh>|g+!5l^j)k&Han?{-0VkoiCgv2;@x<(INobBGF1 z%|3@Pa0=a(F!dd4j4|66fhq!CLA%Y|(T9;>`g(qe6;^nKb4sMD^3!JnRkz_>wuI6@ zY>9sBAKP7C0#0PySAdCWs~7H_kC!MwrH9*rYJNRjU7_K1SVx7au~_&r6<&>wts3?@ zpD@m1AZMETd>bv7u32DQ>INa)Y(o=PJ(vrd=X2Y|BAf^Fd~W;wR_B2T4X8*PZ!@%PA2|LcP6p47TookDXh`+LP58*jt#nUvZBtz(?R?=Yrr7=7jtTrAWQ|7w}Cp zI5`Ft1$g;ygKGLFZds27sJF2`P#syDzMx*#m~TymzML4-c%1QA{EI2KFt_S}e>pwE zEKIb9J)tk~x6`VRcf`p6Jw(Jj`D{16DuReP&UjaMNBR5zn?g;1#T**FSI-7Si&=*p zH7XOTfTcqgIT64VoIipuw*q92u_{tvhN5U0ww<53CoU@_2S2*k-$jn{aKXu(547Fp z-wM+q9qEezNhTb&bBI_3C$rQr)TRu~auP#uk!i-(9!lbdK1kv~-SjApi3)@)RB(d` zEG!kz@=0H(hXR=qt!Zv8op#8A-Le!WeS(tzw!~Y z0I*W*-+TbDo(ip`09fctN<*UnSSHuu2oaIZkw7e%36=xELiPjz>+kU!{tN(Ehnd4( z1cjxIF2ZCUjWj~%6MX0FD6Hvg5NEXpVOF>he-~l00w0GmwQ%wV;I1aT@yXiwZn+~A zut@iede^pVJ7=e0Z|Z@4%~@}-Bq?% zC0Vj&)FQm1*7Js4OqW=@KCdUd-V9Xp+f3JXz16v0$q1S@)83n`HZ$dsqm_k0uU7ry z6JINpLYDVT=Qfa2ll+!2#1r2MqJyt(q zdy$Jxl>c^;VE+mSW)d#T-+03dgbhG=}Wp3?$)<+6;oVPkl&(d*naG}6#kK}cn z6qpF-E(NgwpBKJY_GK~QPJ_&03a_%UXZbTMz05^(rR>#=Z3$4#K4UY%Y|Eyr9SAX~ zOq{vr9_$w-Z!tk^;iIgQPb#sJ3cz+uiBuK-_gm-k0NBniQGiPK zHUQQ9y2pnMtD{HeFlN8*Ys;uofq|ea`Oh{KJckq|M^9Jkx;ZZirLNdurKoETTd&|! zJc6c0OL9>V5TzU@DqVk#9SEN263){v9TaFj$GadbJ!*0sA&Q<(J z;P19MKOtP(T?WUmw(8*SZiD*=0Q}HBEl8@Rf})OzX&8}@iv>fO@(J^t4q&L0Lgo~9 zrEeIhhl~aeD_~KZA{eNz8t>}fn5ImkG1km>>Qn7CAf3^fed|%dpm|}xbIhsEwma3G zqjbY4-Vn$#0sFLE-J@q<)MYl+dDLJ!T|oIa12P5V{}5kp#X22r)0e=6^Z@E~z&Va) z#^KoS$Dp=uGqnUL#;=H21nRVej7}h+=*~#ISOjUrHKrBE^-v5)0qtIkp>&+n89fxp z8WM=_igUWal_dw9lVm9`&gogMtQE&O365RnUa6fcA2AEgDaH292hQooU_unm30*%K z8B#bWlk0GFh{)y(KrEQOm4kCa_5{x9R#Yea8Q`1-f*~$~Z_-8-F)95LQVIP=aB;Ka zn=ZUiz?SMeagP8`Mi6zJ)2IL^!SPfLfnRFWc2zrogYv`)Kjtn`rBGys`o*q2?FYiY zd{q4TG5wLvF0n{`@LELE+{So^rkNiM(*2B$VlxXBRlEe2>V6PFSeAtJWC3#2|gr_EO6vAsYti<5W)<5_%lh6@&CCtb-QCC7T(K zLDCz*Oz7F=Z%yb~ABl_+36omQ1PSBtHfQNc5-Jn^79x>-qnK6X2ulc33WU$_v#pNw zud!Le;YZVF7rl@*Q(fr4Ma|;75EjP1GJ6-w3NTu=!SbpcwNsh!gMq5s1VQgO{x_ih z4gjOoSchyKM;E)m(%b_7Dws@B_p{k{&je%{z>0h|w< zDC%BqZ=&fn;LKlgr-F%U5va*UB`TrnV&{_*T1F`>EZD_(-jH-8CO!DOwio4SU)8~` zqq@0}DAK{UU>&k`FkR?o2eZrE+QCvDsbtnt=5kx97V5SeoZG}Q-sRvz0a*SbukldX zS#*30W@qmq5pY5EKz_;_dX9)^XncTh@1f|KPaP01%{Ux087Hu=MhpAmyu8Eno`$qk!sBgBEt3E&IeFnglggk2^V1<~`=8OI(k-H#$?4r2crS0Y{oW?UJNIU^p z$q!heHrTHLE2m*+It4yLzzSZ`04rGL6B+;m{XXUe<`=Mn9R;F@Yf1vFM7QmkuI`3y ze#YUyW}{QzHQSt3_+pxI#6PlNY#jbmkFcr3vr&rFyDx`tnyGQ=*m6WtAeJi)s_Ex6 zWCgLH493Q_>hxu+pQlD%n+j_=DFT#;(1^vin4$~wTMqb^QzEabK)R^9Z`hmY?3<}= z*bETI9`5qfFo_AY5jQcXh|hN4P|!nE-WJ6?3zWd5I}!{qe;{ebQx@AN*p< z&VLcU+zNhK711FTE8A!sowkJT4a%dS4_++7CE^;B#;YBr;j+!oeL&l7l9!O4e0+;(JTPH71OA^-vgZ7yP>dK0f5ik^|sFvSb227Nhav!V;I5 ztp3rJvEpzK!LQ3qB~_pD5wpNOQhNJ*z&&09t)$={=r~DFLcu*uu0wkmkg|E%OsC##RHxu*v7H`vA-E_A4tqX8I=xn{Guvvksm$2f zrtfcOU3uYoy4Z?&s1i@oPai?F{cp^+pC4e!ktNDfMf+9*RS2sng~w@7FM%aTiasEm z+7avuX}R%?{>Iu8<)adJBS6&(FTp}(6*TqEo*N&a+L0Xiz^E6nK6SC}r4|o88@%K~ zs;3JHJ<93|FS!)!pe6ChM#sZT^ae1Kcy{?)lX%ugB4d&Zyky8(dUCK-S@P3}M0R+| z)#POYyaXnNxWNr1&8Z_*o+U>MI0IpJdS)LUYguc}zz{*(pJ}(ljI!1qZ`F6;>HxeR z4js|_x%6q-itac+_ZDo}aGcb7go|cL*{DvqN63a6HG=WN!q``4?}Ur7_PqOvORVGF zWqVPMx~c4Wm+Iz1LhpF~7I@qNp7KhpL$;15g&x^cCes0LZ|aGxBumz;lF91<&?$Jc z(iPUK@9znxe+^XKCa6VP^>3V8mAaB?PVGI(YEDxgS*ckgz5vhu;OZ0Enzrt;?PSNc z^M+hP7dg$Zm)Mkt0T;skvvW#PfunsL3@lSUE9F9CQQKMdEMrj)E)?|Rl)PN1ye7J) z1@oGR5{Vu`KMpzHGVr(B8^H{&@Hei6ZwYef%H*U58^L(y$oPl~ zBSsF3%97Ab1d{L5Ou)=y58#6zQvZ6lxxA09fF**EI1sC~y zgKGDxv?P93xQM7}Uoax4ig%>~L#%?HeA(vCTvd3BlW!1)+>}h1{&GNroGBTDDDkjI z-ysvEzKvCHuD1yig2B99ty*ovHLclR;zPb|G$Ks^z`|ijZ#t zC}e4HhmHgZF0%ghbA#P<(d37Jn4rb>Y+SN=z}~C3*@0xDUeJQEprgN zIk-=tW{ff>r1d=%(wU;2UC}d_y0YYeo{=o&L(g32%2;vqjNsR0!sg!ZR%*jrpg2(l zTPp4fZV;LkTx2TMbQP0>9on5wrEYa)$w8$gOA(bqZ-Gl|FSlblDH|{fv38!J?dRRf5lqzEo-;Im*(u$gjc(1wmRi? znqIBmnXI+Eb(r)#!@IcI8klaj0Dslk*=)g*b8^PpwVJm*9NFM%tA2B3aJ!aGCkNoU zz2$(X!aii{vc8#KTOGqXw+O2ub>r{)gza6HDM1n-MWx-a1_AJ9;V6HjwRRCb&IaO` zJfing3!%XuWU_+#%@3CBJB*EDp#YT~_z$28u~yY>u>pIDB|8ziu~(_Ugt#Jl=-?n7 z^ppiwmgUs6h0oOOO))VkG|T^KnjJy2V4*T`+ADnn+~9u&c7F=8C}dz38V9hgE|GhM zSCQOX^EM`%=r?gT8@w~0+!HoEpz1ak)U!dZcs8n}2CJbVE*{S&B@CkFS*IAT%S1BRIYVgXusPNHm@tBT>e?`xC3U3Dp^RmvYlBr(-T>_ z+KZJ#W|N-5oAiY}Ve|L;+N4y;B2DUl=y+31gIrAa_e4zb=Ayf3(6nA~fmyFN_L7~f z_M*E2Prr)+TWi-D*YE8K*YEDDuDu`Y;G}E9n=teVTRz?~q1)q*6SY2)(@hsH^#79k zlw)q8u-5-2Jh05iiJl+KfV>JS5KabnPBp9IK+$Sr7aS`MyQ{04s;%ZMoKsz^j!$}+ zq0!dsZsL1(c2!uIIZ5g=)5q_XsE^7a{Wj^NWpgqtjBoeMy-u7t$?6w#4CQZZFUrx> z%3b{x)y;*3?gzRK)eA1n+}EVgO+PT(P<m8gpqk&qcWv20=a!ANqW0cowW2AHoRZ1@u=cQ0EM%7-cJ66X0rT7C%L0>2 z$tN=s09HB(3m8#>aX9h>qI#Om4wN{$^2NwYF)L=2F(E&b!KSgYV3 zJD9PNDr8_J_gM`L?FhgGzR-vr+}0B|ZzUnS)U?Q$;Sf8J@-xSb^w_~4_C!wc?4-vI z-q=fSGAmbV?BK6^!scJ~Rk<8u2l1`h&E}ANrYEv;wHK+egKzYN&9C;gNgZMb@lBc@ zJNS7|#1zj>cgbLMMWMXL2GoTYSw=S(LmlyX^5y$8DL{5&)=^Sxv_Jr%HzP9d7Schy8M=8$O zxiXf;PiL%i<&;Mbi<$VbF~<6Qp_%dZ&i;XAW}JfywIcWDdE=&P$rvX13oaS^rU<>B z#>1eKFO$=}ia*Rty34K-n;Qi)bTRi0ud?QQPl=sJ!5ZELRI|ex%oVu@Q;ecEF*ehL zh2m<{&+Crl%iIqe8sc}FD{)OitmY4vSaY=s_v0l}RcjYN0#x0+2iYBzB4U&DTM_fD z!u?^10#pk5J)oLjAy*+@W&(DHnHgla^K!bDL$TgEf?B@Tb(89$v4$HltVzL_i?$`3}_ZuxA zR>GoBMV5EJ$9Pw_nxZv{LH>Thm&AH9QSd+IV1%{LrH<8lhXSAe!#AR%Gh=@*DtWW9IU z>rQ{sLwWpERKayA^8pt-jv)@~P9;nE)}5|$WvuwRQ^BvxEG1Q?@)5JFJ5A~R^Re#q zLC`w2?i3v-IVn}^PED>u`xueUJAhcZ>rRn9vF`LdR44oytUHZa*eF?F4U3jweyN#O zF^hW_5)0ie@DsBi1Mraxo6|G1otlCP3vXo9yS~}l-S%KXskfuqne^6O^0gM7_T-2jha`TYU0+-lQplhr{3zon$d>>F**z^Ya_YM|4qHrlwzb@VD+I158)WI^le9_KaU z!M2SyV-i^rds4b6g7H&0?OvMbI44)yII;Lx+1ATq{ep<4xn9;<_elTCyk53{zMANH z&tyV_ik`&tL|O(Zdv0mq+0|Bcx&~NKm6suBMlWFQ%oJmz*nCR`^y@&CnHy}$b1W6~ z?^?z(M_SD@FKD z-K;Ah9_R_TA1&0f{=49Dhh?ar#5y>&tjGcy>&WcAiEfWuN0#!)wY@P|Ox>(3U(MpX4W-pj~fKhQB)UK zr`k2#|K4j=C+gKkf{_pQUEA?XXKMFUnCjW#A71s%~Kr-N3t=fy1#5+01}0bn~nUyUeX-Amx#@ z&Wg<4ayxl*%bca#u?rXnQpD_=b!Lgptv1H7^C=`pT{CahmTjj_ZPaZEUF0+`osY^L z$gBZB%CHv`q| z6Dt$C7YX_YqnC-@TP?ABD$!tq_ada2?%rKuno(+SUTrSqqH|R;<-0%cx}mkHU(zN|-u+j5J6@ z-y-fD7CO3fB%y`IMl%oD=(r3A1q9=pt0XcCWZ^I$smqeb&wg9wVa!0S^2jkpE4%n% zQb`xph}cE645iq`92HU6JsxS*CSW9NB*Z z@>&edMB>^>fTp;^6y$HeuG`mQ=llAmh z7`088Y<@JMDOvwce7O}(cxooC3(Q^=UAQ8AUfpBj3m22^W3m&Mn2`S5QAjSh!q)?B z7&TmRbbsZ_k^_!TvJ}D5ZEiNq^Bd?Alhr@CGFBW%C-`-lF(lyVUMt#TBY?67UpRN` zT*d#Vr3)5x!`-*Y?%5SeAyb)Bsmn}QUvU+d!@(e55EXG%tVdi~a!@SEQa;7{g)3vl z6-)5jTg56H^Ly}Rj;@=7N(}(*9JcCsSC$-9O0pDDsZ3|h47oB^T%`oRrK(guViwGA z${0N#nBTjh<15TBPOoGzOJROZu0t;-BAY!xEC`TP{DlB}^B2KKEf)9aFNLD+p{9R6 z=f7_eKz3i|FUQA`J%RbX0o4hA2AJO`B{*!6186j7NJN5eM#AAF4EkMm{BO;Imh}YI z0ztg!_~@{^7-;Z-ga#92_p0VZtG;Wt);$Qnt#BvAv=7~@s!X>Ni_Uv?R!f34gWSI1)8N0>e1VZ}$6q2Ml!D5R@<_C=X!V;^h z@^iljR3SdC`aX`Yy#(W)LH$15SzIOf2%dF;VH6N?Xqj19mG0h>$AGpP4uf>>efD+^2liP7=T2L zWqN0&U8pawbZ(i#efe>ZZhvlxeL(f_8%fd@zY7Zs_HY4ZXBI35-QKpn$fa{e{H__Q zn+u5|{d*Sckgb2~LO1)jUFO#Qo$^Rgbi18=UUd5(me|}1-EQYoNG=B5ZhyqAT6T2% zTjry33Fvlf9Sd3L>z(_S#X{%cLZRF5%IotfL^00U3nJ&9C)~#Di-*H4XqjCMud)I5 z>m{m_id1|BsAi8;m|?33Bt57{+35D4mRNa(Zhy2ystU#VeV|$p-Hxr&Z(YoTZa;jJ z#V>FfYo$FxnEQVi zlG8q7dlTf)mFQvndXNzT5~uCAA{#urVUH8ni4e;nTmgh!$2t^SCqg8iSSONyod^kV zzg{QudF*ok3?Jb-5xkZ6eDBxXtC9M-V)r2RFwrf+h@y^z< zz4gxI)-l*yZ&%G&9b$WC0X?%Ic!q@)evNXZ{{2h%rkNxce_c-D)S8h0F{pN*n})W} zx+X+Ofhr{H)0d?nYoqT?T>)~kr3rQBV;6py(hG5K4huh?9K$dy5*&toc2IG&8St?N zCVEwb?I1TPvI8;YOryLj+%&4ls*dB0cXcPy^h{K44Xv77gR3TI_N_$K{y4<<}` zBDIeSGGQ^tVR3hVR-n?z`;WVUiEoWjrLgfW9kSx*U%Fw6&mYB?TbFLE)D$StiRc22 z1K_Tp)HhdVutE|DU11W~=qLe~br}}`Z8w)XVNt;bA{N>2d8uKWO&OTwB!=K3lfiDEL-kh49 zZj5>tOzo}iYkM=*R=YL7Z^=gb?dWceBbA^K&GkxUXZ4Xp%cwEucxvj7(+A zmR+q{6}F=t>r7VRl(wl_yG>uW4SQQg;UE0PPcG)<#~!}zFYqz=vyCq(ejQ_{459je zf+T4KI>1up`2h;QyTq!hRL47kD$J=>*TX5qIUJ4~Zq6HN>_IWmc$Es`#0N!h8=0!_ zt`Y3_n(A)YlpELbg)s3bx-1xXg3O(LF#2SP5>U94j{#MvGrcx~_r*eGfi(T{4ftpJ zVcTD|k+Qf|*$};w`>Z%OpH9ou-NA*%d4AvT37e0QkX>r3XJA}`$L5iMG#bUHq@?_e z*6iYOiA*6Q=O-?@(xMqIm6W5m0s^`=Cq>R#a~iSz)jeVJP@wAO#OlrI{|2(ogs3&rAY|icgxhrHqIlp=V^D3Uv6TW|^ukE`5>!9J)(%YAewTV|l zVaMBQx;+j}v0vR#1VA9l8q(ts!s5sv2t(=Bf&5$29iWLdVc&Ed9uXtdF;ZewK2nE1f9K)w%biPh|GuXftI zGwYpM$ue><=CBQI&dEVAkeJh40S7QgAP_Daf;kex6-;mf&L0OHl8`{S{_j;)ch#%z z>glTP*>Utq`o7)S>F(FBUcL9~)qB6Hs*TA!rVbohJTL&4^{p`3BSa(aEU{q{AoS7_ zsmik6Z9vt|eJAt`B|g`B<^m9UPl*DQ`gSi+b=S9LaCo)F(bbF2S{QBbY}W6bj4F}yyso9{P9&5V!{H1cqd1!)A0WDJ~KpoK=KkFh?n zQI>?)K)Wf$YdADSf&pj_Lz&b$P?cZ+nyez;Aqxz^V&NQM0KAWb0hVuvPYeveKDmPd zu-?W~99ZwkkV7a6NeUQ%r}G9eu{J2O%~38f+8;7k^(nLT&lrsJe<0F+6hg7mKO=Fl z^zUB!X97H+OaCXJfjtR+#HD}yMk)Q{wSd(~F^3*t%DuOxe>4;rE^jZX^#9aE339ex zyK&ZsqJLwr43*g^X}TAR{dg~lk4^+Hz+vPzHC0Hi5IfzYao<@|?g#)~Qo$^~+=u|Uq6<0~rP`86f<^po z(G3YOfqtEN#OO;R($G?*HjsilfVSOqUe>-vh<+YU%@{89C5%`CQm{N>D|$dT+#H4MAg1+D?W?848P%~YLD8oWT9$;B{x<3xh-SGRgLr8T~#|u zD3210L<*GDv?IvP(S2Oev};7qmR@2R?^@_tKhTDd-`1r)#g-)tJrgXs>DhoSW5xB1 z^V?lLTc*Xgk@6&!tY6+4-NZFay+G9KTw9S@sMj;y)ax=^mMqjuu#`}*T-!$v+cH*M zy*R(6s+Suv1HQ3CV$tr_{JlYX;uQ*IE&BmDGd*@ci|UtA_UxceqiILE`Vva$KM9~a_((qut%=!@q0z?F+U98OhFWWo-B14*nQV-#ovPOAYXv!mXkW{D08IPZ{wro{t?I}m z9G>2ofejy99?tZe3KERXmY!9(Jv7JkI+LLX`bH`zm<2%{@Np)A(Ko-r^kzeTAq(Io z_maW(M3pdqZaRnzGDdkO>@6SC0XD*&n_LLDv{#c(0YUZ#y!kQ0MzPGNEJNQ9RG}&& z-3w}p5xn^-*oIiyWHm;0R`PE%coNTt0NxXTy;G}kYha03Vvx_sav;8;Akr{Oix3=E z^d(WbZl>Jf%C+R(jhDTV~_KE)I`d`4Mp!7Zb8gOI1LDEzVO16tGb_9p@?Jr->;C&U4wN2F!y1k%8b&~_}UZ!qb*%JdXUQ8c|^A3GszKuR#ZF*55zkU~M zn+=H~4)e9xhJ2=^3SBoPv&@aAWPGHMDYdMnSJ;$}k4=e{9C8_xURxmMq+cWk^_dct zP8!r-GqD*A3NOxyL4C{gA{%Q+1WMmvZL=X!#Gt-|ZOCU(s?c?VGRxd(P{v0J8Ps1{ zORum&9Y<;@tID+o+3Zu(YPdK-D-;#EWxcO`hpR4sDauj;FG= z*^nq=O)Iet`K(D5x^7KonH#Oi_(&mZT3{``!q#-OEDCuQ*dnAun5UMCh#9FDhz(s) zqMk_`x`au}Fe2f_f;KcCL_udw>>JXu3DawA)ITvE`K)C&B#Ky2fNjWUL8{1g3o=XG zXhFtD3R%!|tfgnLAO|kwUfmD4&e-HKJIuTmT*&Z2KI!YuUfuVWsQfbD{C1$4Ki{nH z3~`+(kwL~763EkQyc^X;P^Kh*fpF#QZd|V~amkchYq+{lou|=(fx6%yW10{BuTtN6aplXa}@M5|r zzG`!yS}O=wq)3OhYk5L^w0Yk#z01az3U6>FaL1D`YV&ljXKbB=^WYn<1b+!O%L}>7 z`TIZ3#Ou%mnf&=A@1ZuW&V(ytB?5ck`bkY9Lp%Q$W!+gj8DZLsk#@o*+I_z(vHPTU z{+hR)8Ac)%gctK^=kfu~T@27xEz>U3rY*nR@E(V5m71wGP1j6g%gWHqqqt`Nf{E6l z309i9hifKv#~GTr9%Y?JGl4MeL#dg2X!o67V)seS+z3>SeiJX|)=W({v{lQrk&HI& zLeqO3x>ahX+B97=jV&ufGgolUT+2l3&;(sGZFmY^c_>uSUIjnI7=qy-#4-tw{xRZp z?22E4v|MO^zpD|-NE2hOQX)+oX^Do&C9@Ppq14A6sLCa?6b3~i%d91{tgM)0$t>Q- zm(1RUhQyZ4vQO?yW^vsb*Wz>FQ-&Nuu{=vzGRwo;LAER|!lgxPWwRG^WiFCsEX7zd z5aMMq+UyWJ^$iy_8?!T`ew&jxxJcH0ku2+j1A39{AE8OT4t~UoWbqqikt|*d&`JUX zVg`uY?Cm01G!z)pUy`**7S{ar6O>eV+|ZCWOqN=XHtKbMRBjXbL)cvRmUbn0ly9<| z0fP(H1MzSLrzSiDr`8r8_f)unAVoilQe@VRp8!0!z0*R%Jd0cTOWB%MkjU48@pNF= zH|dp#b%q>m0zec6K?54mIC=-k%Y8{}Q4HX9hzR5&;0H9S!58oghPhn;O+26WYK(mg z@^@ai*slYg7PdU!37vfz_T-bN8e_AQ{+V>kW+9gF1b%feMR`&;-PW7Xc^xxZGb;Kt zb2sUz$51ZYK`ffGJBejstqBcn-@%kS_#ud0(PdEBj;pZ?wPITzAC9T;plN#c>1pCM z>2Hfs$vkJ>>1LwP|EZ~-S)oxl+Q=XLgnNz0*)Ju4gn|6gScOv?8BBu?-qH?c_%9?L z{44xurnLUOS2g|d*-3AFwm#abHR??U%I50Os_m(@_IZtIf2NAphP=yRhjzr2BV63` z$6&X1uhr<^gB#`ofZN*+i?zpK|6H_wZ^R$1&NhAVr=V5C2O8dFqrQ8{yQVQaIp$4N z_xNzLU+?$#_;t9wG3mq7@!GgoYk7OCxB>4ZWF6p*aP8*xc52 z6^Yz9TOF$iQ<~o4tvukL>_1UQr ze+DaALRwlUk> z84HKqw1&A^Xw%d*tb?gkVQtQ8DU&KRlJ%hvd#lt(eGfLwZh1}iSF2W?gatgpLpNdl z%vcT71eoF1M}5f;d=oPx8GwdFbV0_j{$`E0Qjl8--r2(~JK&A}6kcm^HH*pP>uWdr zLM54E!Yi7s>I{&<-MgWkm(1+0*5M}J2tgXh5{QxT1)vh6Gqn-ln{G_*+YLPm%YdpL zIC)gpW@82xBn|U9aYcD}AHIiQlxD86Dk0 zeVBC4cNs2Jg4Y_Z*o5AP!e;$@Yh$g6_O^cE(q98)`FOGpMk#QwCBNr7(|g`&Xip`0 zukp$U3|A6S>V;b%es7EfTXwNdi*4LHi^r{GUNuDTIeXU*ZwDVfcEpv-ioQu?xV6wL z;t1k7v|bfljj;mH?DMc~Ddmo4wy(8}EGof+AVR)AWYP4#K@d^f&sspY4cO!AaV1j^ zo5`hIfr_~Tg5MYcV&UQ$e;n5`w!`_z2VLQC2fMttI#X}o8GIL+PMs3-6LN!x@rIS1 z`!>oCd=&17In~?*Ez#WSQYJy(tBXZ^Lc0_1P_q>-otxJ_P!4xN!9zlgYn_u zf28+)D{o3}@4HEOU#q!mY!1u`yOAKi_z{zE9c0lHU;O>DdhQA0i?57bWg<(F?vN9= zaj&doG_pMNxh1?VR!ZGRFS%0l(aRIeQd2(+A5h9caiC?;#sZFdF}%vQehh&zl%LwH z#zx}iV}MvuM@-hDac_MDNmJ2o#QRda(ZR+Gx!eIHN3GanRpx#Os$*r!7;*86$+e z$!dIfX2Dm*TC9%^BdAnr{JxC&I>{z=DPxv8SYTw>Wvwk4A$%Q(6&)GqNdxN0ph&Bi z={}#XL4BHa2wm zU1VVRiK)9Bq}!8$;m2j^!V_d*cwRg(M9_#11=hrEe0YGb)uADCG?4kD1hMo1A#vN; zyJ8jA$AqJ=(#C}4iKnRtITjz7oBYvH@T$`CM;;I>IxM8-kCO80<;bv<$&8N-%PPQI zJS^x#0p6L~kq)LNGDsVcq&gHF#<+2CR&ppfls72%P;e$63Y@S@v6V1KUx*TM;}@7j z?I4++xbbt#>PH9N>PB`)#`oNM30N)5sgfJHD`(I)=FAzm4Z?gtw`Iro&(=l}Le=8+ zvA*hFeF_y$jr3Qfw3GVvhNX@c2={NW)~1Ybe;*Jl>epAL!DrGW)=SU6n@Np(_G2n( zfJ)k-cz?5J++2$0mrk%4 z$>8(pO=={c0eqL0T38{eE&$2-l2}P~AAjQ2nvY+my@0xflkoPr$-z7oUR7ES=J$YD zQ7@lbsnw;`%Q*dbCNb{k7xOq>OTyzFsom#bOCs~K6-laI{aD6@gEx|1eFbkwZm)i% zT*kyKPpMMzT$kce5e(7E*Wo?fpW?DL7CrOj zZaao?y<2t!Ei0eWr1QVj=wEL_$C1xZ^NN&6D-FWJ}r5t3AWZG-XT;HRXoo#f4O@wI3k@=QD~8O7I%%f#2d z%On(sHuS{TzN0LOKS6x$wJE+9m+Gdj*_74@w>W!RC07y0vUy)=^s`?>#Zvw35rkQ4 zntx}hg$3N~SFH6V!_9sVh!u6S>A4EEBYK*v_!5&>elLsnm+WO9N0O?SeSq=g;Gv|K z{Ty#rZZCWE6;Y4iIjCZZeXRT}s!hLzc-#5c7=+`{mY#UqdC&m6IiQFTbjd$KyzTGD z-d5SMAl22%>)g-gSckdUiFmA3dS+k%l}Gic$_5YAovyJ|vjXn4VyzGv?(}pZR@9w} z-L~l72D0;d>Pt^y!s5QvwEhzBDcOHsh$L12c@pEp!RJUTej0B|ZvVM4UVn*^1>4O* zZm%M@AtGA`#g@R_s}lv{eRr5d>mZ4qc;Dxh)o)J_@4G#AkopEQ>EW(^S8h-Itimsf zby4@qFGi(Oz4DPdm((}E)KUox_~sW`t4oG&eiaZa>YGnVE6XLs)ytg1ElgzD9vbf{ z*+c(1l2kqP&5RERza%~MUfz`49{Tk3ot$>bv2z#O%W0Roox!d+vs>XpJ2ssPwSfO59GpOJW2&$&v$K>kJHM*ud@TBL;9Z0+*-XMnW9A-lzTmUvvBg#d9d^AV|=gIlr3K;ZssbxI+IG;^TGMJ)71s=L$GvP%o5!g6gJw7 zdlI*!90Hcoc6|;unl9wuD>>K-G+>+LaBz6HU&noA{js%aBZ;<0SonJ#?pGaIJ6zY{ z?&RhG;ZUAOFzd>9&1-jTfwr!wBTpQdsBGWZ4mWh*DGkdQuIcm;fzEVnx6Jgh>R;z} z%LhEph)5Px+#cxmiK1uvuDSn?UexD+KpUQsw!Bz0Wi+>0If~(=v_TU=!^IFD+Fw70` z2e4+m2p)rtqPO)mU)sLB9sC-Y1eSjXzfuQpecSuf&zqf|tc}6|?A2fs;@T+e zwhp`a?)F<=9ky}b;-!_0SH@EW9z1X9MC6fM?@k%rAG!67T69`NfmuMGG9sn`qf_p0 z#(}D(JH?)>h6^WQFZ#*$w!Uxy+s`vN9%3izNWulUVR3ug0^!7e3xelwP552K%ON*U z0a|!cMBc8Fd+D+X%QG&79Y$y1Mi3hm9sg?4x8Li-Q!E|E4;q4~kn zK-abhCo+u-PGWz=Rt7>{mv!Wg#qlqx$siWO?|_B0JNRzlbaHHdWF9;+Pdq|$zMlZm zaVK#pE1J;T;-oV)4u||)H?dk%4)Att9xAO z)3&r+-Ojbo@Wk!gTWuH&e+F^g#68@H=%R}^oeP!$Cuze_B{-U136Ig(Wq&GQ-4nF? zk4_m+v{5Pj7NSZ&&^kTl+@MNu{1fmItb!luyGtkH@Z<6RM?hG?_q2C~1dV#8)~JO{bz(1be)i>U*_U~4kW(ZASoAzgCv*+GC@aGgTnsmGO*sT;TgEGT zlIOgb*l$5tuEc_$0+~C-0DN{#QrBdyL;f9ZOf!0m7=!H%$-~fg_>^JpwVEPBL=2)G zE`-pgHr5XQ0~#ue9XO;3#veB_9&4>W4Gz8q#G;d!DnZ}T&^3p^4};M!f=lTW;Nbp4 zz)#*D9Euc>!(a)1+KAeNf4;089EJ}csky(^QBivZFb|nIMdi7UdVZN0H-KNmSNqw8{r%p?=%cs3A81E+tru_c*2T_{xw9u8dt6PpbT0(y z+D%C0m>b*(J#pv6Yhk+P-_&XcP5ASc$dan?2UyaxvG>^EA&$pNbf-Q=-nhNdf{8Gk zM7E3NK6l|^J8&8j98lDP6OG`gA`h~WO+5FdF*63=)LJJ+5*H=3B{2zFjk%Vnk`l@W zE3~TFV)5>Xu&7$`WGpeWT_&1_m?mouEo)`SDX2PApp)|mfbe8&XTtH4lw;Q6cd{Rk zHkjo~qeon2yt0N~3HvXt&OjOj`ngFZuU;Tc{eu$4|9ijKl;#Dee;MT^~c+L`j+O*oMPY>0{sxvdyeXG5}K`&}zCD=wuhgwi&42xb@V(TxC zTmLFW`3~_a)Q0e)90^q$8ljB{zKsM`Tt}Zq>TM=c4yIGpx&IhUyOmKw_Lj~jMv9cp zI&JZXy29ptOvpAZRd?{_NADblX{MWa8nJz+#FnryNDb-&*2w)JqdV9kI6NX^r!I&Q z9#2!?x-WWP6H|D|npj`CTf#4hDSo*tauV$1?#{yo^zPh9*?hPwY<{;;cLoo_sV)xG5|+o!0BdM;zxGJO~M`hg0Fz z&y3?hjN$Dt3xdRHF^QWPi6H;{W%1=cp5v-bUgB?w+P%I+wUaZKKLV=mGna*Yf*Xay zS077a=y1uv0J~vefSQ(gj5P0kB{uIW;DhVMyGo=gORDbxs&*r5LfcU8bFFQMac%Q> zv0R;Lkt?KIzE+|DrPe(JRNb}iHnek4>~}g3JP;SGbTfm2Q99$C*+_S%-$46o-YhgrTHB9jG1= zQ>7(FGMWOIz(5+-wn2;<9vU4TZ#ac};v?+7;PV(r?M3zbLj36g_;hFRAp7}6_VY{Z z=ijoQUuHia!k?lymSVm%E`@Rjfsm98IYdwwf|VO&S@OYFV~_`(QT2(WxBn%6DxBL*zv zH+M?FGF}T9hzns445-uvn6e5_=Ga#wEKxuj{--2ZVj6^*o#4z-iEMpJG{a;ArSSod zNn{U@5&2$}Aag-)flrF#u`z1l&Lkx9?Hbka`c8;3I9#>4w%M4S8TC6Yicwce%?Tip zoSB^mj+lm0Bt+V2U_@PLF~-LRjHn7n9;z*Lq!M%ojQC}(yJOA`N>l`l_@MT#aIBMR zxq=Z@QD#69=^|NTjr0<+yMNT0(OG2fFhpHs!FTcHMi}B^vFa>NOzA+x#0@$WF>wR) zP4Txx5dUE*2v&d12}k@X(6$RtBqB%nGzmxiaRFimIAVv6=@A_9VQ8p?BjQjdWFg^* zI^(hSCSvQ)0QH$%tR$^~ZqRW+OLy(M(7&lV;g8KU>buOx zhMkUt)bwq?e2k_d&LFQWCb(??(Blo+1XS%jj<78*`(Pt-rDFUNlF=ZW*M6pN-aH1U zgddgD0e%U;o*v;RJ&!{w2L}WgGs0ea0KUY#0g$;LP?+#yMvh*v-L+ zlK87%KsOD)@bU(vv>#xi?AIp#Ycu=Rk$7b@Ft;9L8I21lq0QiN!Hp}+yXK+(& zj`$a`8GnJ4@S#nBNX0oXqFI5f2;+R%@%R`w5DwBFn7 zZR%$Y#P9H~4c_VA=6)ti{?!I}?CIX={jA~qtBvsJChzI}ObGm|O+e{%@9FVii$mqX zPG!RWzu&3cRdd&{4NSY6@L=gW78;ytZ(ya>5*@89lRY1(LLN#E=vcTp3o?MIKt+8x zIZ=eT99VjW1)MYvV#z2Ie@n*ZJtekWLP}?VYFwn!A*FaRH5>>u5MpP5*c~QPhDlu( z8e0Oy1oy^tzs_byNa>$+h0Q-?LbhqCTBR%sDP>V@I;2#{PZLuPNa_2#A}7o44ExR? z10DWNOy<*F;qsG(dNX(rJZ^y~{S3B2sT4Z&W=DY7x4R-I+ukI_FA{YtXamx}Kkf?O zj{;S@s9UvG+y4DG>;7fw4;>(e!cKS9?DmBz05RhuiD`Gf#V9;ZXjn^6%vmHr3`b*Q zVJ&N5kN~mk8Hp|d#7^94khP767p;~t$Wwr-dkms2Oi2NVu?k%RAjZC>UUO54&65DJ zbtO`j0I@-!YGWJJ72@o!DN%q@>#hWq`Z z6^I&05EFVsk0oQo_jHs{p&{94T4!Ss2`7neq7*0T&=865q3KH{%j!T?;(KV;o;brS zd=HD`bKraMK928s2-T0_d)Oy;d=D1ad9;O9-V8Z}qIOL2Jy_I0cn_=JN9B|V-P5_+ zoQdsWtSJ?Q;C|$_7`BIzIEd|W$M!G*9?;mHZ=z}aJ^YBVJ@}1+?ZImS!$e>WF~E{z zZ?QdSC=d#4E(zPSDs3Mq+}C%mm)MsPjwR!M9r<%Hw^-0_%X`mlnhH)j`0`&8= zB-1l~voQ(VZ#C-8u5U$liluTDLH~H#yTV#0m2*Y^BxITa0a~7NvziV|xlYV;qt>ce z2@K|03EaUzx&(s__;Mo{2=+yYH7S}U209=p^(Gw@lzJ2MY2*qK%te-hu>l92547zP z5gFj1XB8l300(vGs2+iXHbX-tI0(l=G4qh%Af548n-ekrlYv+i&6WlZLJm1NXb*nE zKO=C^iiDje5JHMI@Ob^HNF*NQVEoUI5PIdaYkT~d;%qmzx%8@#=>rr)oU)ApErqA^G8em@a;QF(VGzIiW z1Mq~m0S*KZI|8=?d!!-s2LG+y&wjyg_V-#qnIM)0e)j{ICB7ffCwLuhW?un{MQ*dU zmVtWqdu!Ppuv;7c+rL)swT3sZk0S)WcgYihA+8Nvg0BDxb`v=9a_k{C01DtlqRV;% zocMF1ImL`XrjOqQR3T#`{T$9|aswxhRl)(UGFfZ3I&8m1#&()FS4h!v#)nI6xWrA| z2UMY{EaFIP#f2B8msezM&T#7`c-T(82|M?xaUcJRc(yN@UStUMvWjOCRq+68n+*vy zgKi5~_%gOZNuRTEHXW{@3SBRNnq_V*fEpi3gcddh(7&*jULxCyR#haKpvaVJRv{fqR_PzAl%)Clt!!5mqi zwh7|pCOS5@sQT~VpFj;P0809PWEuV&+Z+#?dim2?AX-UycdrGaBewDiL@$533dC6c z+}~r#7|Wj>B~)lYem2uO8*@l_M)VD(ct(eY$nqzhNho2Z165i6q$vsF0kg`V%uD1b zf8u?-{P`ECeyse-KDn1avFgAlbC~bWkV7a^>9qWbX`4Y-1C44TQPwD`f#%G>XBI*k zlX0d8#JUs(QLGTkNE|GLx)(y301xOw=tt1VJ_JAFLMVQt6hiS@!0JSpFAXrg+S@`X z8VUpjca~HLHQMfuVZ=M^5a*SWP}BI#Jod~y@eBzq&OjmfkqZVAJ(Xb z&+k-`vMqw55O{m$qy)O2CCTMW^Atc&HWol7ozy)Kbm_&l0*mtJQ*?%v#8RBv?AF!? z3wPNmRgvOnpZ2bBcPCXVRQy!BPSywYgP4|S!jI-qJkOT6N(}O7tvzw)8w|2Y*;AKY zumWHH1TA|GSPI6b?0Fi{w#zzXls#7#AZ93gcIc=cl|7GzhRU)hj(lRqAZO-*Dz;)z0(h$%Qy|B4CKKDtfNb(A#C|I&; zq*9Db)*>BgaEWt1CxOpymJe@0Ik16bfk806DIeZO`lnd9D|4=_Rt2XjKKXmHQcqE|m`-!7eLl(2~C7`#{y* zmz21E@_$Nfo~#=FXNgp0)$rees$Kk^&^DC&Tx%Pt4U$w2xk5sv6RO?Nx+eiucdcVp zLvsFHG~+c?4S&zn2=ma8S~c8gqT}kegHMAR6sQ_zxNU56JXY#eLuY|#o5Ek%Yk}yC zCi4nJuNt}v#8@@l*<;BVtA-sVRA?NoFs-vOhlFQD-%yHYbZCgI8q%4S61h82l~qGJ zrzajTt7^!+M2@N<-p8wkuSWG_RYUg4y=sVQdOoGXG;xL;LXm$?sTyL|gKv)xJDiiK zE_#UWims9Nh~Fp`L%bHS z(h8;;1I$eJwql5e0s+AbN~##1l2&e-sn&PH+R0X9$1pv5i-l9>NBGX@{1Fm<{tZfz zS@&PTC&m3Z3^B4^_}3cMaA&6?jzztY$pA#aB`_!D!gchWd8&n}o77V>sl`HFba95= zqFA_@zNfs7=bX-W~d%%EyTs)&zh z?+V8|DWGc=k%~HF{p3>pP8CG2UnDmAbFDF*1?RqUQWsqCU-)uk3GviiswHQS`l8B3 z{Q2mHKwnR(UuSME`jQCgun|i~h5*r=TdXez+IH!PjB?_9Ml7+s^l;TUBYD6{@4%(9 z+h@3l-xl4#Q?=2TL?9=3Q6MMsHiQ~;eOoDC@Hb&;y)8?B(y5PL0XOjIS+I1s#?nIO z>?m8}JHpyCZCQJ#k+pC|b9Q>VG1D4uPE}`GH_kR%ezP4Nhjb2XWvy~-Gu^S*s%4s! zj|7oaEL=t@hJ)xPu3YK`BC>03MP^}fSGpI^Hom67{DKbokwOsC9 zt$R4}@S6UOvwnTl_gWLxRzLr%RjW=;?u(!eO%JxMuZ{Y!&ikTq_}ubpO>Z|_UtVo` z;#D>FEqJSDZOn&t;{9-`vTlvHr#cBi?2vaAgt%U-;f?s-C=iD~R`M}(ZDZQ64^K84 z)3`gnf75Vlrdq47)Swh!{=d_%M{d14t7VVe`o8iM7sn zQF=C|Z_E`bH?YD_OfNFbYV&~=e$3itL!t;+;c;w(0#;xHOFCFV2wj&Io&Zb=p7KcG z3b)xsqlON#X{7Kya!t5kC+|-C;XvbNcfDB=)bj%~>25LKb;m^`!0 zjfP`$lEc9h;9_RWKI6Z|s-@$MFMj7%5hvLZE$L@Y_YKs4^-C2E|sru&)94Az7f z=fs-6YI>24DI|iSFSEAUkSJnJU&l7&vnEyOx;2?)ZnP%jBZaK#gVxeB3_}iFyfPli zzT`R>%5zF^0$C8>b3Y$XR~e2Ps|0K4m2mOpd~ZKGj>O**!(KjSureFX6|$Gp=A}S2 z|Fl^@D{UdIrt5q3EP*|GAcfV`H|P;INV)G=IlplTPm3b{*dL%Gkj zwh=Tf8BNF)(k&O2C_t%o7XVdvtz$Ub4eG&sk^LBOw%3^&Va{ss*k9Y7XT(Iu#srHD z9{TP)85sv`bDZYUakkC^*+3^ldwVUAFPs2n!F;1B5r~enbrpyaXB+ldGDe(jN0o6H zhoxt{hH0IRIV3zI`i4?GqeDX^&X(rNl|-lmRf)5ug(Kntvv9U7gOvkki}!Jy?O&t% zF`O;?&C|kx}T!{mLeiivG zhO%WO4x((`QMOEg2NudU6!n>%?Mkrut)zAYWp6~64o5KvpCqT%bH0m4`4ChCBWiXr zWVoPSodV3nKO>n7fQjJS=qiJs0mWbw{{0Ak(&re5PgiHEQ@jiuGbsY4Mf{o=)cNy| z0nz42fXq7hIvL}cXF>P|b7}5}(1=?=%#Xrv$iH+>iOQh*mne@B2d?p`NpKz?hWQ(J z9?>z`biSsP3Gr1H3n~w5?VI+~`(PovM7m(P&$_@_(T<1bOHj0vkPIqXtgpJRA)`(L zmuj+brq73a7JROE&i3dlR446&Q;55=ulfs{fOR7*Wbrq`AhUYRd>e>+7T~NR|aMERn zcQNns0^;TFAWgdDiYnac;=-Lu6>iAO7Lonvwsk8!6kTJJVztV_1#z1zYYAgIloR{| z#%Lj9;%zOXw*^lHdizK|%F5J#?8ulvlb6+gf0L_lrBS_siL)z4#YvYT<|T!VY8e|y zO;S!=RfYV?;zIs-s*uBlSQG4zJ6y9a&GroT^;K8y686>4h5WaS*FyHin_EW53!Vzt z*J5!(PAp|6$M{>dqkrNmN@-0$PVMNRf&rn3L9|{b*D%lRAo)aB9?rY+SH-)MH>ixR z6g(B^%7rs%#Iz&DcWO5tJMI|1$!=T$B$5ch(41S=0f512Kq2aJrg16Ha;62AOT)ku z0)s%zMlHg_0ft*|PF7phkx9ROhX_yEGKo0kBU73qptZ`C7=CT@R#Oms1XspWm`oiA z$|)T0mNJx4@T4oF18H+sP?-lTRK+_xg8u`YhxyImAD7^aHh7r-dH@~8=io=YLKnYL zR_NljfURdlAbfzh`QEP3#UvZF=8=+C=%yZ18ll{ci*z%eGOp9Dp^Y-FAB9g!`qDv3 z;7nKC9Yb;6LMjJq(6n%8f@WYQ(K|< zOd};+5Xfo4+CMWj;;T7FhDReGkTR-aAhsO@ZF&&9cC?gpFbnmDBt+KozFJ zQYBL+{j$7J!m_~QK~cR5oFBK^tIo_+_YF?gZty#-mB4#joimJ9(8W?3dhNB8yHypFfjfP`$k}WGy{|;W%(1*8y#HZ@u$f#B`f7XRjvb~ z2~pw!v(^Ezxmk{NKzJWt2lQ=JKei5teR5w1gynM{+>FDg3^}Bq(j8@Q%}arDmXb49 z12HC*IZv<`xh}REh>yfBYN-~1<`}o0<@a|t2F@@ zcY2HHK|_I{;PoXTdMasq?sJpJohoZL!`}OJrvMgKb$)D~c#MRiht)ua%*q$SC&d*x z3^x+fbErl&9O<<6xy9c5L>6DUC29-TI*| zOBT8%SaQ{^|FmVTxNdQdOVuqmVg_hshp47U(8^~)M@eWU&TmCtQ9>(q#^ca0A)eEK zSn1G8K(>JOikL70E_p9_%c`HZMU5c+jV?xfDZ$VyzOl zHOT`B%{wi-xkJFMsVi*G zG9lZvR4o}7g@v-wCmj|laNJiwmVrZSY3bCr&X)}yen+JsZe(YAv|t@ zyVMKb4&B)iSNoB!$jP!h!zHoHq=UTjJsBb&>2-+Rm#)$1zndnQqk@^(vfO zamBPhS{vWTbNd)ZPB-8#I6ST8?X68tdaddWzBg5?*QRE1JrSIF#-r1{wWc30DuM|( zjT*v*Ig^LKHuZ|lP$1+ZhwNW)`J@locrjfO@(z+=o?~K`-(Yx+L(3#CcPUV{%MPpK zq^)CJfo;fVdaB5ET&`K-M$_x?$c3e8Fmad0w-z$^pEGTA=yrF5-=XGMmBTd@v7P6S zS7#^LL5S>pTXtSz({Fir7->}B!)Yr&aS^7dVq%+N^)!D=%24zYk@|%tT8i`m=P^q$ zgzb2-pbwxs#W6)zcY_n?{GFy3IjDp50@ty&*^nsW1%|N=`MiKCblnS>Wp4BW9UeKq z9CaqjXnbWM7w|0W4l6w7-yEgD^P2w^vF+E!#fhnWx?Y{}y@(j3ryyA~(U_ea6A%Dg zX$&8m=u5_{&6Yot;UHuJo;U~jHR+3XiN+%x!>d_e7#ss$oD;`zujxfLRxOl7I)=Bi zw%L#<;uzkIZOG>sRH5sR!7Ov5W9ab6?o7u}qM{RZH8NGmb=+m$r3TmGz=d2(bdhTe zBUg8v!ALl8A=eUZW+b|_mguJ?TBOXeJ_c0t=UDZ%M6Zr3G5Y&>1atBsEnY!)7WjS<~Ye}Anx9F;C4u`B(_NqmaA@#t;%P&Fz}D0PlF z>5w}Y99}vw5K)DrkG#qNaz9X@9Wf7@tb#))!5i^ZS0&I-Upj)Y5z}A}W=YH-UD884>3GPr7UpL$4hxQGjqwqyYcmp0-=6GfXrLU@!bfd^h^QyX#C zYL+^2(@M&$vH1>OBT>;=##vv)sDrF-XizHvR)DC zP0~`9(pN+`@_0${A++btFHy~;tvrhhnptV0^nw@5wUuj36dklh+KSqUjoenOw1EoR z*y=J&tB8`JwYM z`l&=1h&4PKTHTMg0F1()@yCXvVICkAG7{Pt^-gw=))P+*mejtwFRQPD_rcXNyXgccha=Zqt|mAs z@D>V^%1FAx%Lh5uTw?u}uep2>m5!~sWS`vET;lR3uD!UVM)PmF=M2S~9eVy6w|`;i zhC|qLFZRh?d&!tpW)8veF|Ozky8$a))NIVoi~_QpkvO>a(tYhE6W{^8_VVj!Y+pe~ z6#Rhiua4g+YcKIyz?P&ToHIc5XK&YDqM^WuGf~po%hV$jn+-^ljO`ent=FKGMFXCU z2j)c&kWlDXC_!e~KZj4nfOvAfvkp2+ zF8{$0OC*it@*kb?*mWkvb1V=mefbY^$d~`T9Y5ip(ej^VWH3nVs;;G8nP6JgF8Z=~Av$2?d7RBJ(*?50|C>-v7quD7Q; zIqO3??s6YDVTZfe7aU0mD~I@9F+PGjr5?PWxWD%h(G?46dC_H#V+pPS_mXCS2J~j7 z&Zh|*#iS{#$e#qNkn@mgkF%z;DCSlM@42h9@)50=8lFPT0k?4X##Vdv>7n`<+uFIq zChjx>Ay^-JiD=?KmMA-k_xTo31!<)hk?^AQ8%lTCuiyEpiIgD@P0iX07cCJzg8RJC zCD&)W0tZg7yfvSYt90$H$4SJMBPSzIZY#NmVZiDx6xXrbwgbZ%O zKDonfu)59jYFJ~*PL9gn#)s`;`cYUW)=5ao`#Q za_}G@i#^C9E{ig%2S;%ktEu#;7kDS6-M}@6Gx09gA%$Y4cQC=T>jr;O>j^*8O3oal%W%Xr-V+RrCTV*;Y=|^a1n`K_`rqi8gYTYU@|S@ z?B`7be~W~{c}b_cMsu0Of#C7p>^2%f@{;0p#jF#3t2gm zgnBOK1fK*1?FP=oFu|K!hI$H~66%@XWi94=w8-fvn`Oq|s+N9+t0-khZ)U>NJ34qA zrw+pB=>AB(hWQl-$B^jCCA=#yDBhL4L1lEM;Hf}YE}TJ65_uOswu|r7ZmbsX#^voK?EBQ`y?3a zhaf-YVXbP{n?(iVY@F2ZD0Y6OX?-mCXptapZRkxk z#%3pdTn*Z)j+5ll>UMZ?%GX00ozyi3y7XcnWUU!-2*qmC;T%4bT8LzF#+jTbe;!hUqfQ?UVKCe1926%0@`)yN0Xcs3(ENdOgCT>`I2|nq1|g zABXnp9?K-Kh-rvGAdn#%?Dkj>|yv3Lp<;s z1>%9%0#*&j+EIX|rrtt4&`=;C*i#b3BinL!4Bt3g)z(yJKQWI#K}O~NCPQXn?ik4u2IUDiPs=0s>McZuA_h$VK3TrQ5kl*ShcB)L=MVamPH zU0i3#6(XM-x+tIByh*k@M((p^$zsPy!IB0A4i~a>L#fQfcSKsZ+p<=C$4Jhx&CI5w zlDQEx0E{|#fgS;jo(UZ#0Y(^C34@aWBc1WsRVKu9DiA9jV1yiUfYFEW6aEe`(>a?v<9adM#Mu2J1#E6aoejr7k+lw-znc1{#c1(k)Vi2 zfhq`s1r7;N1YVRDrSyb3Ijz^%7hwD8kix$r7BsJAc#$E}%?FwI4QrbX2{rj`i$ypD z+n}T|nL|s*BB(;wi<@Sd8;hI9M-o2Vrnvbp*3uJ$i`*3L2VA+dbM?%dlpd>uZptag zk@`Ta2cT31VTjNI+?SV4%A&hE#d@1c)HP{G>wv1!j__hpJHiE=w23LFlV4Q zWo;No(1K-;FLH-qv8MKNX5boFG99Y$a#Wl+{!>OP8_gB6mvO`GKsA5dpd%&U2Uzss z=ny*&n55e-_xHzHj}jkO+R;u zO*r9wv=yJ9w^ik14V>!^hrDgo-@IDFoj1kJO1%4|urxW?C-2w?t)-xQ(|1Ril^3i>dmTIO})CKvF`qWyYN%#A>FGo8IN1 z>+)n%wRyTfHMY*dE%8ZC@E~{to+&$&PeATr;&o_(3_0G+dq@j8!T|yVV(QN|RX4Q^ zP5my)+@z@#X(V1i`&3S7g{4!C{ihPURBG(^xIEJ1d%T!iV-u31ty`Y(TC{opVS1NC zcT0^`o2P56v2|r=tk`4V+f2L;P3Wkx^?`xd=QCABf6mWYN58*IiF~)B&oJ410Mvs4NL$dH21(Jo=0<@R_t8D=m=XwjtLPLR2=bVxtS=p$b9m8<$ER7nnADG7; zAOrJXq6C>`zZX6!j>lmfm4K}GYgEfU&o@RjLG$MXkF_?={Gb5yz_HTL^Hmv7-D^je zTU=eXKx3UonZ-!I7htS!YAO&n#h_S4z*v8$y{n7o?~yK)uq7Rfbp+`IYNOgUVvax3 zTGCl+?no?MYQYcjvXUke~Bo^n`W;)YR$=rw;kXRkOK#!1E{|eS5 zkysc`iK(MRV(E;>t}-E>hk#f#B`UJj(;qIF2Rn7bKeFc&vdSS@&qwXTKO;z%vcnpS z8#F|g;%~XZeHBT?!5Elceni$;S41O|2d}EucTeImyysU(C*r?xt0%r)l=Mn5GD1r^>Ieh%Pr?1`_j?=HdK>st{C@ru=)z`FaB~HU$@psn)R7~e;!UK0y?E;=<0euYz0K-2 zQtQFgHui5oqWEvWx53-&ZR+31|HLmg!X2B586K3Dkd9GW+|zIieK{y&H+Q>|$}V=h zN+^48u%CZcqHB;CjyD2Tuy8p(VHo&-3H$l+62&4hYxe_H5JY-y7%$4PTXE85V?V!Y zdXZsbofYd#%-WY(+iXavm^EAM=hv|f3TBN(PU+ZBRp@%f+AMP;X3h9WB5Jh3etyte zdSWb zglb2@4?znou%A!HHsrG-Rp`1MnPqOYBjY25?C3XT*^vVm68rf+S1x3A6-Q8Gr7_DR z%WbOul#%GtHdWV^sQfZ+xCW@^j~nz!lr#1dB7eDm(1DEoY+5v~-e!d%JZqn4^*w6Qu*rifq-^=BZ9^d1|+!_nmPbw)gwTCnD^c!fx z=Wk5!a_DZUv1;>ljWxEe42?aBYwW#Dybew1sIfi5Tqe?hJ>sJr?B~ChsC3e%{)KhA zVa|*f^Vw8h?C1ZQC_1Q}v>de&M(n4#F=b;v55LJEHit$Y6=OfuMwW{GGzz8+-?EbX zmVaVu=FooKx7hGx!hR;k>KlkwIw#$EQzu-TDrYAcr?Z=Rc-JEQCqoX=x$!3KC)TZ^I%fp^ z%mGBo+>DPg7ndYKoS#N+iy=Q5iG#>bcjPA%-~o;Nybg`)8u$?-Kk*v{`H9y82A9L? zet=+r-XcHIP_Rl;67n?|K zB%JTnjF%2qf)ljO)Q(Q$l1@$2Zy}(LcWB)l^KDR`BFN6SXzvO~I;oWFHhWT#5%vSD zS%-D@t9Pjg4)p>N)`ztQbQYF7pi>uC@F9G;5zx6~zLs?M;N}ZvtXb z>{$e3N1%1cA&1ue56aJL1!ReeR5Yzb`VZYdDEl_lG=tg-L z{F<}@x!gBGgaSvnDQLWqaKB~#{FJQa1uDT6sX#H z8(~)>m45_sr2^*?veAKaPXgeadMKg^Eyoa3IUsZE1!NA>i~qc z*4vnlnPW#Xit`xp<&Ky+IBSt&<~DlkC}wUW+(9sN8@zS#;DtlawFd>oz=f%T;x2_- zA|t-ak#CY0O=~1zKt~M8Sb%6g2M)K zN1#L?`U#M(0x`x5tsYB;hB)~KeJ-IwL-N^7>uf9{F(jj#D8)%SG(-YUXc9t62Rcxd zfD@WrCeAPmaKhsF9DozNj{{ELf$GNqC+w3u-~?;FeEh=_WQH6H5&`hWaV@t`_2CqRri$P5oiGxrRcc=*y-~kOac|V%fd*Me6HNkHbs0m&RSg{_9 zTmja^dJ8o{LxC{h-6cUyPD?`th@>Qko6yMti>9(3;-C}$5Q#y*jgn**{&(<6aXb!# zi-ev0gGMzR?t~GrfSm|AAdZ7IXimT<8}zs4fuNj{(Ty?tsX!E6fN_=A0*G>af@SeV z*WoC?(Yin8-k?-P;3&V;-W5)CQZ-jNiZ0F!P|A_Xd)4$;@-nf>!(U)$la;_7prVT} zI1FF@1Oce5v=oF5K;>yb+b++L0Z=)i05JnVr9;Q`2%xeQ8Y%%QINXVeg#@VRjK{{G z2`hz$r7{E{T%aCA?$PsnGnuRoK$BK|Ijcxg4&( zKFaFwHyQDAJ5AIL-aM<)C)c(h&r#xJArpjao0d`u(pDX=N|(N&(e-xq4be9m`zc`> z`SSA<$ISg`$L->BB0K2E-hc;QN!TbBy~+&gD}X8_4Wu(bMLjDocwn{gGBJ3dG2`Ll z(lf}C`0`)`Zz)j*5=QW5pcc5Zsps zBluib*!&wNWSf?%iS42=0yaLT!w7`@wBF1CBluodRm+7VbBgyN%|GI5AU3z`xoktZHkWdCwGNS z52)JBT2zl=t75E?N>RgJ#SVdz81eu31yQaoU6GTm$N0<+P;qsN-ggFNb6Z!~yl_st zlQptfcXk9GjdVp$mfcCKa%#643yICH@I5`J{X2_ouDI zh~vbDPcrVd9#0chP7LJ>RyprrB)SAVdS{7hCnqp(1FG&5m=b|UpD3|;5_t5{5~)hy z(T9Pm-O!rQHkA8ZYa4+Vks*v+A!F`8l_)@|b>9Q3?pk+Zr9Qx6M{K@4aJqJYa1=&} zyqG?Z{F$jq9Uw^a;jPsD{nA9qCfY3!b%l(joPHde9Z%Es(8^UNI{awaErtPMjwF(R zA7#X$szB1_GG>|Zu`o(c@DT{_ZjN+Pp{aq>sR~tkEU<7svQ$WgEZVPQ^v~{b>jNEN zpHp29(a~yVT`^7*nGzX;%qw~<85$Soixjy*6^i42%AAyqvq+4rIJT5BvN|+GqSa{D zTS+%NP?cykT4N$3Xck(HrHgW))$l%!R(lz$A499LPwr?ngoIfMcMLD6a= zL5_$uj!21$fYA;~`EV1N$Th~IQW6UuMV^Zx*BFU|$TfH58WZ3Fja+*bnpg-wV&ocr zqafGtTENgfSp5#LSl(OY8X5{jkU!5tt^q!$pPrR{%+QcGOwdh}jon+K7(MtQto**E zT?roLX9s0eGlTU&IXse+5^e%WMaMFo3ReXhg*%-4P=3s=@e>q4w{?R1G)mvWMiYHhW|q1!4KdE9P62A_c2#a)ao86#BS7sy))J6X@5p*vEd%l)?edG6mMg0 zYle#xIw7_ik*ySGbR{~m3Jp{|P`Km*fgh5K0ogP|`JOP{{|DtUy$g6r(=~`vrDs_N zJupj|b}^^mh4`{t;fIh|%lPtg4lhQBG1F{q*|2fTS=HHAqd7Y@Rh`*)HV1a1lXx+0 zRrsBL_&3_9kJon3&iIw<$NZ7m-D^C7l4_06!xn^~@&t5l-m@*)BDZc|x4a95S zh(F$#@x5xS`w{jG-m|wlQwMX1UM2pF-WCsDchEM=p1jL&p%T2-aK&a=Idrr!xwkgf znrLt97ybVlAj_3+HK;UnN6GKG&h(yl8ro9{-fO(_0mGGqZ@Op;3{s7eV9TyZM||%r zeS92>ubsVXhqt4$gR9z(Sl4#!+@Zj@wR}Xl&h{N~?>`3?;wsK3xCEVvT0vV9b4GJs zmsxt9O7I{^jAK|9P4627iM0JJ=%C!~>A6fBY~mydS;aV)BxkP&V&UQ$f4sGC+HZ&R zkq?T(xPx6rb7|ihd>5HchIRqN(F70U)f3E}8HKeUh5H~r*wHDzv4~v_UMva~E@Cp{ zWBpM{$3^=RZ%!Td9P%7u*sCK+4lCy-eF0<0rW1v=-n%673g_}R<+i+IQk`?G`fN}& z+(QP~+f3qdXbl(7Tx!A#%M!eUGQ0=$o_GH_yzffzryFBm#|GIHU&_80eiVn`EYDfV zOD$F#-DBR1+M#;Ph3x&*!rpDELIu3#JFNRV!&`m`h*^5eU=rJ^_{U=t{*env*!SG~ z#JR^nG2!4rq(6KkZ%1x_c*J>XAQ~$)^Ml$o;{U#D z5{Co#bMODYRhFQiApUQC?6Ghnk>dXF>zv;2w0yK;RndLlAurT?-vWF&HKql4kHwt2 zfa{wFud;)5WVpViK&+_iJ0{`!n0$KX`F_nk2DA87&xbdpc9w(ki%8JJ{#QNUFN+)G zfAey++ZKZshQ zy4S^m3u=`gwp6A9j`cq4p3iWsp8{e<9qVz4STqt*&s^&Jn2a(e;&?;JUi9loQuU(m zW=uGE6X`|Y$=i|Ji!O_d2Zp!Zi9%)KD)EOuGKs{Y1tLN}34?xBB>!BNNJ{Wp4kX?Y zXB~MR$%aI@0P0fB_O?TWQG_wA(=w+mCoi1`weQC`{w1a8J#jP7gRab^lJc(-5oXR0lKY;D59$kI`GQr3Mu z9~c6{$V`h(oWs>wx6nW_JUQ#$$oKidMZ6{3gVS!stwXj4tHke$_`O>E9$>%y;3|0F z;@`o);A;4^J-CMbyq1v>TC)NE;Qf6(JY<)WNc8t$Of0j%buF(1e+_7caDHuUJrvpq zULmER6@e>LFFnrGnzwCY4{w+b%u?_H3xYeLW&@Qdf#BE*G6+6|(2WSpft>Mg>_EQZ zqGn@uX4G%f*=7n>WiT!H1EE9J+2CQ&OaK)zl|(I!ahv$f z9ZiN{L@XfFP-bsiP1WSTE+U)~OW4NL;dzk^??4qS(QZ9H#w zda^bOPS~qW;ip>5YgK1<`z^0to$|MMD|OerQUgaly%U8;ZoONl@yM-j)b_g>M^Ra% zdNan$0AmyGX-0vnr3=MAtA-0F{XPCD8KEz0vXjtl-c1 zu(Q-yByY~*ZO}@)BZNdNrEFhlEn6F@_9;?@fW%Q$Ta%(PpiDbT?C#w*dMWdfkgj33&m{#ZO($QkZE<+jbxhgF%T1X1s{Y@%90U> zX^Mn9->*>(uPO^s6NjpEvb$&{eqF}4qA)pJ-OfZ8P29e{)rLXsX9!%shdTvbL@|Wb zVkgm4Bzr70-+DoHvdMvnhqK`R)_OT^f}*B-bNg zX2I{E?a=5@Yjoe%h;5$Eg190-NCyr{+3AU3|mQA=+!2m?Vwi|*s^4ySAr#7uNI*Dr{dyY5m{Yn z%UE%(;{2AXRc^!#Tl{wLqh)XLd;BmDlba$jCx@(dxDe(PwXt^aIM|M?J772|Y*p^> zt8*QXGzr;!1BgZIe{vo`or0{s{}8qc?@-)H64~RM``(7?gnvex`yM7^l+_W;dIi`v zWI>hTiMyL`A{iDpV=xLWcGt9fEXj?yq3s3^uK*GKvmh)xPiwv`YtfZ3M zjq;1EZ8jv-RV21sv3>>HpzOcFyjl8Itg6uUBO=W*XML1*M5OVNg!d*D0vdcNeuq1R z4_Hf2ka%63)q5W!k>6^Ti#W}zz-r$PW)nwm#7)QF67}l4&7j9Nx*=L8P3Jefb?K&q z7Ymxsd=LV)9QF-q*|8~@~LZU@I<8}b>B zDstU$%n~;mj`5K~hV#EnFC0`$Hyj5pUK!ioyIr}EXKv!CX;-@wHgX!qb!;a6$Bcx< zMvG*FJ7U`83NeCfN;Co)Gh7K&^T!N&xrR=lw6&aZM8U`1l$q6J8BHo+l%e21pIJ@- zw|4#_G1~a9B&51xhn1qP4t6K^lcI675;HkamHSE2*$q+4to@{zC(f~-6yC@8lX^2M z9@|ffeRAJV3TI*52Vk~3Lk>~)TNcFz<7r-Sj(U`{HHr?6LbtTLLUoK|7f#S$k3Eh>z>-XqrDivF$yWfu~Eu61C{sX;A@6cT@? zy(_$?{6Zq@%Zwso-gMD|7u%Ujkpl;Hxdij^<;LRS0$i{k&usOY4!K%M7U2fsC)vEN zZ-5rzPOxluU{NeN7HC7VOfN6ZSDV9_V&4$&Rk3BuqO8Q(vWYJg z8EPUO)T0+Qkwwr-Srfs*PRvMTO+@E9b}R`&{~Nf4C{Qh@CW7qon#fi73IB|0B8!Ey z*XkjP#qp^7r^Hu**5Yb z=dcZhI`k8X4&6yR^t)XVlWNs^&fjd*#+<+Lk;JfWQ!M)f>%J8BEz_6irwgVp14g3D z+4hAmF*s5i*CbjmN2x=As{1HaFx!4Y8BJ2Xt)+3MWZN_R?XkeEUCL5OTP_J$;YvcP zD|T2Z>gr&3GTTlgHzj0ppenQNG{k4hfrjJlx#cCI7AbeDAR7r7G-AH85_zBAoxD=RV>TSNF2r2YA8}=Y0;kV%)GIMz$%8A+UKKP`# z5r?r|=GgaZRKrU~l*G@_OJrPLf{ey5EH*BS%zBqyD;Lxv!Z!%2H;MJ95jKj6Po^xM z3{+umD76FKSC13x8%u1dOsua3s?fId#5!I~)y?t~>ld0{W#dtWFOrG%^I7X`NT{hE z+r;|C*ajsJ%Y0CJVqJ(`%UE|#tXI1tCc#aqiS--1!fCxwhXy<0af`%y6WdUzLpvtc z@9c`0RIAn#>t>@iCf1FQB!+aG#QGZRz7+N?GnMG43uY>hVx zqg27f`U7P&N%gjt#+i~>&+xaOWxZ@O5C~n9iSpgSNMq~*4Zcb#5(4|cr1$*0{n!7}K zbwiFQGp){;P{RMgCB8P9luf1>Ub?+nM|Ce z2RNzkZCV`-1tuzIl$2IKF|o-}y#447Jial?y7HM(#@+MS-DFBXh_Yigy$U`lj>Td8 zk*W3pjcWM3P8rm^srI<#*pxZRxvwFw?3jG-bf`dD7G4)uoQAT%}OI$yx#q?1@@}&UI|n3E5l- z#G-h-oLU01$7=~6$4~fYR7+S!yjexxz({cie135;5{Lr=h+^^=6>JV(AhfV6v4nfM37Mlm_coX_6@RhV2$6~my|SeYncyQ66I%C&Ke zK6+&gPCqMAJhGhe6QBwLVed`sd4w0G87e)JznqZ=QoiVR!)pwoTWWDQQOcMPRP6>_ zHMwS6$~Y9;pk%(83rsI%s3O;M&1Q+S9!lHs$oNRY<=f<%f6Vm4p#$W`Est{5%Dqq6 zc~SJ@RmNxQqpez_&KB6f?u%Yy+-ptv-gskjvaz>T-|Y>0FTj-28jm41*LdQ53)t$O zFSCG+FX@(Mp^R~e+m~Mxr@o~`os`ygI@3vmwc*8r)+Y0Uw2hHG=^BMgOfPikc3DDv z4r`+g3Dxd`C&S|w6{pLv4f*U&6~1nFX4xCrwXrRl9&d^nuho?1Q=1JhImpaqHv?>6X7OQGikd9|WrI8kiiLjPMEObLIV{ zX+J2VX$3}{Q1X>?-1#0;8VB2#s{0*R5>j=s^GZ=&2k$RSsdTETxJC!6vXn~G1w=)& zN~tW=klpF0&MPK9!a@>WNxS)Bks;^HcPqZC*1T7Z@k zVA?WxF8t_iaTN^((k54xR9rQmRjUs8f7mw8O750lx)?k!uVTaJo_|`J4?sCK&ne8xCviwERfQTW%QCL zxoW>@*sCntZL_ZF6+j!@rpvmfH`=mgQJdv#*@U37d?@CKa$VEytc?Z}N)0h3F+(k~ zgL?F$7Wo2brL0BbI4A@m*EQ)}#|D%TbQOq2acnuYNMw)KBEN{A@Xx3gxg_$gdKFT! zIUbsi;-m5K33{8q3Yj?5oH(4sRpNNQN?u!R)E4!`j>xCN&X!B;%Y=21SZ^wcKO}4v zlb}q0JOWfeq(tME&*Kyf%wwaWvl=_1?0;Bst(QlMb|D7`Q!#BRODsnQiO32ux@I*rX-n}?mz z6;3x7>d@d6c-*4mv<2Hxs6#uhak{iCVp6SIuYZ}1+F1WGK9U&TZR*bd$y|?vealQI z`ssq1&hK*vn7=$kQt@Q0Cs)Wge{+ewEJvxmK-GPeD!9h!Rb@0u^|qGAnX<+y!{5FF zxV0My#8@H|^LMzCkm`yZR*Jeh*quzw)5uL3)g7qH#5|3liCShQ=9x#%k(kH(cw+u< z@DoeSvrq1cc}$e?SQaxm8FGkna7to6%0EO?nJ6W1&LCwb;~6XQ^aF%t=w$qt(3Bp4A8|4szfqF$cr9RgPMo&~IL+^EG9C>DrYqmiO2$L(vY)~o zjvE^ChRLF)R&BJ^7~K*BBz_3zU*FQM1dqb+o$buin%4vIa0RC(JOZZ{ZJ%-~+#nKq z+`ar1rO2!sKTRAHZZ9K?&R@zB=pd1=1LLb-)W$YE1RoW6%Qxwjh;?z6kYJs}F`{ww z4ieAIdpT`UobPdn=47?uH=3M+U*i|d3od{ro=`r1? zSZhK<+jj)0+`$RZyCVEST?U1<+mGJ172Eo_olxOH)AYoOD0tIDpX0X;#n#LwGM#QF z3SG&q&?p>j)Hj|e3Iq95kTB2gr!_K|1_1+-b%y^!;=xnlM>D1MCtg{b@@D`XTWxvJ z=;j&^Tv*eq*2g?39yPV*cf6al{|tPw;-ZQeG*3h-EuWv(a%f-`8m;)OaPhg5)n*fn zlX#=}Tf*=KB{IAV_()?Bx=(tb6~OQ;W!S~kf*0b;ZiOGh!dk|ccV23kr`RgYW2V{K zvSHJfv#PVLMss#*syegpY+gM>AM#?_u<-nT_;+P(v~qo`)|&L!pn?rg`g{DzovZNz z>ftDM7QnP;Jipqkp<=?<-W2>XJL6A*pOp%E2PH4%c9-EoC3vmjijA{BbhI(Kw>H+A zXm9Hm(tZt) zU6$5d2_6LD@cite>3xIH_;xy`OZ3OK_<-0uS-;!FDYEv3VJAsh{4o%dXZ(iqkq??* zyn|iF>0Y6L=wSRc=eGSi3$JisXNcjB%ed3DKd= zLWnzcA%46pAv$#Idq9!7Gv4pY#XDjW+@ITU5iWr7q1oPch)|0#rZtku&dE#XK?L|1 zpDF%?{~~9v-pm{I{7foo&r5WGVClA)B^nz;WD@rzj^9JTk`hVD0d}M5LjE~ZuoY{^I z?i4bQ-1^2L8ZMoV0xNO)&Hc?rplVn23b5y@;X*boXm9Ha7qs?G`|aR(7>B4M2^UP( z>VA9M0^!7e8^=@$zbog^kj1M8{2=B^khiPkV8&$rj0=II8F={(QGbb^BDvU=UajfX z8!d0fANObc`lvq^iJZ&ka%gB1xXC{biiXO9;3d}LwGnKeB3KyV9i??nQd;JWW=Ek- z78hErbfK*R?-FSv6`F56?Hfm85Nb24j9`&cH_q6|wAXkS3Ho0S0^+XVCGbh9N;>GO zOs(IpQ4KFIu>=8;-<;t1SHg?D3eP*$>SUE{)Of`c7)jhv)y#-j{&cRaE&WA!`!|kg$VX!jhLZ z-9QAv5W)^ZARtRb2-A7#eo4QZ?tV?b*9j3pWJV$5b=(>R6;}ilmvI~1a2EyFab_G` zaFkJTM8Opo6#wVcUUhHXd#mn!@A1zU{Cs_Lms6)sojP^ucTQCuHQB0>YLs9=AN z@C%vkFf;-TiFvyFqJ&Z3@Eww0(Zv2$qc)-eEn+XSXv36T_#hTe;TEW%d0q^G@HFcd z2lc+|%)bAsiVXHoHjcYFEJuIkU7`}(duP%PLyXXz1d)?M;cI_H}!$WV^@7KEax7UkUp5OmByj|j#LmRv#dC~X^aUC*8(-oi%@ zE)Ur3#t_;(@h*Rds+n?M6WQUeB6C<>698=wRa@@Ll7p%-mP}Qf!$xIYX5y|Uu~S^x zE3Rae>r$1>kCk-E@1!-&^FVQ$!pu9#XF zaXS!G!idb7*8_>$%|K#EGzjB{RI9Yuq1mQJ?64DVF;!Vq6F2vs^#K;JdJ{IP8uc5; z8w4uD`7!hX6WPljY}3>#|7Y6R@D7cgV$*e6<&Ml*Xye3W8Oz8yzt$RV44D}@{H`X6 z50)qinUSNj2uAT%w1Gq+c7w)mZ$^$;cr=(bopgw~Gt^|obB@lNm2*4G%IP0#Z0+d* z6m;XjU;`kB+63%u(6=hsIMS%LNZw9AOYx~(0nXtv*s8rg)*8UnoeS}*sb=W}>{Uo6 zBl|AG2mO==WS3R0Krozu8Tj?7LqmwFZsqSP$v#T@*)uWQ=Ubqhpe}9C_F?7NvVAIH z3F$sZs|h)%3)Yk$d#VN%`=_j%CtE2QBRBtF=AEN){Xd?>b`TU-= zxMk>1jNYdV&@*184bXY=d=iJ}1CwweE-5zfvGktKnHrwr^K05i5KkPwQ8VrMM2@-2 zAQy9*waB?X3)aW=MIcdaT>q7GdohACo97p_0=ct!_O+N$q2&ZxwZ5f^XbILwxFw2+ zTr^M3F=f)@ZBzC0hguZE zSEa>tv}<VfHxrGBM}K1Trx7Hn&Y#XC+;~_eX=hKP70PXAkId(F ziq1gHZr+bHD}238fFAW_v$4*P!`GJ8LLOSv4lAssr}x9G!tSraLvDR>;=!`iQ`6IR z7dD%^&@$8H-i5lOnq1<-0ztixzS~j73Ygn>IV(bnx&1H@E5qDcU09S z-A$Xk>Wzr+m27Cggd|l%`xe5BhvAWi_D!@pxee{X`6lSZzGl3unbq&w#N|;tHZFYy zrxdEVzEhUCO0aq!BxE8wg#cVg*b~veo;oSYn~45EDiy~>^l@xBWug;`mh4a>dL=qC zI}@Ei4^eN97r9TJiz?c<8q0C7tO@u37YyI52@ha@4g~I%Ng;D|Cq#3uq*VR$$ldqd^38bB|;2ifryduKYLmz~BG{xiQB} znU9-7;0a?|`e+|aBVyZaC+6?b7n4?ju%v&&h}vHyfIY*l*<}JQA+a-)-#?R|2ylnY z2l1h4VgMQckYbPeo8# z^Yc^R)cl}9lo{#ESHhKIR6P73nVY-bpc<_$Im!ez?nr*_kx&rsv26jlA?k#|M99%i zm3UH~ZcIea()P!|mFN8`m@8MdFVM54#A1Riy1?TTF%1+qK`s3^l?Pm=fL%%bd=k!*h!nBWioHy0L=a{EBqD1lgiGEbVDcG_jbgTx%_*-(lIooDQ(75N zRWn!QhzlWz-k2Dz!UCay#nQ=^78_v6&@iNdZiXFrj4q$^8?EDfU1Ox=%ChZM%*w`8 zG&?pYy?tFtz}r{UD9hWQP3^p8Lk4j7e}dAuACCb0DP9qGpIrI7`#2s`^~RwB_!YVU zvr+OU ziJh*$zw1u~xI?@CkE51720y~}$2*GakIzElQsJl-;z-wB*B?6ySm(n_a{V(Sg4%GE z`L<@s_kA@;jP&U};i{M=ms5a62G!{DlBWO+_xUDTMk@x@2M!GTmsZ+(~CuN18R^QTk2=PBfZT@Y#l`!0|>|+36#6n&!3ijSDXA z{2dOgYMpHkzpHhsa}D0J<>WuFFy$1UgN0k?75gNs2A^xh7l+{?(?pl#E9Q!wUEme| zl*X#a9Ze+b9Yx}@AZ#7b26OAWAZ*N)C5Kfyj3slG&P?o-x~S+aO;#^)Wvux69Llfh zSb8o3yNtGnxd?2&YKyoK;_JU=)7SV5RH67yO-?tv%E@8n*K27VTy^T5t}Hp|6l2NM zsaeFf>*8YfG--X%m9^qpML8~2tNe&rR()mI&hD)GinP=?nE`>`B#UCnyXr6!?Tf(@HYU8hqAk>f;YRX zUGCQIn(@gI`IJ;sI4j9QJ$AiwqgZ;Z2N(Y$I{kcKF68-D=pV$xDQUA_R*@qybomHs z!=DI=F#mCDb1tg2CMU+sCCL1))_k8seJsgdNU!MAKsCQtWQG`DF;N?AOu)L?zP|IS z|a(5TCfKt#vR9+^=6Bm^-&E*;2(JE2U^z=_yjZI$uSQ-J(%dg_uL;G zCQmm`G)Bp*_-rD8O&lg#uu0nF=;TPXRo_x0+ww0}jIqh!?!CQ?#ok_El3V3UxE3OG zs)x0!@*;nWdOdR(0p0caUWu)7DMky40)2<5F)eo{4&r*D_&8AoJo*j`EB_I_5CRa+ zr7V0~D+64=UtX(8O1g5t(H}(D6jp&UG~ka0SEm%^O4o+sZX7 zu)7kd`VYIa$k-|jldzR2UW5Gp^@YCuQ)=z`z9gj9V!M^1 zwI1D19&)PVbj3QgOpDTSR!uw84mmv?I&zem7KLxow5S_V_efe4x$;ko+7n$D;x=K( zJVgo-i^IoLqIkfTW8pk4Dlu@6X;JcnlvNRgF~w64j}T6lcWM+Nu`@NwKQ)R7aK}oG ziWsbf$2}f*hvwZyJVvUGa!D}MJFz?BshXUcn-dhx#2MUFcn^{}3z!JsjwX_#Bgf*u zNe^9S0NV4%s}t2xmXN{+GPWh(Z2F8%edzZe2BOUkAu{V>Ipw%(pPFL{W;h_q3A1n^ z8=iD{KhjiJUFW2yjnzhoS0nlsu&OTZVKl!rQ5|c-4;F zsjzE$tLnQH6s4g09tk9XK_faF>A^x% zL7!(Ts2WJ5J?lhY)?%o^OiJ*0!l;J{lopHDwTyOVJjL1>ZK6YC?@Ah*M6m{Vd$XZ= z7I~zN%r7J&_4hvpu+@tDADfU2`X9oLF=J*t2z#MA60$*`I$qKTWj=TENH-Ugl-*k7}=eNZD6&JrvyHN{k1a2fvP=4lSj!VTv?|t}cELMZw^?QIn=KpvrAVf1!jrIY!M?f0 z!J;H(;N~H|5NV!xUA|+kL}JLK>O;_5noKTnl!?n)qzi#ISW?$@BO6>}}^D!sv#B?nbvESaj5cL~zFTv;owOqAnNmC28oWeHM-&Fs<=B(YVjTz-VU zA@k+s@*|UbF}lQLbR;xA54o1Q{OD__Q)Kzkf5H{tN(RS4zVwJ}B?C8LM;%rHwv~)B zJki-rMbl3(ZGX>c+kzpw@Mu{8=fYQ;a18Glq~Hc)lcO6T$(9_I0~GLOWjr(j zxcQu`-KNT$r^z)A^MESo4gp?bYm)F`;?ywz8i!p#qP*s`6mmyXp~bdhEYpm9E0PW& zHFF`MCSkd*NID$rpk!d7%}iU7q{`h~;$Rm$#m5p>BxQVZaXa)`YeOpou>s3v3Da!n zHe>^lT*9;qA(4Lx(<*Ral?6=aY$WRmmjzqvBO@5K!@k_C4H2+etYw15h>ZY!{FGjv z$LqZUwWuU4M)vU+QV}HgaeSCqWd1&$5tOOW@oL;wkV_Y3%`4X(j*_~$kWhPhcszXW zu#Ra0>yXsT!xNDYa~+c^c(aq+Efjz9>B5ZSbr2%v?LQE{jm=L)%^aL5#lirk@OU6ik@hi z`Cu7UD$wmY|M@%q{l5Ap6Rf}BOG2tFHd-kv>(TdQ;76aQC=&z^sxrY^pHXV6nU-LE zJcuMa!5ZJ93D$qZE0SPMuKW|MXQ4kx(l-(IPmzLs&q(#A^Sql9qrSx7=-h-`%j zgmpKBiyZ}K$X`qg;X>dG_L@-Fz%J_V4+hx&=38nL&?Vtebukfk*m(LFARH~Al=?U& zj<+3wJ6zB>5H&7KQF^3T!Vpr0;&KJz1GNcseWYIr=}Akv!&RXbB}K~c3Ze`7^+YGbX5daXHy z%Lrb8Ew}GzV`y@uc4A=Y!c?>mebQ$>ND393tVb7QH7lih6qkPg__h_=PWWc2L=Jc` zkD8(OF_)6F;HJYDci$6Kb%w-7F5Y}M-O1aiOWb#-zij;_M)b+ zgNAC^6&8hI4B~00-@Z_&=yck_^~#0gAW+DUnV^4=cz7B7G!trFS{7{x34xa<<-roM zb$LLwV<*#}J_4{TbV)5zFo)mO7=Bra49k=0brzu#((Wt-hTD5Gy;*p4MV94AKbc+_ zl!<0*#q#6wo=ATYo=DF%sd5FUf@j6c`xg&4wq7vasyD_e!?ls|S`D7!y`VvE($r4= zsZ`Tv;xY1X15JXqZTm6utemzUBY(0uvzRxaIG0m227kg2<>U|2Pebl=qAYr_c_8Qg z*lpF+l)0Q8J!R)Bj@`S!iJV^~?eF5Q$bc|j8^)QSPYr-GGZ?vB= z`u7WYDG(-%)9tqve9ZnVkry3x=d1QXZ$W%5aYXUJ5?HeTPm!eRLf=PNacMdxG?k9W3e(NUi4&HYl?FM7u!sD&bgfp>0dhL3`(Ukku5(NNOc-iX>ut_U=TFku^l8R26yvCA~oGj#tBy(kH& zkAb1f&w#x}>x0!+EvS#;7349}ZF|XnqALQ^FIy~;7c%faH;Vv3g@$VfsA0eEJ>8Fj za&UapQUK+g=nFvA&BqO~#j4S)k=mBp$kgiT(M+0qu|H0mXEz&@6N9j{1NA?eIZ}sZ z9;;_EpY&-EcoIab;e8NisD|`-<4TyfiRAQ<$oshG!~PKyQ21uvPOODQbZ9Z|fg)I)CE?vo}G;&F9`JAX~9f~AfFvb((pL@Yue1un4Y{90`w^feicYYfz0Y zE(rnWllhJ;Lp_X_23s~`Km+%MHmoX~mu(kxQdH5DjEK)TEI{3t^Ht$qGg*bI0513U zYa>y#{EC%_wQ5(lRs>5(O_r=$7OWhqH3tVEd48ZdULCBh2*fMFl2xl<1g7XN-#LYR zrw<^jj8>L)`Ib@s^njD2^LhBUriEwODA}~|2T(vYZ9w`ayg;oca_Q!^#{Bs&31TY@ zMx)EJ6q_nc?x3)o|FFq5SdIgX!_fCIl+bVv;*T|1Utv^1w3z3fGt`wdY4uz8eWDW{@Y;7iwsrozooNeP6bAH`f%xpvcJS{SvM zoR0%yJQ*bC+Ra$vREUSIz!YIFo}7W)(KVY7;1&M!6;t7^{1Ic7tsP<=%mar35_oLSi5No-LyZ17dQp>}{+GST_9)^KCUOeW%YwW05C8ZkwKU0Rhf zER%_J76DwSh)V1RJ+{5cL}ua9P?pD;Gnt4_B5*3T;)LZnvx+YJXE48N0#W~l#^l&g zvjTZT?AV`x-r=X@aNnh0CLOVF28Qa@O^vbYi25@#1yF7Rg;icT8C`CZNc~?z;nYjILW86 z33QRJF&?dMhJ3y;`2U6wIMoS`Z&P^~s@28^8{^xMk7jLTqxvo!3$&>=z-3gqqSY9w z!4}7ZHB8e&D?J2-1e0TR;0HuPlbV;os%ZF3{5z;`#HG-HK#}{nH?msBL~XROMJc2{ zgjKwV+-*uCTkEaiU{ifdZH(NjT^+!SDjnb*YATrpJ~t6*@rLL8!9=-PAA-}3;E*Ir zki4qVf)Hn=w|6sGzfDBo81fvPoB-$y&Q~HL4JMn|;9Kg=$?8b`#c*H}NMb{EaC2>J z$RveTR>^UWnm`txF_I{_>KHl9i53AZl1ZNmUshXhBVH1$KZo_}L-f?B)^N2I3^zvL zWGSQRKr|a0D)*D)Lx2NI>Z8@><||-j`xpqbNwnZn@`lk))c{|VGrwnILf%2Q5|5_s z33;rXwkG7oQ&yM}v**RI7g&0pg3g%fFek>+Ve-@Fj$O>jIt_%cIav$V@?2zU3w2NH z418S-!`UOJ>S@gePYb#%#4M9S(J?>k6rvU`BXWwLwFZbOe%3C?hwf$FL>^~(S^UHd zZo&i(!+?+AQ(KQDRZs1CgaMa! zV+3WA-g9Xka%aLE!mX>tr4ZUr@Q}>6HIcP!BJ-#rb#6Q9nsKeTs;oxwP!ySU^Bmf) zC8Qu;Y_o;JS~Q!8&7y--CfXdDNSgjIpKX1s+v0C-OsSaqBy-*-|ncQ1&s1- z&U%z$lk)Opnc$F zYzzLvHkB*X)wJcmNA*)}`N1|@PHLbV^d}v4w}3(at+Rrq81!kkm1EG&g}0`cEetx9 zUDvJp<3xxStBwy#w(5IWE3r0P_kL0Iu{ETvO@Dy>a!^Sj(V^dPzhF~~jyG!y+&n_xZU&^;6VlCqjEO`UF@ zIc@qh{14LQ683!x+kudrlw_+RxU|wbS;p8?wkLhOCtaa^reVGl^++|$y9rMjInsOc z-Hu9Ez%1Y4tQje0`9nag46}T2YU_0$eSRAen#B{whb5chFCt0R6yHu5@GwEr6u*(y zA-5^spL@cw0Itw^VsTU6(+ulFHZghBs(Xg@zshQeG{f3Kd-@M?yQc@`Q!K0gBD1kF zKAgT2$LbOb77A$^;lHEKsYX~NkN4}$>*jd+8!bKBqN)YV@!y>FDa9P`3VfGgj+a=? zu_3jtd&_?&;-iLnH!XieZ&7@&WE*`jDv4^NpLA}@*tGa}v^u$M^vWVRGNRWIGhU38 zX6cV{>^{#-l%pSNQ4r;z&G`(m^lRe=*GP>@G4;lq)Ye0SR2trq5MDIMxD+U~)wJ=K zp|+_uUWONq;&hX6xucdAF!F1iRVl^D4*{_o0Hj$k>4Bd|tC8EfFS#gRlA`Du#E|FyO0(JjY!jhJjl1Wa-&j^7 zJwt5vi{duhNJC9Ap~jokX49-yN3(5Eaw${jrfIf6hzgf%wvFQSzW!lHMJ-^qKj5rQ zDQ5dVAl6>9ZHleyX8Rr@KWet;R#?8Y-kSJI$(H+@NK&=jcM~=|?3lFN@1ixyZMiEP zJK?!Iww!R$J&5Vf|CwgH|JNo&k2-hHcK@iXW_pI$?z0nYH>Ua9k!noWXDCYVI<`0< z%~B^|)<`0=1fg`MP40PIdwm0^hOm^G1A z*RAhNA~b4!d*td6y%F)H#76Y!MAUSI6(p(J-|2)A4_hSd@6(R<_vnkUA2=+i5nY1V zVfW89d%V&nR1X<+&mKRotY-62rFKLPFG#k>WPMb+O~zMT>~ehj>V7l{xl0ntXxisN zR4mnJ-c!UBc>#L&t~qLA0UKR)R+khT-2h@`*yuy8K(>%q*X{I`L~t2)8eb~ePQMIE zs&@Kv!ia~Bl6Lxqv@W^*v^M=37ED)(4}ahyr!Z56zZL7=q09Y6sOz!Pdn;s0ek-mXQfK9 z_g?{GW!QT=rfrI?>t_Goi2SJ8Pm5gQdnH@`?;%Om@_(4{;$hRI<^NY&o!plHIBxl! zR*s7fL#(|g4b8$oZWFJEG`eTuA1kW?pCJ~$mSExaodVL#to|mo@VH;Vx+~U+tp(DP zQIX!+o|*SRQp_ z!diq&np9z(QI@bg8qkD5JV?kx9q1k*E+p)SI_#giC@b%w4tu9kN!m$6Zr#T^^$oaF z7&+kB+$Aa$E!nX{9eQ&d*T6T^h@O-GWw9o3DmuaAE4q>}%EcX90TWg7ltXgZqvd&C zHF5^?)!xiO$@i5R0?k(!1RtiNWqIntaf+#Y{Ft+joL?D(m~ytqjbM@RY>%7R-|g)0 zKeNBDWPc;}_f_ogzp%frW`AG9{=Sy|eI5Dhcvi@Z;UhQSAl8TFSt03t*xVMc=hPM) z9lBw%WgfGsKG4RCyMWom!PR5D$hA4%C7s_Kuhx#u@s2tA*u1;rErR7h+U|H@Qkrth zG`UCKSYxbjbh1Sd@h$Zl9QOn}k?{?hl%4W6*T;r5g4q8C*x{U#Ts6S^?93?G8f>h( z3AU-*2>a)?hGAQ{_#SmwR_*Em*n6xhsVFx&4RxzB&Y%7Pp0cgJwH5Y0tB%%tdKTkV zP#q2Gi%%94fM?=9W%rX_-2Q_@SvhUpr!09TucCq}(>7gKVb;i7trFV+Hev08{ zd)3c~{K(vJ_(pB8!Y7G?m5U3{D##``J+~W^oBwrgJw{N@1b;*;kb5Qwsj02Wi7`AX zCT{=Na|63x?CZ$(Yd$FLGhO=+##$yJBjLhB^+O?gWO z$B7Gx)RM*td{VB72wO-}1;NfIr5EbI=h6z~9Vg`RV?Sl*+u=EPuqZa)?w!|O zKSRvU^W$bmoeZUzAN93VGi1qF<@2rFMOe+!-KbltS=xIopY*9r>gMS^_)*f3Zc)hs z=IKsnok=lI9|2-zn5QFBbC`JJ7<(jiW1xQrkzSIS!Y7GM=+U>BJ9|HpRL#^|N$D1y z$hSW0&9nk}%~aIS{nC8+gXk8-+jIR`n;(4FCQy(1Q-OBHHT+IlZRVjz?QjjxirZ)v zRI+E8DsQD)=rcb%No97w$O=ryW)6VLWVxH#%-({HR!>#67 z691;*_ZUZYPaAorUt|sDQiXXwv&;kBtKYvqPz?%s>YY%Us4B(;J zk}2(I-WhHUAI)wyCMO1KQz1Fs_ttsSrd>N#3Ev2RS5FJyME*=NQ9K9`Qut=LwI;ls z{Qi6<+;|&YE`8Y)e)Udr_dD>~n(z*C{Vwu*C;7dL{N4?}AsHy&16Pm{a}WLVUh?#P zzAK^#w=il(>Ui|r( zxc70q`UL)b5`R90KTqR_uMh8o>ovpstqDI37Z8E`1y<@Y{P_$%2|r7IKSzE)Pkz5Z ze!ob5zeIlThhHkdFOz?N1^@j3{yYVQZVDfSOQ`Bs;m`SdED3)LH`j!}#xj0`KVQQ) zzm7kDAWwdWH-C>m-@p&&4u4{M_)UELE&TaAJh&XYMML9btMiTq)+o z!{MY|b39IaiaL&9fxLofisaO>X7GsC1_R;nBl0G zmQ`6ASl9c)Nym6>`qHWFwi>>1O>3%3ZQJlWlEt-#R0;da0$?DiMwM`p{v?uU9%q-& zT`S=M#=G;@^0_L1hhitneN9PjHkwoLXHk+$cqEhjSd;~DC^49gZ(D(O`O4)FgC=!F9HTo`*GF zkzYc~tP%>}iG_8XDX&c&$D(70E-0Sc6GG18p#KB%ZL=K(vfoCn)hbtP#9{z$r%ViOo$qKBfYw=TZJj07C(HCFQO||di7Ln+ z&aoH0od7xN15J*PYityg90mUkJuBhDKp>j|iBG*~LBiFw^&_P~&F8iHQYRs;y0`?W`s*S$!+h*q z3)6GOhDJTT%rWfk)vL%q)M|Kgi8Z_wIHA4m#1g5ZEu>UW0IF{Dc{UzNg+tMITH$u3 z3Kz7tjT;6+d!jYVh7tuR6>k8j`YYao%Fwc+p(ykNctucXa^;UgBRE7m96~!OQs4lH0H5Ur zo15|J6bGYYc$JuIh!0XQX~LM8>VP0$iky&LPWK?i%DZgfr0Y)k}&C|2FfAxIcTq4CwG$J4m25bv%Z@qzte`& zr%;}xpZ@`_6a(Zj#7La_PX^U!Fbix%Wbr5(yvh~jrP2_U>Ih){9HY>D$h8&RX8Q<< zI!q-&*rp@}q~-u&AHX3pvqXtt7RRy=dApk;6~VF(G|GyGv((FgIQt#3Y}rN<4>m#V z1%`I;=>>%~Vo$YR*l$!ww6diaRziQ6+Z0~dhlO_z=FTX;3oy6bmDg-SiFc!YXP&gg zyUnVIW{Y{o`+$tOgH|ryeG#@E!MiVqD`iR-#Z-<1-)Z)M)sZ3KifT|Vbw4ak3>Pr& zO>U7^>ZIV?#y1 zUaJX+zB};t)fyYc1S*l8NuUao45@GEQ*|ERepQK;lkoO-pbFKo!rS;xCjPHtLt_=G4_0f>-LZjf7&_u!)awJ^1A0{LoGx3`3d!R(|NNoH|HmX#?cO&r| zUSl0Nw0~-D>$C6rL|Lup!lGsEo%oVo=J##vdgzGU@W)z{LS6Rrz-z$(0V;2&yQ~%l z&}OCD6HPatF0ol;*L@18`gdK&0KtNHSj@I#fM8!69TyEPGeCfjWM+T>YtIKYGeBUM zOmcw0{{AOynP-HM3d3vKwY+SRhDQL!5&{H5wBb^epBW&aLM>!N=96}DQJq+T0DDm> zHpHVMGC-jFyT!aB86eOnFq*AM3lNaz&kPXYTQopW!z&UXAXokY0z~Dg|BpyeiWDM- zGs(CB$NT%}DA~v7U9q(F7(&IrH1VSJGYs<=b;@b7BV0tc7_c6Lk2{EJ9Nlk z47=K9_z@ukyrYB+@L5Q3R77Dy1Z}z-GQf@kLua+5kO9lz6pKylA%k^vA9>A1%lcXd z4yMtswSo2xC|lC!Ukg`?dGZ*5WcXmppqh>E77QPdnsp?GZ~`^PVn#6pRpC>#;vt1k8fqZ8wJ2ASkixx2S!=SJ^~;u}e}uu5W%vLV-nj@vM)_TcFdUrPXQpJB0mp<`n8B=%XuFty z{UH!^d%_HlV-u1v!;^5Oh8dETkH;D^t%V+NP&9>ly&u7H#Q+1NX8wRfzyl6rjfqi= zGSH3`a6i}xGGxE5b*R5dVdcCnugxq z10sns(OZ0rqPO41D}vsVD}VGBK@sX-;mkWl3K5&!XQQ`$=*`9;+!!`sgK+6=Gj%%> z!nAO?LCEjIS`@=^35lIJu0M`T1h_-vxZlT4_YnLD92f5>I4(X534(>w+z@BQ-NkXS zqk!jqLrFMpY{7;A4Pck8L1joKPC@3|+L$`?4v-k>(@%pG6+`4PT1lLCxvCgC(n0DJe?SA635A zlWi)7Ldd#(%iv|YSc*<(uJCV7VUM;^vMKBjpnz)H#Pgf*0v(HyOE(WGwrj_i1hK;n zM%%cr3O54+NiDkn%$Wx7qPZ+WE&{NdathDD!bMd~)O$9sthPlAyQyi)#m<%RN47I6 zVQvxABfF)T51pxR;{wawMc3u;RKm!3X}Yl#9{#P#pzbJx@Kz`wwYR(yUZB0D2DD+6 zTWzp3FUB_Q$jW_<#jUO^zA%f$a}5?<<}0xdeTE=bCH1xRfJ6f$iG_~?8NSz`+}S5X zZMqPUkURUZE+s<{=+4AK5M~X8rHBdr5D;H`LJ+s329XfNyWmOF@fu?8=l_($?!1zy~3L+t{<&41Cg##bTj;XYXJ;`@lEjC^Hkqrgu4dORL+jYz4WD1kB1*#V!ZGAa!#gQ2@9MpTIgOs3qFTOw^Kz-;i3k z`B&fosLt2)D|DY@&burv<5Jt0z!*1H)YxD%ni=1fhThT|ci*<~x(KMc1sc@G4QIgT z`BRF+{jm;7jT_EJKFm~NOS66#Ra0wLqr)AA#fXtm>2Muw)?L8B>0OrG(HiySws5)< zg}K3{vPBy8RIEecM*Yk|W}`0E`|1nZA}WiD-50YQSL)mhwUZk%j7&G`kDMkdH63-5 z_MFT3BzxS|bk#~N=0Cdx;s4!vbYW&fMvKrpal=9w3Ax1YK0+dFPZ0ifCF+Xw$zBaq z{e80e;A{=>>94R-X7GKF-d^=RGw7}p(Uj$`66-93?e8p+stj1Z4XC=A%a{scV{}>t zwUD|t9%@gtW_hqg0ZLW;GEntb#d%^j!1b_VcZ`W?Oz@8Wr;Lgf7zMc#mwz1mK2aHJ zyv=?4@L960w>p(XFmVUt4>n32@(v>E1$m0a7y_+gDKr8-L>j_H9AFgQpd8H`e;NFilA zItK7?43HtF`~$g4MPw+54^p>q$)>mt*$T*|n|~zZk<8hW*$USgj7FQX`hxe)d4@{KP=C>^g|`}Y5Y1*0c9Eu*SW)QunTl?B;-kc|QjQt6^SK zfGpe_egWQNn$GsEQ(B3-v)5?ig#j{ueD_?rjBKoLbh1SvY+LHJt+=FYJszA30*x7RAEjlI~z9nN_Rfaq(WX-+t`&n7^R+Do161*-l!sUL!r zju$4Jj&xcXRZ@Xe$D=;@Ax;Wnh+}AG3cxDh+Y7{(aexzjNl3-TrYl8pJ$j%70(Fb6 zm`V?-5(w1&4^2VSfWQkuB$1rGSWl+F_b3#&6|V>sNUr>$K%9Y7n}id;6glu&Wx~=W z;th-Yu|-R<=_vP5`VBWab-5B@Q~?db5#*e>=-ww)5E46~L4RnF2ylmn2Cv7Cb}jq} zXb|rx&>%hw321^7s1PSz-Gv6Rqku>AzLKE9gHymHIMZG80y5s!eE)Z&+(>_ZCtN9p z$HOm>AmE(_)#$P;;KLmR9N*Rv=&v%^7~ht&6bTngk;Jl z{5}>gDqt>zDgCVEjPkp%qGC4%+J?rG>nYIQvKf{#Mqj(k&Oa6quQVH zp4KJy#446Fmavr(oiPGblDli{gCx6y9v!K%QEWt(GxfuODoli=`k-^tdGzSS5-TUs zqvL@pRENO4N$3$iPgKlU|IY_-Qhhm=lxi6Y(|}t!3CC6`I0+AE-P@B7y1^zmk6KGz z9002Rx;PIl)POcdo5`TN_4bOF%uG<_bIo{dEwQRH4YXMzRSEx$163~sNopRpL8mp( z2e*7)!$$A@6E#$I&P^(w}?bN-;7n<0>0QB;ea;P%R(u#hP>k@Lh@}rDS+kTdj%u zhRIe9Qam#RpM?0Dk`h>y1L7;uFI5+ccA-N`?NvY< z4CAq<>KjE&KZ&zTWe)$=1pbe%ES&-cr0%lx9C(5HSBxcBDZSQ}C3h(i3`;hsCK2R1 z(R90b$tmf|>1r1%WHqqEJWOpdUabgkzK95tuE`hdVjj;PZ$+(iU79vZo#F^^_%Ogek>M30EPP#ikvE z#Lj7l|FnY$aEG3Dd=<6qEAS(x9e78XcHpy+_;6_cLNuA(opxYH0bBOpB~3f*Ysp4y z6Ps%8OVG$?wk2r4M;Ve{{y1DIrpMxNrbSicWaKvn)$*61kxGg6R2`X?EZ57-myr_7 z`4baEom%1&G*gVi<8_#+9Ahc4(rS#r_Gz$%?n!H4-;QNLZ|~-<)rn2&hPp*pF75Xo zH{~ian^|O()y4%7M$5@*fjO_)-F#D99%Ve#9L*(0ZA8mkx@9HwpX->C3y;LY#azeC zZQ0MJID9fu3C%rUch^6WFUB@m6)*C4=*(oEyswGrBu6oYu}xNQo<42*H2e>|%qNJm z$$VJ3+v@Y65U}sDJ!&&%Ppe&dbJ(MnvGiuxeO24}4|}pMxrD6!7r8QaHx!dRt&0{m zC&$Md6Rm;fXmz4>)nubpYfkYEVNU_cQn!}!YkIS3ZhdT$BsZ)*j<$!XWOKOz;{u3p zD?GytMdJ-kp(b2qq#qC1mDArox#u5vDyRuLaQFd`4I5^gg^3HHpmW-w#*noZcL=cv9T{ zHaEiDYFHUOXy4yc)7q3te>ItPYzF2Yj}>49+9~Us(J*sBeVb zV1qiIRRH&K$*Pe-SB#X_4e!+|RLo^&Np|g9m2T)J8`f#dd_=1Vv`lx>?Y^e5QB0mP z!Q=s;3gC}aM;ya*r`s(T4o6TS=X;U8htH^OtWJ&)J!{rlEm-~B?7!rK^Ul2J)HSD{ z$qjgX<6*^n(N+m4_caCkaft$vDS8hBRS*GzH)GolgmqBTcF>AurtPQ=U~brHm%lZoGUJnj)0I_I zI4h~xkdzI?${e}xIX4L#D`jpBc48}Lo2D3YZSVbrgu~k2IV>le_h;H;#9d8r$J}G- zHZF?DYAsDyKT!2IUAq#KKQus-r&w<^^D`Ip_A0NLZm~u}tMFMRR#@g}o>n4NsedN} z)q=TM*b<%AKc5`UdWiy*dbkm&`s-miIhxm%Q8U%lhr0qrmn6hkj;1j7;Q}DVdhf@3 z_+0nJc$1B@W_Bh%a~x)g{im6bT2Gv^k#aFTg#;7J&U6usk)3H3Ora5ID`^TBfy722 z>;t7(0FR2u>`dKLS6pNdsxnfl&&;%*o|c_SI#6bICcZ_(q+i7=5+)^A{$Wy#P|%qR z0^=!CNLiv!Mm-Teby%WrOr%mXHVLCjP$is!{$a7uDIu{lbm|{EB?8=`L#O|V9qr%Y zM}$uCjuJY>XCVnHA+!`C64l+%DRvYXD<3K;bh^~KM1P_-+Sp=^oo0P!3!eTBr22MgfS zD6vu>Dl=Ak=zHCCsYtB!V56*PI7`F4SNa=5OIh^4Aoi+?B*mU;&hXJjg+xPJI%1J< zsVThhC@kC>F5LyxL_i5<%u0J`28OhUWEw#3Xca%pvEuOns68Zf8qju|Kc@ukRuv#- z2?=F1L>EFr``K)TvONNhb!?U)V?t(Cg#O0-`~5(U?THDEpem7=Pz$cqm{6?m@u1KF zw)(~npj7$@_23V{(!|gSK7cJ1G#(XNauFHKn=<;dwcZ*IHr2P(#>lD$HM{mZ4XfJJ_>7XiHG3 zj4fLljE(n?4OJ&5s@q7wha2vAOec?VzN^H#$~ewDfhyE4IgW!5Ww%nq8yex7F!Nx% zkK0ID#?&-8UdCw{_tv%ACYzYTpaspQkLej35445N`-zZUYN|qMuHht7NhO?w1~@aE z#3X47?5QJ6fi2So_DEXJkP>=W%|C$E}CJ+kBTK2Lj?`at7*+WRa$ z%|&ULBOtrS-wNqn_%M8)AKMORU>%b5F8nd_VJ@#{ZA>hW8NkG6$%co#p0p>7^^=&> z;}Ugzo3jLCm@ked1u@@fvW!)I(MwLH9h1wzqgmaW5yfh$66OV zx5RqNVB=XOQkB8R(}AknWGSY0*Z`eYJD*_VXo&)p>K6i4fAuRT*my%3HB%h{M}wSj zFraV+l1=h;L}%zwWduo2&)!NzZ*rjlSIx$+M- zBBD=c&WIwXNFibvwFoN83yNrpf5)PYF?5^fxAvP@Xll5Tuqv<=5bdrgj$+|PLSkpQ z(LdZs1h_+o8y~{1_FwQL!i{)G2{+=iki=jRwG0nNpE&%7QTIKfk4aeh+_EPY?fqf2M^`!k_R@@N+H9CNG)_{|c8t=ODhb?q)00A6i8MvNgjia3^zWFt)x&b zKio)b)!}fXQE1U{qd_h)+-OQtp!g2q#y~*oMu`1|7}kX57(yP9_EX zrY3}Q9fjZ$eLM?jyG^K5qK~H)AZCd^W;9AyqmQQM$`xri^s#A&j6RxG5xN|6_zwa( zwkP^Hj;chWk5|K$7JW2p6OTR`Z^WXHN`Ij){j;z%G3J3wkU#oZ;aj$IUmXuXtPjYHmM2zg0$bFCTR(r%$s@pvS+&swaE-_%s< zo)RS>qmp+4Rj4x=D`Kn5@S*H(iqPGolK0t2S;pObQAx(V6&EvuYzy}`gKR^3RO{<) zVe>&EWS5$%n44=yzO%uKK!5B6{vH1dm-)0j0DFsTt`c+ zm<$5fOQb4;z#D<8TNjV%8A`m3gITOilbNnnUL5S zK=uzH69Mkf0pzE#t33rjB7lr{lmIe53rSQBf#>j0bfCK$K*o*&L+84Z0?78mE1JWN zt=xT~-b=>2+AM0xzk;+#e?Anh6w~7|xX3{9;Re<6PZ+^kcVsKy3YL^FB%C4lqyt7w zL5X;ZLmXJ{E=XAAds`~U-4)%OceT-+f=i2%6bb*HZIsoG=lNz4*=&QO;w#GU0?A*64~U^5PrY>Fa-%_je% zYsEx<8VIjF!R9+qe@L+Ty>O)lo2f0}5oUQ3I5EQJR;NlwrH=j?NLP%zpyK(%%12)e zBT_IpIWbWiYXyxBA>@w*lTFxSGT2gYPF6?iFRr%guoLQr>fq)Y9K@x22kxJ1_U@w^ zI4Q=PjMcU5a!#DD{ zuepUTth%9QHR$UTA-H(>I5uWbr&He6)a8Fltf&kje;=qq)vQ4Ud@g&JBHozgaET2( zL`ror(J|BoTc{xF@ z4K7>?B8f8LLVSzDg%{!#feXo%KU|12bvl|I4p%8sNI3(HjEvl6V(uk>y`Sf+$qV*+ z${ApUDdEt75RXGHivfd##7Wh+KQa} z#HA#r0L3iX0YcncE+tWf#pjKc&^*NUxGPp324~o|Rs>6UC6=sO7OWhqH3tWp^-TlK z@#8s}XckcyL5NLhg`da51qy1yxbyWY zt8lLVNHcc-?pz^%SU0^wF^BnfV2yijm2f&t@534JlY9zoI2#^C3k>rz72Z1oZqMc2 zekz=cui4B1!M}bA#VTJ!y6_kd7Cs7ZG5uZ$`!RtZsI(5%_P1)H1?9^ReVxr$R8#|O z)qoCe!Dw}?x~Vo1Y-~)x+6p+@hk|1L!D+SO>K4d|Z`McaBUO0V=ozXHwhTn9G^&~g zJ+4)=*l@{!vd)?X+FFlk)qvLO4q&#+hstw4Bp@*jsA?*To>^|dY%VUeNC(Sw%!2q{ z3DCrTC00&?WQ%|*RL2UE;qyd)E@p9DK(akasTQ-J7{`c#WY{WhV=E&ek8=4NnxPGC zN}xU2COD5;OI=(ERQ+}FGcTS56pYvc@m66Rq1pG@j;QVv9(j7j&e0n_3tP>7lY$)0htu@`A9|*ulj|iAFnB+ zdPNXrl{0k(2fAvRxN=04$fG4BuDsosgj8j0%u-a@qfbg)S$A?2U(JK6#FceNS5w(E zT=^{^l1NUDll}VPkA?UiMV7yWR|HumSN_N{0z1_0LsTI}4jix$`KIy$M~Xg@MtGvxVvyPl5c`?1nUr$ky3D)yDS+t+sy|B3kWV|= zJemU;J`;5~C;duzzX$M?Xc?DvzLeA)ZIG0fY6?xjc@CKJfid-{@C1_*Q&SK8u$$5p z0Uq}?%8II4s#FN3r9H}uYtH4Gp!Yg?TkBlC2JfOpEuE{#CPb#3!lhWas7RO6R8Mh~ zfJ>U{N}vs0-ak!sjVp5wX{wYt7f&`8syG9;)+eEg6G%-hN|OlhNMe>W)eLp%LYnHH zG1H}-%7Viw!<%HPs#yooy<%eD3k1l$;!@H3u!TBAp!%17EgSzL(?N8;nJ-1m5p~D=o^44%%7!7qP5M9)3+tD^#dhVRATn`09B}(6|=|Z zvJWcajoBF&%>Hgts*6#NVfNTU1#z4yTKD{kt#cfXU;mCxa2~amdiftf)n6}95Y`az z`U^IM0a!ma$7{l5h;L?WJ-ulF;u-Ad6~kM1WU3A!6rY=D-L z1l{%4v@e$}MMk?Zt3+ZhONMtPEcehXYFM##fG zknx1u465ayfk123;WH47Li0rzVu#WQRLLNhn7D3AQeb8dL5AhF5-Y97NDVei9;}^& zS$fNYHpCu2Yp8;#fJMQI#2!9nl-0&l5zMxe$i10by&(3gnq3`xs`x5l<9m9Px*D3G01QTBPL@j57YKA58;q2>&5yRv&m+dU=QBV8tnjA z**G-XK0q7v$W-;&xi@L4xH9Ju{i4j3+CqNBEYYtF+th{V*M7D!RSANjPZ$e=nN<-c zJtnYwLDSn41Y3iuM1o*z;YtmH#fBpu3p>D8-&jaY88+zb_T!o;Nb9EK%t%?qK63q=Qwx6N`rG?;6Exu3%O9f&G6|`GAq%n% zw=Dr9=Gjnhfj0X(ttQay-HEleG&YJ&a3ubD6;K6GMCv-)c5AHd)pIoGL1Z~q!YRv> z(A;ORn^bN33PxaPj5s`5z&~n&4 zt#)_Vin2^r65S$Z@~glD?FnxuwR0g+0Gk{1HT^nE^XkK6B7A5^XiG(U}JQAvQ-Nz8yXGhy%^gZ8`&0A z$HzzNgJkVdwHa)#ZQI(I7=ib-?e9=0QCyeTUyzUr$rleLgSJ^VY)&1C7}9$fs3FcLTT zav`I4=yeo~-i;9wZCdkr{J&Ycvr89YvX{Qru|PGyuVp$;s|_c00H+9OZQCTZ*NjLCgQLt=_P#va9)Wrl&L1q zw^60O(B34~#FU86n4N@~b24{5m8FqXGMnDjss4kFF%Om5OJt4Md8Ol!d03kLeY0+} z)`NZ+6^kFTGyeZst>&#~3UAbG4!ftS=9P^i2O~7gogR#Q5}-a=Vk^o)>0?0Ee^A=}Qi4z|KjSQ%%FBJn(sQBA zuQb=`TV+(UfO{I5+&Q?aUn8pIVezFxKj2G3Dl|4}DGKe;Gi7d+4x1@>l?PRs8>M5g zn&PJAMtvN-#q8WDe2eBr?Q$<%k=!V9<)0gc$q00AjREi!DWn|sLwzlgG!;vciUsC5 zirjB_Y3VDi39HJqIeZWDUMy3Jkl2|i<)0}<1h_+IO3lZvHV=M8rWD>$GNtfYNYY0z zkQ8Fvsk@m{*iiuFeXRYNQsYC_mQSV>`OcOpbsWl*^z)bQ1uQ_arAl0%{USpN1nU;nDv~30 zsZmxtbEI?`Dm!V$bEM2y^&BbVspj|&8x_hHo_~&%DZFqK7H-Xv+AFR#9I1|HN6o~S z`Quogi2jtI81$AVi|ZU^;gSgTVxa9dWlYK9*+PiLGQ?mqPH;EU!MH3SvSDO830Oi4 zS&F-wNN#DPNM1*4VI~@7<%Zqi%92Bx5o5_OH|#^Mj1|ufqx`zeZ8EjWkC-L%D5J-B zH}l9ai}Iu>^syL@E|=e%RS||VCa?=Z589J?^j*|2l6mxFxY9F^jM^k*9_eqyGLIBv zOy`alY5EMlXa3BiTQ4Pr$;=`WBdEeIy3Nh~!8v0=qXp?j0fuKGT(G%T8;1>bF@lRP z)P{P*TrxOys5;()9VRzUG)9B~Y# zu`!G|Y^k>(B0M+wT08oK(%wGZ5-?1Y}yii z7u3Jx;f=gLE5UcMep1MH`5qaBJ;oQgQib|19$d&g_CtKRkeOBp$`s7B+Le%KQy%*V zO6&j z-+e&U&6F^QR;nO2MyFNKCwukL5(Ow#@h3plUln^=+s12T9;4(ySVtgYBxm9$y0h@t zGHRxRWRBC@i1OqxNc@TD44tu>;3hsx9wagZL%Orp6ZiUrg_MisFC-XhV)BoknqUl{ z&?*>@K}cGFKai$y5lGAeU>_*O0(ewJru*u_7bUdjK~<*v>VZ$Kr>CX+66A08XstEe z7@D#ksf2IQbl-DOQ%Slnx$;l<#f&Gp1;UE; zlG1(omeeA#LZoWqo!Zsw1|aFTDjZ|tb!2@rjeetzzSp1}N&lXNE5#If3^p>&_iBS` zG?29^i|YYPR0^a*{hc^t=_sYZAhwi(H%`EhuU|S99d11uOCgn*+G|QrWG*?R_AcTq z5$wHowWcnW@P0UFUfnU|xGPp323plx5iH?VSh8wauyUx@92{uYHw`q$tAn)_fp{xe zvTD_pT>UE4NtEXkYAW_tLm6aszGZMR-3W=nzcosC*(lkR^#@Qu@@8(#Kl&!TKu2Qa z(#=1LW#)ZJ5POrsXf%|i|K6uUsmdf%a}O|5NaqQ4;B7{mOu4T~`cp;)M4MS8T_i=@ z6ju02EL>z6o5|C=YBg3fFtjIHbsluCj(^g0dUaxc?k&JtTaphWiwPjKGhfT^$QH)Pl(-q#nYPW~(t#V>=ogh2vrXr&~7$>#!_l zC?J`Pwdx>jc|b-^ky1!|K=;_tH1ttTkj2JfoHs&#T}N#WRfnHwwE%TktnW;vYz3D8 zNSB@qs}ryr9xiFujhFgB6XstvHi`*TqDX%Rs#+gFe{ZFwg0UUV=HiyaxDf}hLqb*@ zzQP|mf9+jO>7mn zahsX6BgKYgPZAPs0@qKl3C^R|QWuW{s{XpDS$m#jVPfkGdV3YiY(ncA2~9uGFR{WB zSwE*lsuEW_3#b-E*0Cizt$#kq`gn-~lzKP{RQ>g^XDu0#&roNw>G-kwg{E~cFQa-Y zitLz!8mXMAAUk?mnYpMhBTD395u_?#=SxDGQf$mpRM}%pkPxx%Lnwo{2UQ6X>yE0X zvS|?U>p>)uoYz`GVtkK+#Gk+`0uqxee~=jQ7&=NK9*`mjjx-1?Sih)U-AAAzKFMIi zD*sC4=IIw4F-Sc%hp?!CN8xtlxfnQ1NbCfM{lQ@(z#SSK{sMNf&%%!Yhw+XA4&$?s zplCR|4sk}_U2qsX3V7F_DG3~oopy!eC?1d{`mjEW$nm~5nEn#wNBZ^8;7Tz)9wU?l zh5yf>8m-F$#e6_vB8E;N!pqP*#?tb^!8zJs_{KG@sVbeG48Mcgep6@yh;zV#<nQLV{i* zun{5{(p?N5I|?`j-zy1&53K3ETZbW@JzD1;8l53#zpf3RuSDsQUj1^oQcRA=up$xo zn+&Sa6=fsvtnM92$$mB~EFb=!-2h4OyD2dNd^*7Id#vTr8ACHVi@txrXna`}SM>c} z8zq}^I-u{!rJLuIl7@Yc!DzHTOW(cIutn1fpt>mL{xySn(OwoQ7s1?3L4{w%!bMd~ z%zciitqQq|yP75Yo^v()5%=_J#Jtu!fwlG^?g?F<0Pc@Ni7MbOM8@&yyqp*mKe9iJ!qO0f>_0<<4M zO10S9d_X(4irZKg1KMZPy0-^tf4)s{9<`RbcqUNw*TscwXu(W*J`?7asuG%@`>wsc z?0pk+7nW5UjIJ!P#u9RWk&PF!!!s32O8t=MVZ^+D_Z$tL?k zI{Y%A>aWAQG+Pr~XEX42@~Wm0x0O+$0*HG=xmR#ybXqbY_nV2ncnDp_m|o{gLgJ>_ zZk^Uzwy%on3D3MFw*AZJ%V<_MJV;yn8K4S!Itz&tZyjoHj{DJJr;atZ!s4l52)6AH z#)s=8jb;P>3|2>itKbY^JnL7etFaGL_-!Q3>Xx3GpQ{*6)&IK;nW(BB-USr%M^JJ~ zCaEig?}d_BbI1_Of0j`pMwNQWO4H7ze(blfV5dEC89~`gP;0zVWUjs6)?Z;EF^Y$d!N80f9f- z@Q*nV0q)Q-hlSX+_JAJ|bHF=F%mJT;1hPeFCqy`?yD=btfZL3Vq47N;^D^D z3&yp9oJ^PVe4q`52oA%1ndxfI3UhzWw+bG%8)FA?aT)Me1DG`Wu2BXo2EY0_gKuA?o4xTh)5PO&gMEL#0 zT*M!1#^G9{GNSz~QZEvbFa;OB1PixDB=(AHxn8xT7qrT~(z$Z}af*z}oosC0Gn@8T zQK2(4o}1@Kn%|SQ<~KDVyxma8JjG<5Qvo$?1DX9=Hk{F$Q?b~@EdrA|9r(%xGR6eSY;ar zDZQ6A;EV7Z;b?%5ls}4f+-cQjt+^stF}`gD8D&@()x&s2H0_628J;X>Z|5mi6$E8q52Owbw^VSbL2ljyW0>JRPhl(5VU7~~7T!=h zih&al`zEBq;ZeC<>ve3Sw- zDM8KfrC8YY@WYg>m80-AQ1(CSWk)l6;6I^FH|b9$XRoq6sD!VxJaMQ@GJ2(G%8RI?h^LIfTNkE8LlotvoSd_2wU0_%eE8T^#^x}0C#9`cM`kT1pEka7w;(G zEonUV&eHP8JN60l?Do2-pfD_%@6Lif<(xf=c+``V-D@ zKWA8*`moxFhnf%e9-|6krfVDIl7=TXbVy|SE`w@#C*B~Un+X*=Q*S&`F&DRGPHha% zystHjTe9^oeA(fL^|N{JrDB;OB{XKZ6& zZERD}*l6-XWPq-qp}$@tm{o5=&8BV&QE9_3f{0l|prV2{wuAT8)9Dzi3koV^&Y$*Y zf{Dq;*eE#VJxx)+ZK#x8QBe>alF6P!h4%~9OsrZs4#K>4Dx9Eyka+lI_-R6&W0RlL zF<1dQsrA1({H|7?N05+WJM8sI@l;uR%gK-4EZ}9xj<*mPZtvvBEIhhAtMlYGhbxvJ zw_;^=vejr#j*eC*wymOQeA1+95GPe@Y2UA0!QHfF0qdd5g4#%J6pTmn%B9Mi5+34V zoE`!hWgr00#5vpa&vj%nH*(%}tpvxqWUmvtQiCK{sARgG*5UyCyS~OUxTk(E& zf7SYR!Me&i(cbGsgTobX@pV_OQ=)T5-c{6_zbw(gP26z_$X@UKj6WT8T#BzbbpA>x zLC4tuI)X$jCo3_FAR)&ih&H&4<`Qy5A54QBp991c$Z;3sLkAphB99foG47in__!t{ zz~es2jmaG@hBmg{jPOD2P$DY|>m8C|JM;#{FB2QooP37a)|^3>XCX<|+k6(`&ZQ-p zGQ4{phjR|370lcHe7q7?CRT!a3NI{+Z4Xht7gUXMu^+8@2`1@W(@e;r!)Bc18`MnE zz+;*%T2-tNt9`l##Gu)yJ(+!yEb5AVEq>4$OSR2eQBo|`jX=!NQiW$=T@~wOIPZL@ zQAEX*z0-DTl1Pf$skz)=(c2AQNo+TdUc?O2ZAelzNE3vOLI$ZpYm(O>wIM3=KAWIC z>cs^0XLCmJp0Whx(Rii_^dKRzbn5cCkg#LvPlJ@~z-L}8{V%ChlE8`-EZv;IgrX&J zqR|iVev&&IKF9XJ0e3nHXaJHC9Xhb7HddR!BX*9mI7iX5Gv856R4qJ*l3o-33e@lw zQ)|M<$=_OdDLgp$@9EMlFx&f z9K7Ac{vDeE9S&6OBVFPch3!?1W{uRg)JCROPv@tM?+^1C-F!qdN9u68)#{n7)Tcq* zNeHb51p)?N4G#iZh@IzcAUPQ%iH^rU9~R?HK;fHtE3x+BQIo|%y%~%(S^;Dz)h23V zgS82DQep9K$B!q$L=pOhojv%4#=X(cq*X6&Z*dHJ5XMnmoqu8jurwkEY7IZDlCoyHG< zHZ*EvEHasX5@(*mdGK$IrN>=ax)lmYJ)8TLVzmcj>CFa9^l(&7UJ2)={?(PSyRD2x z3!9VUM7aUJzS|cL)Zcjb(sI#l=?My%UR2 zSKiGc{OMlJyKH<|y=5h%ZB7K<$d~=S_*%=O5y`UEeIdfFy)%QDax;pZEUD?#^KoJ z8Y>&hJawdAZ3eAIFi9V9S1bMruV60(C7R2E-rmiS=C-Msj|SNQYNEESF2B3QI zX#*y*TPNx;;R#5s=}uAPMP#Z~8yN}UBgE2M!|+2tCjW%M2&_sSu3cS~2*)!qAN5gU zV%ookkd@QceAJa@UKZ^zw!|;`l;x%>;G>y(`dmMY`%99ZT`*oU!IPsdI?P=sa*n zWvSkD_%N~QV(ze(Hlc$g`hfmyB&iPQGYJD0$1E)XD$`D<(>mnN@}j0NW$+P-Pax3j z*R^T$$u^;R)RB5Y9UQ~CTC6OqRXj9Brj$KRO?wGhwQFJ)PX$kL+J{>domagp4?AjQ0V_P@tUD*n@zjv83N+}`J` zCn@Ikt3a#_b9;!z+zM%R+t7ZTNR1lWo{9ho^j5@|N;bF;BT3cZ{u^P$!!SvM`(av_ z+y-|q4sA#vL?}Knv`H^$2KF~L!Fbf8YXL5 zhO@?`c*NHNu`-PFVHS^AlUTP+^JXGBi)qG(C7b3~BT3aX4-*DF%#$?DHCl(fra7E? z5oEim%DlfdW~XcPJ8kmtV83hD^=)Md{25|ht2V>8g+{2d>??bXSy&Q_g&khj^{!*# z*tA_0;@B_i+^%I?4etY}a;mOMznBgWtR!7gzv`%{1x)Xkoz*GD^!^tRE5r0!{bF5a z-8Q~oAhM&zch8EM2B0@7zFV>_eiTWnw)nGz9}itDytoyAtpMu>6V(5V%dL7d4-y0YUtKsnoF8VJ|#9B$V?gQP#|AfCGs9) ziHM8uH%#$fYgrD2{9Ny|hvOHWfhPhesx)|_ABdGeV7t(2xU5)?b14RH{W z8#Tf6)l4eACGoYymh|Xh45T;(NvhU&f5M7~os!mfA6lE-*7vNEv&9H}Q5I3nu3utn z01tVw2KXP$1yvj11!XmWhfW4r1s$=orACB{WZXTND=Bt*U0pNObh9{L6v9Q9|@*D#7) zW$2!Dv@E*}WzLfO{=R|zy_NmFjs1Ni`Rlm%(2eks+h`eE_$T)s zN>@iSTfOJh7VPD`VG>s)Y96loKr?;s0cI1&9$TkO>Q1Z^<;q!q9V{nl@5a8S$l8+c z_S_S4=B!5_P!rY%8)MBDP3M*gcShV5?c~= zT5;-}cx&zzf$5tK8O|D_ekJwrL1 zhf&iku;>M3{*mt!O?Uy;)M28YmZjcC)F@py4u(p&IW?Bn@z5AKefbe>;1V*p&$gIH zHVS5#U-nk20Y0mo5`_AhQPZH73OjUkt>`FvEvi z!lu*=bCGr15T8m!mt=_XNun+B=vK@S*N~)&RIDPUyNsW)u6`n|KyE{PWV#_{?IITr z5>uS_Bh46JZ4;nJeY<9iC(CLf53Om3F+MJ4Dsi@AwZZr>)$|_gL(ghx--;@u8ru2X z&>|zceSN#5dKIv*w>v9AihaEYh?QYq546}+={9T9Wm_Cy6cR z(PfxZx8N&=_4&DTlf|66pVA8CwLZ}v+^J(NV7PDb$C{(I7;E65&e^l(@NHzxP_R4Pe9gjf(HB_=0YvSTs1zU+{b z3gtyd<$a%U3QVSIX8V zrV#k%)qL}M{`dc}_a$JG6jlB+19LSnz;Gi+3d;11J=HJ=U^|Q)1Bk$Y496&7Pj**! zcO`XE$4obfi>Mr0D;}-lv97wfUU;CW=pyTVi;63#C<>w|qNuB`yMNdHzZXYFMr1}- zW>!Q^%Qt)vo*GXOgr@kT>81L(GN5L~&87L9|+0?B|S{$d{cg%nkN5M@Zl_Iuz}$i?KCmx?DGv|f}f4IV&jmrq3AWoN1LU|(Pkaa=Nxf@R?doz8{u9YIt?8pvzN{i z{!@7Zdaq&yqBmJ@5BQ;ulFmvq+#Y~jYOz0d5)lbq#O(q1D2#U8ZiY{diJvChu`0o4Gsr?+{4tjvB4`Uj^1o9PZl*Zcp%+>*VkeM9>9MTGnL%%KwHPb=B=?djiekr{d)2Ctr(Ly5?yN*Y>hQG&JA4uF zL@nh-2C0gI&Sq5VGMEcHx`V534c*){4y)|?8CQ zEgAo7Krw@4zI-V3H%>DCJ=lN$_XxkLPOAx^9A10CpCAv7pM>(z_?=HucQ~>4F&VIP^Uyd@aNcMr53M`jf(+ct_?;F! z0-;p|LhdIA#E4wk;p+@bk4%$~PPfWAE+eff6Tt`V~tr>FC$fY(!hz$r5a?+P5jCSAt*h@~D4TOaIZL?*irxor4 zg=xgxOIBKyl)nQXuFXpCC5=Pb|0&-|e(w6rUCN)CPVQ19zP$igvyqwBxd4)zelt8& zOy4?+=y-PetiF8U_?=(ey~|3@wc+4jBqn=9IhLXB zdXS010Zk?ScBvB>YrteG4(aUXsPB~6=uMU)AM-Jw3ez=VUKmXEKS%vdgPjvO>aPM- z=#Dl=jo-%xVG&=EB}e@w@>Gq>js>(xssOc;4HFp&k)!?y?Yo^E^&fSD%h79Li@yh| z`E5~grMfKjzC26K+?<-HR>(+Tw)E>7d&$vlk*Qv2kgCX3F951NW~xyi{kFn9nd%{f z0u$@rIG|JD3;SSSmLP09Vy z%Y_y;c!7k*GuXO0meH8nJ6mLUA$m@c2|LOnfD>gIzhY+#;PaQ|wwVPhl|qo-V3g}F zl@i%N$cahF_|H38I-M|Qna!l9aBl><-XqW=)EEKU932srA$gt?nqcIhDk?+rJXHeJ zq{Fx z-5DRvjWFc2$S+SBHoIpVZZ%2XKgeAN~Z@A^ap%9m4N?95p^B z*L+OK?cC}R4ipF{|7fT>lzjg%pK_9*E4irzp1XeoWJN~v-#~sLhm$2xXF;Q=1}S{re~L)H;@dH(O@=Zla%{lmk{&N>H;R%*p|*=r8VDxU2u zgr#ex;%rB`qF$VDfPR)aq9?TM2daw1l}CbHEmUOuOHp5>{4x%&Lgg1`S*+~Ri40`c z7gmD_shuk3sYo|)+<-IbYcLznfUQQ&gnQGSEj6b#Rcbm_&nq^aR?Qjnobg(v4(Hnz zmD2=HR){@(?VDOo#Vu8XeOiSsa)}|3jPGFo)v8Qb zC~;L8y~W4|ChRM7Rc7PP7MWU=2}Jh#bLP#ThyQh#oiL~@l2A%|TXwc2)RJBxi4+1* z%QJe*$yuJ6+R4(E6)n!Z1z(Zk40)BmID;8d>LxIAmmme63*=>(;9r_x;%NpJ z;q%r7UX0=Y^41AkbqGsA763%J91*p*Vhka%s~D5N7()d3q%OwXibLuh@Fyt7;3uJC z41VY1DDg3`=3^Fd=N4mdpg5F3j(#MKm3jAM z8!Ll;{t}ET82|rJQb7mQT~$j~Q2buO3o(O!)-6xVGxpBUu;pnP&<01i?i6VsL1+F+ zoLwq&crOXu$;#5n@BlX{hq)FS&}fRWlvPTFtSn`h67k?dp^`+9>sWW4CDM*m-oz1S z$z~UM$S=Vtd0;u{&&NIY3*b+DeC#iRuR6=<0OoP$EIkDxIJ}CUb*1<ub3l$If{DL)3m|hTu zLLrI&0CL#d^n#GsHND6`y&wX7Qco|Ya6ozRCzxK~C!y&De&>^@4c(rPu5#y2FL0oM zANyBB(~Dzd&m0^_N$(Wa90id4Bh6U=uR%$Y5&lYe6>>S62r~)M#iZj^3f0cGZn0#x zNr!y5a$lw&$I8!4vm#7)HiJxQHf~0u3NQ%#Gt5X1<}(ucd18goV2=lxeoWDFz@)}@ zdYPTvt~{$#>}FB&enII&Vo81UgeAGygUaFb}{C#^L@iQE?>t{vEsuMc=Be z@dai2;V(z$A&a1~=Lhjg0VE_u=Wt94+*TFZjovwQORdpzSbXWYeola5nX zjU_dd2Frg-%=Cs&Y&}?CJqH!(pQT=aNO#V{uw~y0YqmFGie(Xd09BY?2|L0_sQ(MY zjyBjiu`ujNpbFg~iGaAHX7PJ5SVAI=IEE|>!ww@))xc;{2qp@Ls1@xrH;IJU#=nI2 z-Oj?W=jsHPqu0U~&jhOZZE+d%T%#1*gN&HELTve}RdP#pshCPga%rOmdoI?DU22f3 zSTnX2sPSFvx|d9S;OFX@4D z4)`rPnpuWy56j0o3UlGTwipz3TSO66w@y$)2@37 zMCE@F1)?r3qf+V#zFtiPoy95`7XrR;+!*m1IXWWNy~uG}Z|E*E({g|WV@f)qL|;}JOUjby``!NiCwAc{Hbapz$bO8`UxClkHeoJRgIs7Qq}mKPttjq8SpWY zuya$@I8XouuQZgZb~LH#RxS4CG=1~fYts(?Hpq;O>gDh%ciB!1X0Dy^23AO-lMmt+v>ub#cjPRa`;xD?>8+@Qc~&KY0Gni{l}LBZE&_7 zg}H94ZE9Irx&f?LpuWB0^sa;v&rnC^0~jrmF;Bd&ooVm>B4ytfF36)^e)G*oyWk@yGU z?VQrZ*CaN26Qjt^eHp02R8d$AI_uP>i_<8?ID=!gT6ra2m$%8AaNFgU14k#IJ1sb8 zO^_EuPOVy=aa!&baP9*871`YpSX1v4vcmSw^Gze}kaQHEf zY~Lk*DTY)?9s2a*n0#_|XLppE0yyL&sc(POJt&J0Xa2#(MUmuGli!oRWg*c++S30s z_91lQCi=K;xyrEg=dYCWuzKNZ%T!%{vL=V&N@~*5k3dM4GT8SstBGk^r`biqu-jtNgVVOmos01+#7mQs}T$9xti{|F&wHdjZwlAFr|m$)m*j3Slgm zM1dfWK~8(CuMiTu>MQx{D@1@#>iWu^IIunje}ei7eiEv$;CDWb6(5rmKISrZZhZv@ z3e1~cVW_^MTh&izkr}rF&>v~G0z8D0BqRI*colLzIYLoUYk5$iYI-XG?GmpM_od=; zto+P0br-e5&68L%rP!?issMxRT!!jPuohT;p1G|63-8TlJG~TM<}1&#wG}{?RYLh? znc6a3gi*hgLe~A2t^~T(47pymF{@(p_rr&4OEJbzlI`;R{^!YqtpJMp#8v?G;Vfns z*>bfXfzBdv>R-Y2*~pfkh>9cG@{{3JC|j=D8qb;Qhd=8b%bbTSg2teKlbko8TKdfS z={$4pI#svg6h?WJpIX{Pp4F!sKE)brAn#nHsGk)0j3SFIO#Qm^e9b38lou; z!Lu?B!Pp`Z6C=ydTiRftm?;~&R8eP0y#Ph+oGkqdB{q5sAw*u`QlJVG4q=@bU!~5{ zFWFqHdYGK&sfB2&eRpiazow=}Kawn^X|Qu5&0Yhl&>d~&7Qc^;$|CM2OJ=o9o~l8a zBoh}|1Jp{7S%a;#?{+pAyjdr>9K9B{_(q_b-xg10V;G$tn&fu3Tq-)jVFOLaZFtVr z@M+s?4mqVF{;6*F8clBq&fjiVTg_{@nGX8uu7tf;tqPG>w_~?c+ZuV6Qcv|q~D_>PbT<2otk=ypjzk<%|CtMAGS+FUD3hU+jDr zUXgq;d6hq3jHwzL0%D#ZK?>Tn`4lsF`Z)F4dsv8n+}oZC#K06 zAFWxdAEpzVF^-7t`jjivr@V3R82H}u;^W}js6l^!`J0YN(uMS8E^oa(`){QecK^zh;4La+Rs=0Zzx3bxPA>uQd6S6eZTaKToW-d(~w06GmVgNwX-XBK4sUL z#ut%OayaFe@D-V9kXQL<8VK%G42UnlZy+A<=>27|rwODGBKb#}RVsf$`H>O+2YA(+pBJ-@KPgm=uTr7WD|cx9 zxViXPhO6wEX=WVSRVotqv2%`y0BsdPWmbr5&o-l2aWUJ8tjK4T+n9uU%c@mZ?7&yX z_9P$vAK47Hmnp^}%CoF3jfv4h>;z(&EaV`OPxAHZmr^`8q;$pRBtjLN{|tP%b`r6- zVk*2>gTA^|c_C>jzK`q!Ud6woRk8W2)=0O3ZD~%3KBwQRa+lC?7G+mh3L$d1o#)lO3m6YKDOrGhVUO zOzlVD10&Mf543F|ui(EGt%xi&yA@uAvIwg0=6M9M)J*DWWRrHt!_rCRfs(!M%uK=u zBu;vZFj*$y03;dCB)m_0Mvs{US#&Tn4+%FqHD``AZ6@Ih$SKJrd=X!fOagh8Ka+rg zJ5@SHjlgdpp14ec?o2V3N#HXJZvAZW5-)f1%T0oRm4GC%Zb=vo%{BZ*fgTrR(^+Rx zv(|2m!y+?6VpldHe>Q;#@JXFbxCgE5>+mPYCg3NbYyy7glNlHKeIH?B=VlXdpn%K1 z!%#Ni2us!>itWyT~5=QK8y-ez$^Kwpu0YcV9NQtYi<< z-n3V5)SyV%nt_Y_4M(@U>DGv|g7dv% z>)qnq2UyQK&)#PqOCLqg!H6DT)y!N6K z9qME@@&b5VXf_gvi%moP%iw#tbQ#hDjXn35gqbkmh@J|y58vCu&6+z5s=Vmek`~9M z2ls|SY{yA|h9Q;PHi>r}ISXQ@->=9gIp(Z+mpGt1)s|GtMwuyYvAXQ;=p98AdCg>5HL+SV1 z=JIUdc-)`>h3)+csOGo5rwmqyoOLUmTEoFtCuX>};(vAB>9Y4@epL?67v87wWm$$~ z51T#6A+h1@9T>56+unhl=MH+okR$gfw`A7IbPh8u8Gk>Zn0_0Kf6@y;5~1Vp0?GIX z0UPmKUALX8oi&CwCDn@pb7 zgr*ZYsERe7@*GnF)TG^H#G#6;Q~Vw7Q+E=_OKUT)MH3{o8S*NBZ3fe#)KOrfETSp}eiX5UhqKRdQEi2#H;lnEaI(BETngCFU(S ztZsonK_v!12~}e7JD;SqF#+ad(ro8eVsM~f2x+Ji^HfcOcE^<4g0l){YHd07m7={g zsr&-UkBsZP;Z?}pK=zl4 zWr*&5yC7d>JU=)uh9=D5y=1w+(^1k{?vLOBi7Vi~1q~?lBA3}hqJ)~wBMPJ4mp13C z*$8Eaj!NsTY_stGY~G=lvW+Sxe|LPiwrn#H?r!+Jx9}H|!R(j0Gx>`*T{@#)`#vB> zXW-7&6_aso)U~5=ZO9}%{DmZxl^KPSqwv412N4i#V$(f|0>1c zYL$>}ixr9(Qn1OJSfQx)A@HY>Y12=@4Ou7<`sbkqk(%Ho@G4Xj3=c%UIx*NLDS8-L znHU=P)Ehq}IZz0$bbB15g~BsxaCp-W+!5V$$cg0z@nAUX&S`n&vI9XBUKrAvfYM%3ooyi9@to=y@GqRMKUz%BrkxV2GvTR{DBO%Jn zHA2GDT`~8et_=BT;aa{6RP(!*Fv@a2p;nrgty(2uPc1fw2}q;u*9Lnl>dlWDq$=vo zj{wzdp=QMRP!0VyzC88jW#6}9gnIzh{6@GNEGP^dcybYkG?nb^XcHX@yJY_kP-Xgh zXoqqi=acAM6e@T?#&(ggns{~W2?sEI@x zOEyC@ndBom2y-FS^6y1%Nn#~;>4uQlRl3Pvx*-C5QkQN=-<>$Fb*bs1gej za2e_~heRGVNKW|k5=u2|lu}LhBF#b~3VCXHo1%Zwo2=!TJ9LzE_L-qPgIs0{eIkiv zv8Coc3ZtFTZYG~AZ6<6mp*pj-Qtg#JMC4n^A$(QoN1!^5zq%brdDni(SaKDN3GhZ->VfH^?L#Z{6k3yzsV?sER~vH0qtxv zn#h0>m71UTKulAq>7tarS8DtpKp#bA1|tRrrJ^#U@*IrE$jsz4ne0%+@zX$({amub73XNPkgLxPJItVNv9!g(rS%0eA^qM2i2<$Q>;4-r9 z#muAe6KiWE@@W=?JKV;{4%_Uxm=TeI=}7EJz*Q*RQ8Ue*LcXW_=PZ`iANVWriBe%% z@GSH83>|M;&->K@%%RAB~%QjSHJCzb8>w#Ejal@Nv z&D6cw4vPrlQYUaES9SI#{{dj!Csy@id_^qnLF^2lr0VrN%esPjl&J&yhO$&@Xg=8@ z2F5KdrTJ%~iYdNPf`{P;fjz<~8IaAVb0}Ji!_3{8fSnjniENd|BX?>gHIx8gv-HT& z5YU)e($+3kA?#PEqmh{lrm*rQv)9ZH`uAXcY4N#a@sx7{|H4EUcB{;dsE_OXX*G zb{~NMxbO6Dl)n|6{iEiKLI1UyZ!&bIvt+zh-cc&Hre@C`VEuUwkfp-B8dL;~8-C6U zbkBKD@BLw<->q~Zg4hZA?d%RBY0jR#fYIs%w5EwTbc6NiWy!14rmmtwZ6#8PD|kji zwd(?w^yVIO5Kxj;v(AbPt{g?cKnlefT1U)|L}D-$4~Vep{u4O#$%#mJ;wzHCC9m=) za50BM<%{$AkZ)C0&$9$U;&wZ&<~PCHQ)eH^->P|qxL?FnsHe75h6rl`(nu~Tclwri zwO#4k{OMaFz$bP3_Om#&?uI`>`W8P4rEl>&A4iLi^A{hdJ3BXhivtDVX4Fvn_K-6? zx7CL00E=GBEtQ+jF+7?JK$lF`6WU1u%VQ`nGL9dCS0NXpLxebA&it%M*gmRI?VQjp zdlgRDvaTt~ST&SA`P^C{2CwJ1#_aWgJ|~fO{y{&)tina`=Ir_YCGgK? z|6=%iQ)kgssaW)2HrLs!R2?t3i(c@-l4`p$<~6+H?Ah}=1Fcf4>@{oE@(j%UwooB|&JW8(fKO^zeg=+*LHHBE zGJX=kGWp6!ch&SCS&DN~{}=S1U&22yGkuKy^EmzIxAdRi(SQCx|M?^Q11{rF_|H85 z&+w1`7x;4xB)u+}_5TVlfzDwthk$>MfPXgoN76S>C2sCPe z2?Nw|a=%DC;)1Y8^bbW5`cEN$4}-tZ?Ze3%>hvUc*IAzhU`y4aHywi4`P7#^52$NB zq<<8Ao6;$6hNjdD;VW>8+wcQ~E=(D$zg5DY&LWzO4dNGqVhc+ZchZv~tn-{g!6BcI zjIim;>T+$eR;X7e2OP&4fxU;59vtdN3CiEO<=~4@f+9WSb#?;^vwjJB(%G%uD9!qJ zA=(a%Lr77=d-Ix*G4gL-0(OaCG?{v?z@8JdoTQ>y2pPG~z9ihK6o)T3{gh4To?fUF zN$!@5C`*h$@~Fs9hZW+2Zu8XUI*>PIA)=RS!g^5ytQ%LYqJmtt3U?m3&iOO2iLmOF zOJfbUF@qZw-~>cS9n!FBd#Txm+upA79Dr-M?hUSZTkTfe@=UYTTs`U4VAo!wf<@kluGHo>CB%$a`ql^76oFsSxz_y zQRkpPD}U2jT(6bjUaz4*aft>cw#71kRn|sr4zKiHM2f^1t zrzwedDs1|JEYT;b!dX-;N!nEAH6hFjK4>2Xy`>JKGR{nnl4}RtZVxEVDEd=LTnn+iA*_iEz5S@T=EF1e@mj+4HLq9N z6So~wX%$3~NAcU8JwmMlc@lV(zLCUrm`!o*PsMexWpQPJRsU5OC}On8kmpqZ6c8u} zpl~)r9yw$Kq_`J?%edLepnt#oO=r)us?C;L20sv4)hT}^Y2uj%H6ap$$17Ar9X$v- zrJ7KA+cp{{ZrkQyrpK9rJ3+T?gTS&r10P}Cx&-ke9vD5|f*eWRgBeYAe5T-B2q9#p zRE1eW8B5zu=(+SBw|fM7#5J6JA}zr?al=DW9V0jp|gczOWW_2HYZ~7rVxGh4k=~g_aRjPPH zWCK6Co_5m1gN5c8wOf zoQm7HqUkieE88U~ju2PcgfxrOgynAK=0JGx9!25wQn35WkCOFlhGcluf3hE={;4TP z{mL^SSir;*&WD;9ENu76wR#X71h-8DW0V?4hTlnM@|BF%o>XRv1pdcpI;}eH4Po6+ zmRir4YPIUkk>O!@J=Gp7K#6b|jL2=k|E*za8wL38WBZ*!V-vyp zZxpJbV10E=u>Qdd@rW9j8CL30YRAHF(}6#jA0BT&;oalM*YJccslwOGH5iOwe-P8+ z_^cELaHR4qGSSNr3px-&n~nzOxM^?qinW4Q87mhMsqq~HW;p#0tlAlK$FG2CLMYrP zATZe{?qy8;nL4DV zGK_)}tjB23@DM+O4`~SnVn+pZvj1EX!I4=NmXITgV9y$=l86XY>{-FO%gQ{UGn^tadPMQ2f+l(lBN%re$#x}V;`?|&NghAy1%6=WS{Da1FC zbbPWw9SfI#l0r4)@<*a(zV-M8P|5`t4@S;hJX~YxOqAdPd*ra8BRuRh=nV)I(^v)d9B*(kae3<5RU-(}Q2Nc6iW)rfMXS5%_?a zT9Aue4TQboK*eiL(FD-8ZER~FtQxx$;-QEL>jhF5Wm z-axyKcaga;T7i9dwJs=0I)g=T0yw<2ft_j=V+mL!!4&g&i91ze4JqGXK zx#LrmuIL7oQQ=EqvgizUar!~*hCv$!bfp@L;)X{jJ>UgUx5(qVb_>=CLdaLGdgFzP zdxbZO&m3jFF5vv>Xcht{H(jwYsn?<-*g+9$Pqe$l-r39}-_2r~865=HEts5%&crKjgr-kza6n;V<}S@xLI?5Tw`-86--b z8*AZ8(#G zD4n{C0F=wHdL>ku@4O(iT6GjE@vzN$7>BF6S~c!FvRYO5#9r2~z79mo)~|jF)(iME zz%*aCiXTMRt-c0+5l(BuahW-=jda# zP~{wbocK6C57GX`}*i^CsVrHgPs$lchY&= zOJlq(E`-#&Tj@*UZ#9qX#ogW|-0i=q?iN3Yy4z2ga<}_%cgs7P(ch}`na=(+)wkMR z4JgJ}O-A;WvsREclUpT}(BzbI*zKQ<$;b2=*8NT;8Ahpw6u>iGcoEk^n%_ML@{e6g zl?C)zSwrMkA5f@<@~bb8=2tsEJf%sKrWo48%2b%aK~fSDq-9tO=ebR?`2xQqc{aE` z3DRs$XKaT42zFk;T!Ew}VFepD8(fL2=GxV9TnfkvZVvrf!8x^!wFy|i0*@e>TFl*% zA_hrt(xm1Tyex_{Ks&0!uQS%=*6WZeyOMN!hQ(8^PF z6M3p@H&9TJ2T3&T(RmF_gwf~&JA)fkD#RFTFf~RKgsHMft@H9j9Sj_{n$*B2HN846 zdVn%@dkotba5oYOglK-_(xXB__fbRW!&uyO=}`h6;0ug^E+1Gq`}+CwAPj~7q>B9< zWHb!;d;Yk8^Q%{CbgRy^nJNC(oI zj$3ZRC`M{6I?gej=}m*7K<%u71xYA}ISojU)hbRAR>cv(8^Cl~*{e>rrh@ttUF7vf z#^b}+zG-f8Df!;@pl4GdNu;d*X3h9iQ_iP?n>(86lLuJfM#*|Z2sqpZUCe``-VS1i zBqdqgLn?-lD}k_sr=CgLkt%K!+gy4Sxa8`jN3xRDdV#(h1ceR4s4VcGtz79i;Qz_9 zg3Kj9V&c-HkP=ONGHTJsP`ludq3;UxpTX$kU&j9uPuc$%HnWG9#Y1LAItvlbNd+e}K9G6eyp+&3~%QomSW;W=`z+a%2`g$*{8@ zR4hv4t2uDTuX?797!pJJT+m- zHLg!ipD#M#JaXQtHz}c$)r-9Vj+9%L6Vqn(bYL7Yl0G#_1D#wLRqPSi2O=JqQ_ieEi(rpUUUR%rin$p^ z`bHAPuWX9q6SN<{FeM7rNu|hN-3InUx%g^cF20N+A_`$cMt4l`pl`sA*L6X0vMRe! zYfP@#NM4eVBQSbpb)CQegTQ-uf6CJ%P##B6M#Te>NS5;v%whJORPf7zgKVX2=I$b+ zlM&oIFF`Rn_ar3z)T8q$XSlesy3ufF*j^eqx{!c-Q^|BBwvbQpWq+(G zQS~%>mr`jP7+}3_(ou)lMW}=D5X-lL=aQ_dG&jgTMHRgzuc9M^j1fFPFF`TL&Lt$$ z53*x7c@r*FwxIq7r%W`whBGY3$hiI=vY8WXx0*8Yvj1Efj;*XZ%rYGRjcVyiQ$n31 z!?7FQHOEW!8H#u0WisBq0W}aFj8VLcBPiqDEm_rQZYbVGl{}kQ$&sPR2)-sSK`|6x zMM$I{iUqcX>WbB{u?|k_g`_>?o13tA42sSTu`eFag^65glJ&>ZF#K3n{bd=3pQal6 zh$(^2kzsgRm#{N-GkVpnPe2$7f0IY${iu-es9YC`LQ~L}2k8&8D%sp1y_=fA_wt%R zWRNm~_vR%i2I;p5iS&c?A`+DHA?l2^OXVU!=9O&^4h@Ao6s-nT-D+*3>{hDdT@_){14Oxc#zf*nxrz!RPJr8+Um{eM^5&tF+ z`GbFwZ^+B^&_-%{t5v#EI+F{++#F@Vh61hm?ka_ z@)NS^Kg%HhEYje~y~LC3(#tg6)jpg?R~zf&M%~BK<%=4zQY@)eXZL7U)b4d(-$HmzzS; z&x1W=uz4OgA=2}?)HGC%-%G=FI;$454A;+7J+)1V)xdDgK|)*;M^npLNa(ML`(VyY zH@_fGEoKGf5tY5p0sN3X>Fm8oxiDxZoyC`2u1qK#Vnr=|;c)R5IPU^xm_d%5EG`c| zl}z@-22EBJ2S1=t6;~{ry%@UE*E=jai_RpcP|S9Y!sCUKj~NSJ285ShJoo?LzbyA& z_+N*vE0_HQ_e-3;gpT366UT6dt1J@aJP=diUfg7cp;os;Uu3Cli;kgI(;MiXr`4*E z1Q~+^J*tzkmC9d9ruvX#RKXz4QF0Wf`k+EJWU71i-BkBN!IT2YboM;$yv-M0aMr08 zU3k{!GsCv|zi4GK7gcq;mc{=o{*a$*Mem{#THK48=M&IIAMu7S?g<s=)L#w?Z{!o%{9MItM$;PC5T9 zs56k66yi%~AoS+?*-pZ>ex1eaQZcY%k6kM?=ohei$H5;jhb<5KtMTW@;?H#!%??+0 zpp6lW*6RcB$sp@K7Q^wCc-5bBJJ9m8;3ggr8r?R4Nh1ZH;~G#4qoeX9=tJIZ=S)1$ zLV1z8zP=x4KLt9n0UCx@r*xK|6!}jc6LAf~%%9yS<`0iye&1EF*3p|7*#>7%k-Md~ z$-KvWA7=geePaEHB-Sf6n9jhpSUT3l_hHs2`^5T@F|6;+rQY=1#`u)Nc;wqK+wDHF z?Zkl4Vs?L2B%%*}kq>&nU#pOpw3?^0hz4u3)aCEG;V}OVha|vxGT(4G=s$+%mOhGq z-i&Lv-iUv`kDEcihkss+Z*Rsw@55;K-T3DL{PTVMvnLEUe<}XC5&yg#{AdeWL+>} zhRnYSGh{|Xm?6Ou{M)z*h>p7T65gyhay*=$-)_~K?Ft;zKC^L_-|gqW zRPIA(&jI+4p1&B{bFuSR_YN@mh}FISj#e_}8(7_omlT)D0amkTzd-jK-I7QXDep1$+`d zvoY%6+E@~j|Ah3N6qTlKpy3cZE*`%LkNiLZS>g%S3zn_l?I9pZZtG@G|50YiGlC*p z{{z~Aw97*S$LXhckD*Rbq3s9#&`<0VY))l6hbYBD>-+KwPh`WX_sYVBJ{x{lB0EPz z)+hcLbShn*6TdT&N}OmT2d7^LLx$=}1uy>-Ks^AR0yvrD!Da_6*59d@rlVtlsPF4Zk$HxU?{b#$buJKDPANi)YaoI3b*Ow2roRYY zO&t(`b(W}x;he|=|ARs`+u+8S2Nu8JqEiU|X|R9x0uWpJR5(ff>V%?xDG6j&Vcm>C zUZYU;UyUD-h-M*l%zlNDSRBKT&VZO+g{w3l0-nO4atQ$ygqEAS6>69Ttbw+0l!@rv zA_^Dp1j_ojCqs!QL5@(v`fDNTQklunp1tO%aX15H1+$90Vzt z=5VDrEcLxoB&!@LEMxbTorIm^Hn6Jj#tl3bxdEi6b#BP1!sV@aV^6gOM`DMiknN|EjT~jrMp$Y|bbSvhSO}3QlOl-L0Vc&2Wlls05)XxwE&@lOrpfyu<#V8olKn6hlcaDC&3VGb;^j@2*2Xz(%+hix=iP9@*96YKTB=$7kK zZW?gRNh2(h**=KmV2w!B0e<*}aDrhI4`Hp2<9$GQkmjTZ7yRITG|C3NE^Q^pd8=-u zX)SVNacAfsWZ=SBy}xOqvs@ zUxvN4I6FX!cKQ|hblfchs0acElOZlvEr97p;HnAGY;=Xh< zM0Wr7351UvDi^@HPGNJ-17}fT*bH!PBa%!2PHbRJoolJLx{NSkPn}sTulo#<*`Ph( zyb;7y?BTA;(Uhpx6QwY$9oh%+Y}SY;5!RSM zl3*=pBDu^}(4*KfmSadnU~P-0D^_9cBn`LHEa~Cqb$xvH&?ru z>gZX7ksL}Fuy&%t=A4JMDTQG(uvR3JOn^0PU`?HuP<3u2OxROr7R&2CS7SD457s&$ z4%>6J7igTF3Tr3oVXa)6oWfI3(#+KIlL-UbTl*lGZ5qL-fVTA<)_sQ_tJHL^UcsvH zD~6mEa8@5)7CVlw>t#5MkG_P%+Nv}7*<=~6eI>8l%2)}a1N^WyF|k5fAk&II=HY8^ zVGn}a^@bdH%OA$yvj_6GLxXni*47Eq}K_Cr{ zKvbwblB_Sq`)%RuOQ~##H%+T2VRmgT%_s}d&)Bh+V`xOcZHK0VHo@%_?2vhIJHw!y z1h}0BRJ(y2wu#kH78j$NPhLee^lZXM4wVaV+n}&H=fSP4Fl+|gridgHzzrK%Q|HxG zokhZgJ#}WWyzcW!W`p*??bRR-+w;j6Yg}ChaNAxfReJ=t1QKCzdwU-Q@-mG;RB$`+ z+)}kvX;+->ZW&K=2ZTeEmn(j{MiP{LSU0kA41@@j-K6PGdML}i8uatnFY}1@6@%gu zi1tOG$`P&0YEW!y%@cO0zCKIX$zcEj*zQ)?ob$l;TZLgW!1frCWCE~Z18eI1N2<YOpuz)u*EO!k0cPhLpKU@44McCen8XR zK7intv0vsv@EZojB|z}2Ks6-@VpD5g^TSkMUnK10FaQC9pHtYJ^C0*Kg<&%w_*){$ z1Q5gq*3@}BRp(=b347`^3xdoB?SbHdkJ<;pJ2Z|@1;J1xZglDg}R2YIzm7X9RA2cgM%Qddn-0I9Inyt+F>lPfw}Wnj`!K z74rG$3@ln{daV&WNM#5}!9v?+=_+VX-dD@+m{*41kay#Z%2cgUx(ZslXgPWGZu$kbdP9&KS++YK1>SULHmI)K~)S1Qdy3g>L z4Mu#18W-f=x^fGM!}bjSODTh!gbgPFqOC2a32%C$6b^9S(+BZ6Khml-iKnt-7z{=o91zsJ67B7jkdgL-T=ZkIFmB;LDj8> z-;TR2ZxZ4;4}v_Dle~a>>n`n;A&UJw(w-D(+^IvR96%BY48Nms0DTAyzmEMf9~gey zptwX}_)VaiGBCuZ)*^}jp!)hMVJC+Hh`{hm3Y&92F#NN^u$jQ{4@8m)fgv`qrq1tC zb^ewxVNacA14Cwm_5#C0e`!B3{JzHVsnKmh#l~$k0F~38bJYu>a9Fsi55jp+BOE0x z?A)$7?F!eVJ1!=%KtcuQv|6L#HS0CFLKpH|C@?$^t6eTSW02(H$+0z?3eH&*&P=WC z>~O0sr&5Cy7`ap$GEEQ=H7L2}5PsM!72$*Nh6iyQ(DaIva5rzeiLc?ZwF3FVE0B*1 z6OCGhsA+Jea-!DXA^%cnFaov^>zi`8l1OOqGmR0X4-K+!OFI`kWIiUiz@VH&OmH4h zDRosUv= z)(I2#)S1Qdx@U=)4cZF^-U{Ndoh5oq6ec7Y+<=>w}^T{=|*6V0TY3|KWVy`9`bUp@c$O} z%RKV^he2@(NE?0%m(cN;1R#F4}gEwIKF%U2={N-QY{5Z2Y^ZB!T?yXFQ{`D zunU(X>Q)i3LRLkpz~`I>OF&@K>%o!_oWJ6RZanE3*Mg947MwHiC47$4To5B&2{Pt3 z;TD}*)gk9Y!_p2s853U-S>9a++u&2)~w%2v`8dzb(ovXl?dy&K2K^~T;ujek)xka@X31_0X(_X6c zrt^^q!}N#yAd&rb5>a9L?$c`3iPB^nS6e#Gx;I{$D2+QP40;~}JJ_t?oIVX-w#Zty zLAb_mtle^8#U)8TU)X?6>trb;d=gp;iBu?_Pqbm3BqIga0(zb^)oRt7Bg4bny<)B4 zRmRE%uQ}|tTQzbMBWAtfJT&s{Fs!eHe0O20RVg1$nzIj10rGs2Y`);*wh++9>x^*Q^HRcn_^uO@z9SIKIeQqwAW)A!R8Qy(Ckv6%ER8+OB%6( zHGLk=^tq65k)tCi^=UR9;#O!c9y$)>VLKjjbk0wWhY~IzPL;pN@%wNjbV?s&ag0tD zY9w^b1#Yp_mag2uYZ}|tQj2_8FHOTH5+!w?_D7N*eV%UI-pXB~G2;Lb~2s)jjtI9hx>xZ@G8rcyvLKN$%ozpERi zImT23CQs7IBt1+X8*_nGwOy&t6skoiOSm&|#c``$FMIGWZc5N^5&Q-A)I4tf+Moah zZvGOea@>3>-fNZIXGx{_TWgN@WTw(b2!lC{L;&eS3ZHWxNca72oRJB1cD3>eDQcax1h4r0YQ*wt;k$&ONF?dQul49c5YHG|Rzyq!otM z)B7N!=jvpn!0OhsVe{ZQcm#oS#SXVI*~I&hp$1-en^@E?LOK){iopr6trDymyNYbY zD_jgOi_R6^%#Kw-5k;Wt->-!zb5(5~Kq6n~R!^&`9S zN^t%`364adS-;S}LLcsEE=|m^U53zNkZk>9fJQeX0tF}qki(zY1K@y!Q<@HBcu9F5 zE;@nZ7#Jm|^6$E~tqK7w&;s4VSm{Dqsn-FM^>I>*I5HTn{KJX1x!g3gp(X< z7eG9&@HyuLtJf(Eo5@hzOeC3*p}+>#^tpxU^Ob}Pd-}{`d)=2Ra4WPISbYNIVLPz8 zSmW?iS#_4c z$J`4)36-a(ZU~&@{qi@Ry-&vtXLwEZc_cl+>+sa1Bi~BC>Rz2~=di^4fG^s$Zz)to z*Ur6cKJ-luToXzc<7tA`9KR0-s6Xw4t&K8UlSKovPy*D>5M8SY)sCwhlVd~91!tZL zt27|t15w%Fls7#@)@VYg2l1SIv_i(8N_Ox&MPt3V)<|Gc)b%}mU}0vZ`7y4_kEn8zsd7GHE{Bs4;m6+; zlM_y2Gjw})vE=?b`>tY#x~&>OrOVC)@K&m>mGh^D~vc(6rIX@Nd5?1x6J>MoDi7?nb z(g%sWR3{M??9SC3ZG-8Ef^*)OkGlaXP$Y1s-0hxpBP%)2nQYX_dnFH`uO^U!vO!mt@=`!JDY0<>WRYx;Z})8}o33w!!B3vJvA?Lpi3 zK_0fD?HxLYr$Sr8arR!>tH6?_wAj`Yr7*btvJdikw@yBZ;Kn2pY|Ex2O9Ho`iR3r` zq8n#9MnweNZqxO}D!A?OTPxtU50W)LZQBc|b_F+V6#M8b4n{X``w&yoQo@O<_Sesw z2kZRczZ3;TfpUu!hUYxW9j`EK2IbZektU!VHn67H4>QFU2p6hi&FM3X5q6)zadWhX zaxVaR*haaJ>O7x{awqD`ePvvT3oDeA0+chon%ye+j_3xq1aF z)vp+GR#ZG#Kn*LX@ipv=f;H3RWfPV@&){d1s8(dJN8< zIsHfMk@@-MYYhrY%r9>SsvLrKnNw_I%~5}rspyr2ksL}FzZW)fwM4UsgmrH`WMiQXCSU0+IjD-lGJ*?|bdO*v)bo4dYG4oTm zHyD(cn7X|VsB&EEvUC)iT62d#X9~NS@RP#?1iW<=KIc5V-K8*W2Hx%@l1zX%Y+y~F zzhL^jgK%L_pJw5WTcJI8`zgr7HoW~x=ln9kn>*bzylF{<;q7;QkjN7{iA3SeolXI7 z@r@*SoA*1-=*lq`BJlP{U4QxjZ~I}#%){Hk2IVE-?Es*f65g<>HFx-5Okw*HesY+A zfVX7|pK~7GHYyC8fwvJN$pm=A2G;cX7pBkS2^aSCX%^nN721QhF_4FCc>8}k=cmG3 z!ir3svy7(R4cH5zFw`~rAf5RO;tmx6AE-jzF+s92!`{HOKa!yEI^9UjF>WGIxJcLE zK0x8?v18_;@XZG0C7|$)Ks6;4VpD6bb175U>j*zNOh7>4s}(-yJQRLLVb}~5-bEyt z0EO7Vnmz}ZKJO%4*wd$3DCAaX4+!k`g~Dg*7s=qsd~RdRO?7I14|Kvn z_{ToTWHX4=m5aJ8y{)9C~mt9PT$s5}R-+Aiv}uuK)8Y_0|lzNCBLM+g`8^l3K4;Z|rb#F+qj*bZ@y)Hy#j#7Wqr z5;*O(#WXqXo+yRGob7#(&(n4CQNx_uAk102NdQ=1BOMyh(4&`W)Dt?dnSLI}X4R^=r zSZ$g|U+!3KyEh8khiU8uM?iZJA%;Jwy4CR8aku47LR9BLc!+Y67g=xJrM)u5vVTX~ zlcJ65b?B4>OCsUnDxC-DLwNWm?3nrR@NEX=CBnnE0M(S?AvU!ZPON4Mdn4f|hY5)A za8}`S&WDFzP#8879)5;MG9f&~2G;ahVEVj^aA8lMX2U~nh4#Y3UxGYrhlj`MoSzyV zCe(1?#v_2{w1;K&LMR*@{-qDnIYB2KB{=Ndt~oLb*R4A)CbU3A1?RL{qv18{wQ3P_ zU1ViD9IDkW7x7XMxMHj9!8S5y&8C8L)`T-tYdbsKDjc;{gDbl6UhD>BoggfN+qjTi za|l0dmWuGfc*BF}4QP6JIJeVo;_JzFvp~M^3gqL$M59(AdKz4*9Lx20$iEaIEct`R zKjrWykpN+X&I-~82-!EVJq3GYJ~D6&3Q9xh%F!lgyac#yakmnT=q{yL}CC1i@P+Pl$XH2e+H@?|GMk~z^2yR=JS}s-a`1v zVFCgMZ&CQ1^Dy`og<&%=_yr=#1Q^5y*7SJ+)8}Uh7xwgN76!Q$+JnKzK_0eY@FJb_ z%LjwwwQ?=h5|MN;m_#lNgMaOVq%PG-N`=7+Su&}jpK}_l41xKtS0Xn@;?h!bax^Xx zA>AxEXW&ct9A~^BM!G;`%*8u2;eKjz-ZZTEz%w@SHJu$RsM_aeOCY`He`1{gcrw3^>*Bu>+y)=*5PctYyf!I$4svNPiTz7=Ov*zx{nJNz_%;hi+0pEuze9n3J zey+l>8TdYfNHPJwv4J&x7MVUzC0y9kr&;*sR%j2ts~`{C@I9$>iz<94oT1`Qd#R4D z&PO5)(=YCWL@GLos4#u^X|?J^X|fGjXV+=g;nwJh(zt`dpsO|6z1{`q^lA9AMOMHK z!WDsIZCKyOR!CmhfZgpoO64+s5?UdNR4ATLwBbue3a%XVJZGxasy9c5hqrshTEVM~ zl?z^T*lo9J#oBmt7!%-dh#L8J7?xc^>bo%2s+5l=&DjU10C~Rla*z)D9XqKv@&dHLhp{#NIVB#6#~__?+|c&;ts?X5yjyi6j%^A#7kxpWB%}ze~8Vr_U_TqWhUW z+zRc*L;nZzupJN0=$xM#53SK>^~*cbh zfIe(sO`kV1eO^Sku&2)~w$~l{xE0!izL$VJY(w8Gb$)R=uZ68wjob%B36NOb;FOvUX1IB(nGU_2G$eRD8iW!% zQge)}2t2+=Cyn&*7?%J|H48i*J7yjvpJh;90whlasvIP{%mT4#tirOmE8Q&c{Y+u& z2tPSYKtSbj3ZHWxDqV$PGf;Uskz@i?VgqaXyp8Ge`GgC5`pjZ`-DiQ^3hhDV%RwHt zXMrEmIlrt>S@x=vt*JEgz-~~PNGS}JukV9=KBkjT1S-!V0_Y7Y^U;u?@?E--nqyo= zpz>2XY4iaq@5GLohssYIl$U_YPXX1GP>D^gxzs1FkQvQ9!OSRSv=D~Vh(PAu~hk>GL#h$VKk<``QMxcr7r9({nz5$u?GxO}!j zc?r1O08~@LB{q#!SQeM1n^}H~DeOeTPYx3haJgRLbI!x1r!Z^=E?pwY1h~Wo*7W&p zrq9a>7xwg-#rC?-EV&ihgUg#h9=2ze-_0u3YI8c-IyF3axOUYR9Il$YT%50aLSt=BHOEA!8RPm zCLfd5$@Wvp4nC)7tQW5ui7y_~^*w!jVP=!l_pq1dgN+{=6rKn+?gy$o*vPWU34dn| zsUBgf{4QZGhm#PI$F~(eg_GC}-JV@6xxdc7tJopLt45s7wW>ET5V$#Y1nsRfGLm^^{Jw% z44uA&liec^ZiNwNsshWh4a4<~8-|Ns%Pp0g8)Yr4Uxp#!X`pM{k;gA}Zc**UdObX* zzQrXcjj&AC^+6`T)yYI1(eZJax1h4pMxND+wi%k&fTf- znQ%li1BOyD)mq_R2!)~a#6C!8xlTGNl1zTaJA&mtvR9BilBEk`iw4a-hoHpmrY&HnQdl4`oVvKH(&X+6A;-tnfMK zq3wEwVKXzs>xd*1W`@|nnm(Vx^!Z}Kg*|Bd=(Q4s;RmAbxI1-Bn#m&}9P z!v-ZK!0jhMwJW$`BWuoZh$-m-!buLb3vm0s!sna^wKIY+TZ($F5_}VuOIq;T0jK60O}_nq5|%bWDP1F<&SsWgv*I|C7yb4P}kPd?D8Jn zc*`+5A`o}3u7@@u?jh`vd5HUkK|u+K`x#K}265QNnoB&Nspuz!ksL}F5cea6&p8iq zd;X6`usOsaRJsJHa+Su;EwO<$eLj!rb9cf;j*g_%r&);OR%j36js>S+y{xgKqnCu;to8wR4rB76=%C!hQsa==Me1WN}#Th1Zd~$Mpurp z5CODNU4PO8TJ9C2v#uVlfesY+AaEC8c_?+|b z_9}&8Gc&kX5J@J?;IM%;eU3AIUQf8Nr%$u+#;wpEynO`ZVH@5ibj~jmyt&go!<&{w z7~VeD2Z@w*5{bf_JDmdF;u}fucCT)99pFY6b&#`0X;q5Vl@)Gd&C{Rra zZ`jnDJ8Ut9{fzLF!vqAp{Z!#|&coY2|4$>>9AXff-4m#C&Bo5&uz@vwwwXSc5H50b zB&9yh!W*|jd+@dniXLUD4fKOnTNu%L3s&>SpuruVRo76VN+|a^LnN*kMNVj z1cd7xQ}~?oQ21JfVKXzmR}o1j%=EBTXq{`ZmN5_d!Q2r!Y}nfHm}ynMghXD`^=v=ZwnWKQ}mkSjnWvb8X}2J zIJBA6;Y#-bK7kEP&v|O(3z~7WwUWMM&?T(Lo^_Ev0 zajtHaT4iqpPoo)f>b2&G(`wht-jG8+ADw|EEpT7x2%bzc1f*a!ZWAu{X78(Icg!op zZ^*afjLKB4QMw9Ry5$jv-c#6adNiQnACTXTLV~v90&RHqH3er2yQma@LN6+XD?~#V zl?JvT<#TsQ$OW^QaNA|L>XjRcya4Gworlfg4vfjgTZkjwZ^^YSe%;v{TM37q!YVw#+G zPn5!8&U5-8pLgoyqlP)RL7204lK`;3MmjX0DVLfM;n1iD;~W;u&=0107{qQ?QGz4s zQ%X+ys8MUVc#7kQ!#h%-nvVBWr$_}j$Jqtq;<E>D!L*;H`Ons8=nZD)sDg%h@F4bK?|@NPiX3BsZVCD$Cn51XYT zd@$bdAbJCu^se1@6JJlZn+5WPS0Eo3CK|O0(bM2cc!#36+0TZ-KinL z$@-n+A|x2a~w3!sJ_Gmn2QgYpv2@=Bn}on@D`A=uQK+q{Pug(ndEKY=Po>@2q&;qR=u`=2sZK0%nvVH^U!A6NLC z^YDGx-!y{FAqJu5gMlhnbL=b@8(7olLrkCh6E1ReB&9yh!Z)`cS$ip^#KcaJs zDtsrLq2f+^sZOlUMc+!p(qVZCKyOR!CmhfZgpoO64+s5?UdNR4ATLwBbue3T_(oJZGxa zsy9c5hqrshTEVM~l?z^T*lo9J#oBmt7!%-dh#L8J7?xc^>bo%2s+5l=&DjU10C~Rl za*#&tJ9biU3WsL*L4;(yoq+BH0%37j@>=H z4x~bFDM87#$FjIM-Sx#!=mtRgNGUFzAyvUy02EmVdL2s2d~kGw2?a2D3DkTU5ji!S zE`@$c(i*R92 zpIMwm_gf#i721o3z60{G9S{9k=ls-oXpKIrU*3@>kDrG?I2L-S57PLnP8w<~bj&5C zB5Y8B%mS^f4?-H>Yp#UdBu>3F?UkK&wG=s-F71ybEd9N13D21#978$+ zXZz`T6oIqX?=}ziZNPuQG$=*k7;gls z9P3E(Ti;(vr}#T-{_;Sk)0YwEa#)GLzn3U{&UyU1U18WvNb>m~ zQ}EL;ZOKFbNjIW%jK2u#K3ylh246y2H3f8rYahBkPD{6k0c)OMO%d>pcIVS^F_@7y0O0MB(V{AT4#X0MqY^zVU}Q#S-C zaliacXWxr!<#xqu;+@Io)p1vPkYoHYG>!XSa#anTY3DG+`{04Je>H__sDEpAhyJOt z)p7dRN|za65}~6u$M3`O)U|yuwe`%@WYK^u)Oc!$W)>iby1FqrHsoAz=BZHgZ#6K! z8l3W`hscUQSVI6aQF-TnC)-aYJ9xFCv0glDBpMpg^*wzw6qkA+rz@y25J*KI#rzBQ z(tPUSJqCp*QV;I}syvFxvhEIl7j`azDpjv0yD&e-U-=PLp2R&SVJ?T05Yflm6h4KM z*bLoP!{L2bv2(E?5Z+v?dIJN2qf;C^!X*iMUIZ7)Mpmk>mGe@D~vc(6q}m1AF*U1HcY zR$*COj&8Dj9#h!Sgr6KHAl##)@HywnmQ{gUQjX3TBPLpQOM6CM8P?4 z%*VCml{TClJmqfpr0YP*p}}O^7w!|o&0=bf-7IYhOlNgtImgJ0fawc$(n}AfaSOF@ zR;fqPcVmytqv&l01tn1Qy+D0F_cjtZswW2W2z31B`Iq~lIJ0zxf zOg7)>k!>Y*$vm2;Ne;COXnUH% z=bVSO3l)aVK->95k_pg;4Xo+2#q@a&;liFiv)EqunIX4Ad(buw@~{nUJ9G|Dg|>v_ z(!H`*fjzIIDY305N?~xju@CaOMkk*{aAOil0=J-vH1<7+}@8} zG7oMaHYh0pZXW=uUBL|-S#yRjXG(f6;UtIJ1-SjI!sna^xBC=^&4AmzM3M>Mh7GLg z^LnPwdk7cy^l28{xE0z1xBmfo*ao+obPi7iw-fbMzH(`D3ePM~llsh0CJbu>yV;k_ z%{s}bu(tIa)_;BohI91_R-s=pI{B1S*|sk|MOzV;UOpog!0(~tvi`NQ~o_CWrYJe0qo59aUK!}(ia0A5}r zFEKb2#2)Jfa*Wvs^v>$!ogR9#CrnpkkIW3)AQMgbRE6%wl`pXO-Lv?E&wL zKpwV%_bobirvh(6u@FyEOar?4NQ42m(+7#XLnjdxaE~NwQ1Nt0JbsyFjmaGhcuRwN zUS!wS((LlBy787{bVMNTUv)jS32`679+`)@I}8d+K-}#>wHw4?8*47{y-Y;Ng0WJ56(c`dV=5g(KgYpu%wic*zTEQ^cL&EWoxDQuYV zlfwiAybURQ&UtvdOkvmzylo|tOn^6RU`?NQF@0W0xUi?sEVkEu2FInc&Tx?it>+B*O6a>OM&1i#mx!;mw^+0dMh*BzSwfZgk}s3lVtxnyx>6fVYog z$IQdqod)G4;O%2TH6^@ZQ)}+defWr0IG4oJ3Vo+WJ3Qqv4DWMRX#wsj} zJJQYce!>*Cmhh9q1OyZwtMEDJp>UhRuo)=4j7Ty83bBDTeg2f`b1UJ(o<6hKUiX8m&Zez?%b#+`1bizP5+XvbFN+%ly2)FJ7$G76` zsYD1)(QA%3N@IAHDh3G!=M;WvIvlp=RqCx7avKev!dHY7`sjT%6E!?@4u4Z>c@=tj zoI5`5)mvV1#JRdvYL($YHFEGuz1AGzhp&*&M`vJ33tV9{g8R^iAfpPaahq`09D83a zyJKD%enY+;XH=$YjnY-n(k+kBHT+Jy>Cu3Oe?WdW3JKbZ3$)?c*A$#B?Cu;~_D}E5 zfm>}tcjpAQAmwv+Nyr7Wm~h)=xP6Elio5{nR-K2<;SVDr&Tn;=+*^o~>Q!q7)8u4(x+` z{+~`hYM65yggI+B2>|PBq(cLma;XUs4vl&+&SAj}{a~7hLF`x_B{-5krR1cK8nu>- z=Qxfy>|;4_;?WR1l!RgQy+nt8q;Nq$6vRms#)$=?)sRzcxI0G2YSTRWa>r`hy-_^j znspL_xY~~J2UWKkemm~Ayh(`aJP7qrPVyq_t-G{WhFJFRNPAMWaSS+uSaiyPC6VxO z-om)kLm>|8LwNX1?3nrRaHBzaiSY1QKs9A}h)rV^mIb198L-`$!cHLk$K#(g*46rIU^l9CmKkoMwgV)*TlUS|Fl=1NR;@yk@;tEn=>V ztZav~wA$sOGX^&~^F-O2O@;qY-Fd*rO{9O{p@bIF1EIzc2nmp-_uc{_5K16)!p7dj ztJq$%wo@nv9GzR>fY5vIy~EKv9B>C5?T+4iIr_n$_jzU{&q~i|N6(Bb_T}?oHTF7> ze$O+HzVm1#jT*;KYn)T+Zk&~GhZVNqZ3&I|a^*72Izd@fmgYKF#b0(7;gt%FP2~bq zZ(vit1F^dk+ta%{bK;9aPW(DItz2po{WN+^WHqk;5A}x%gsbBCWI+>BAPkPng5(7P z{{gmp(WCS$g9lR#l&TEw1FJ!05cdEZ{!On9A;bJGx?2db=yX*Q+!4`P_a(uH5y9z{ z1n-JS)+h<^4|=UX7xVk`O`)Rq`ZL{u#JQs zixg19;QA4rbw3QYLCk8gY?|4ufstmdWVo*SHnj83O0Og(9pM zEgy#y3r6EDBErpF<2Y=>-6VL%3t^Nuh)m6Q!dnVU?TuoYX}IG9m)69#7+IrFi)Xy= z&>($X93w1_XfjBz8yEfLgLFD?IeGxSOn=0FG{xYl5&I#q8jRSSw;bWW>oweO;CJPH zLYzf%sNwsbh|annzCVo!PG|W3P(-rE@Qr`aYyG*Q-=FUa6}{J==?>pP7WUro-G9N} zAHFwg>Y)h{ zopoOi9UKvyPCYbBM6yObgn!U${kenRpPfQQ@AW4q_sr87K^FF2J#-<&qqnCsc8Y^v zv>sYBepbJAR+8I4Z46Y`LN{g*joss-5v_$r?NMy*YQdQWd1ZYxOyd_i$H3DhjUC0= zh1SOI_99uCF6loCk@SJMBhTVEA(I4q$N8Il=+j-o#=AM=U+wV%dX)Z{_ezR^Qe)mr zU^SQ!5SOr}Z=o*2zv(qN?&o*WKZFpAPFI87vk{$jKiK^i5uDCo_p^v(jlmB8px63y zf4@J!7b<$MKhquTf-LO4!EU*QdVjFX$Kj4M*fqHhc5w!(2fH;gh{p7|Xha9Q#pV2b zbg+wDpN{>j5G%I;$F#?m#gRaUv(`9|k`HIPIdAcBf_%(0c*ImZOAtTA?S@{aKg8{o zV(`=uHyNx3L!6lNj`ugzmH6+pUCBXD+(~)K@5)_;IE&;^!`@C2opnF#9TpLs&aii| zh-8gn5C5Ro`m@9D&sjo6@AW4q_sr*bK^FGjuy-lMqqooTI%BXHja6mP%u;K2TcHzQ zgb-RJN02_=;}_;y@#K01F_>4*Cs z>(Bp^y^C*y*0ON<*TBbwKHjx*a~*6Zde@838^q_0_{BWlFR&Asj<^Ybn%}!we07WXycIr= z^L~KuTdwkMgCD%x@#7BsxD!9_>iON>*t!Ql?!}M4;m7~sKRnI5584x3hEMeFhepe> z-lyo)XZY~|e&anTJ|7aF4~x%7#OI^p^D*)HIDEyq~e%a^yr96<>tEp6I;< zpKuJk3>$cW@Kw2aU2gs(H*bo~Xov++^gjIf`)81FPvOS}KfuSi_|e(`Ulj4`FaFu_;-4HZ{``3Hr^k1DA3@S!3JK%lxDv+y5A#|We;)TGj9-lVLgOBi ztJ`~DYWz@cK86i=^Qqi?E;nDw&DV1Ct=xPE8;I5SxM}cyfQ|PPeBf(hcAe|}3Qe%H z^ul7ZENmuvBjgXui67p>qX7@Z?y23C1@T=q_-w;mZ~pn=_kH1`G9NDXG50iKuhLgM zo7yRklfTRhfAR|ad;hq34w{g8vZj)QSUge4?rSw}ge&2l0kfg5?@N@Mkz+$xS5HZf~hJRB0CAqNjlhjgs(sN*5C zj-_=vx=IaG4(!f1hs12-D5l9QW<;Er&SG0fYatw*T^;p2Y}T__SWnNpo~v_ZildCr z%`%qJ%gB}CMP-F@sFPY9)!c7ZGc2M;mY*RNa~xGnGOJiZtAZRs$2cl^&a9-LuS8r_ z2!-J^$DOZi-ud9_o#(b`o*p6DMUE1-FiTjHO2{?A-5rH;7^>GhN_oUACE$mAL{dZ} z2ltwEb~Q|)y>pMFo{!9Wme+;G*CSsx91hVFj*>nxOA3yg>JT;OJ6j52*uUhcWE-=R z;hNykUV6t-$bM!aOX-B@y5~zrEq^y_3Ce=%?wL_+4|mT09Ce&$*0GW%CU9#{pw?eGwfwr2Xp#NA3DwSbjNS&aK9R)pU7Ni?5u=dqv_jpG= zH<q#g8WK~3R=QZ(4}TU!N5};A*`fm{*H1KbFNuTaM~Re(+Sru zbv43Tj*|XsmZZy|pt7SKwz;FAc1uA)Aw{NAEG3u#CQ`};SXnGIVs<&IS<$RUbF9Y{nMXK^xydZ1zkfo|QfTdn&N!arxci;V zyALiU`Mb}FYo*nf2hMfW@U2-xz?NzaxvffV9o=wdy)|CEtrm2ZqoBjhf>sUpi3mza zP_DVqQD|@OY?u-`E4kfK+yt|@6>5pwvC!EQm0DpQ=9QY}RDzyN*&vC`KzW$GLEWl zF{{$D99~M-G^5bGMY)`x6AIJHj)KZ&LE11?3xW%59br}LIjTC+tZIy|^FpfHO3m=7 zd*rIt){e^7Fe@|1Yi6-9E7Xg-II7y#tV(4@CQd%UB#W6a{B=VTFaQ*jys zrfoyHeTJi~GtIK1=hP8d{`+V{sxEa@^}JbC6zxP6zC4-Ucyp7Zvbknu%SEd9h%%S} z48`g`M@75ZD}t9WZ!O;@98&bOqoSS7isE`tDT0d>;yuS9Wv@6Y+taKpF59b=MSJjl zM^&TDs^W4g=E~nUj*9j&D++E=j&fZo(iB$z=cwy_v#xbxj=pMLFl7pNnZkP{fb{;+ z8A`K72Dnx2tC(fRrdiMZg5-+Ia7R@yn^h&~RC-ZmMMqsYL ziX~W|p*4J-_nf1Gr_Bn28_OUNzJgqSDog}VYtOfZXD|NkC}xgXOfceCiD_ynG|hnH zqa6+sWM6YJ@`&rlj4G!rcI)szp9X^%O|y45Tzc##WOgdrZmmJOCTJg-5f=Am_-G=4~wFAEaV-ftY(%%<0HqP zriLl-$b46EdUvTi9G`YaQKy?lQ3{qzT`)|Cm~*hBj@!*TC=Z~Awjy0>INb2^Nm?40?(NWD&W;MYntBesGW$lHgP-g$lQN!wH4dKIHYRHLaZQ(u~ z?L+KOIg0wxEGoF6t2!{bmcs13)I^r&eA!XbI%Y}1#o3S~Nk}QoUy3}`fA2Z!I^L`+ ze4P3HCv{<%U;>#e|MIn?s)Nm{v{@w%`M9k5%~905W>MNM>@2_vQ?RaEoUVljyOr2y zn{@@(K0~P`b#)ct3e`a%j;zh>s%b6(^9c8hY z1m3w2&66t}_3Uoe6Wo8I^vuea+oLZxxYbd}TV^5QLb?m)ZcE`p`awqxon{T;Q&p)U zw_7o+<5@=?cbjztEBeY#Q95$%kty8Q9kr}r))G$GDlMJeZEg8-_*U$X9QABy))O0> zXuf>ssO3?!mf-3OJgo_Vi9GMnXNX(Xd9``}!ND8sKZg(c5h48@g|wQ51W7`K=w`f^ za@4b)Sx<0xe4L(`neWk6%1)oBp-%(;hp)fE*WkcgXF{)~(!B`E^IztYH%kmAf6Nl$ zB4czKdYvkvHv0Z-))(KUP)Ic8!}rT<>8R%(v!37#i^dD|;0pP{7oib-Cr4q|n}r4Q zQNjLu4nn%J$i9wh-gZ$#7M?6Rs(Hn%Cce|!3gzi=t``I?)M+yvg}rJP77vJWL9WKG zRd%GKvg=%w1(UB@Wq);4wy#-Pe4>*}%jY|)+25=tIPnXjp$4hr_K;-p(?^e0C_ADRUPQ)WcaB!I$B^l8@l zhq@K%JD4Q}cXsM7E(~_u{blCe2eU8!?sJnh@4Fh|DC0P@j9`8>A_Hfouy~`BbgMdQ zTHdUw=O~vU2|^QS(skGdj;g*hs|xP_h(?NrXq=;%_sn8~v+bxDQcO;A)N+McOV5ZO z>8{{vhOWO3aFlhRSym4NBeHNpoc39pqo5Pag5u)TGu&$kaFC;{4a~BF%RbRm3SNIg zV|A>fsEf>^Vq+B)Aevasb(D3RSyr&xRWw$*6u;O}&KqVqJ%vXk#l;{`*YLiI1JC8HIC|eWq9>^F;6-w8Dmz`Z#;~suntR} zEbsU)$DOZb-uc2Cx0f2lE0s45)uQh@?)n+?t_SZ>oLYtn>Be1y_q>H~nEJ|5LYrAa zKg_>IS!RZJ{;S*0yDJN~mfELB-&Kw8oR%++#@9f5kD)?*C9~&Y3tx=vU4t!rC$Tpg zTli*RZxd|cyLr8bu!S$i^_sASucY-J#umO6*83b=_(oRmer(}eQN2mn!ncxo&tVH+ z5$dgsEqqg_w*|KFMVa0s*uqy-dLLm6-wf$}f-QVAqqhyV@YRUke%Qhn6MBEg7QPzL zI}cmm&HE3w@HK1Rli0!+oOw533*Ri}-GME9rI&Xx zw(vz--l^Ea_gH!7U<+R&<*kV=e4~^11h(+SO5XO^!j~I)cVY`)E94!9EqtMmcM`Vn zg*x63*upp3cn@L=Un%4L6I=LF7jH*w;oDTaPqBrsG4U?N7QREoI~QB{>JIO}*ur;a zcu;17PjyO3Eqm>!nYH6H(?836yWWIEnKeO`xaZcPQG_I zws28;ZvwV(C3x?0Y~dp8-XYk+mCwD?u!Rebd-q`rSNZl<#TKru?R|_bT+-UR5nH&7 zw08@(aQ$Ylj4fO<**g+jxJI$J2DWfrU~gM&;c~p*3~b>FxZYLR!nJ0-Z?J_+yLuC` zg-fY=&Dg^AOTF{4g{y^ndteKf=kyN17OsWqO~n?jJn5CNg^NCVPhksJS@gEU7OraO zeTgkxM$r2JTey&)_Y<~o`8;o3Y~gZs-ehdy@^Idtu!W1Uc`slKS3mPM!xk<&=5=EW z*ZuNFU<=pW^6tVGE^y@?gDqTB$~zNVxQ>(eJhpJ%ByTRZaJ?dLS8U-rLEg^T!gYDP zJ+Xyr;drC4g=^4wdtnP#eevGM7A~yft%5CF%*1;cTey6P_XW0a#SU*HY~d;y-dEVd zWhuN1u!T!Nct>Ch*Ie-S#ulz{;2n)ETw=ic8@BL)e(&Gd!UyNQE3t(SvU|H=3m+)= zHpLb`)9w8WTlj3X_cXTf!Dep`w(wbE?<{QLL%rUi*uuwZy?dnR$ zKI!SbhAn*F(pwH&_~@fI4qN#6p|>`+@F75NH*DcUc-|@4!l&W9o3Vw@qj_&)3!e$| zreg~q#PZ(37CsW?jl~u|pyWM{Eqo@(yA@mbNRF4o7Csx}Rj`E*s(4#r3!fPA3fRJD zHoWoJ!e=GC6S0NQDR?hp3!f42UcwgMpzocGExbA28;LEvBi-x37TyrbF z^p3|C-ZAJMj4ixP&wCeJcw?M*Hn#9iG_M6)cmtSs3AXUAD{m&Y@Lnfxb8O))M&8EQ z!h3tXYq5p5(|F%w3-4?3zQz{bR^n}qExfbC+Xq{CcZIh;w(!0NZ+C3rjRoFY*uu;E zUMIHj0=suNw(#<{w*t2C!m_s^w(zp9_b9gT0;_j5w(tt4*NQE?w&<;gExeZJ<*|hq z%e+5h3olc7_h1XJ3whUL3$Mv|Z(|Fuhj_1G3ok%;uVM=){Jrb2g%j-FzSzRaZEt^U z;e4`p2DWe>*Sio~IB)8GhAo_@^orQRxk2v%Y~h@o_d2$4GR*rBTQ~>h?SL(u4)QL; z7S70c$6*WSLA>R$g>w(yci6%cfA2kP;c2&b1-9@^*E%taR%H9-gVWsMg!4{T{-dfngD$aWbTUbnaZP>!frn@p9 zTz&7HiByJ! z)64membs_R)f!sovY0)*fp+?B1&=$Fi&NnSipX=j!-sJv{3;8IXAAKuspBer;T65z zaNC`5v$Al$y{V;C7Rx)d9NX=E1N-*Y24&v6*ct}=>YkeSK7b!sS80d9Ka?g03KKT* z918z3)yS;}20K~aB#c~TzLCY|HRh7=tu1_a3f~&F!#CQC%SX>Le2eVTU2K}s2q$2X z6(#oQwdnO5c_8j{tlTGw;%@Fy+{Mhd5Jf0{!A}-vcZR5TCq^>!wg~rty#pBm) zg?4zd2%hL^gq!O8mwkuN!w%}TZdh()CrTL`7BaS429s&FH4+{`^d*c136S_0cPW8{_)PZ@&$Tt7(*G1& z6DRc?L9(L@{J})2=𝔤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 z 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 T8Y8uJ>B&FiHTTxmh3fwS?Ygy` literal 0 HcmV?d00001 diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5fe083a01fce6324e0fca227b417d2186fac8a3c GIT binary patch literal 24661 zcmeHPdu$xXdDp`v#iK;M{iv*XMb#FikVi?DR9BXiNb*ZzEvvTdI#%T4-rd~oF86lN z`=Cg>F7on&^#*9Fiwies5VQq~0;$^=Xx+Tpv;m3$Nn1B)5Fkh&NRSpm`(OJtE0t;uNA)35n%=v7!NT89x8!?dd&b6Qu?IZopP)AoyUf{NQ{x}j4| zCNPGKVPoWK%UBnU1a2kp7;Ec`3VINDW;qN11buX)S@rROXryB6zK=%yJ>=*O@zoy)SYE%B>K!zL$el$pn>t=V-^Aut0>={oij#uk9E^s6CO zt=9?Kma#P&mY6&~W4H}A7)uLS|#5 zao9Lw9K9HpjZx5=)vzcBw3hTYhN58sS&LI~6sT?J^~`{Wibah#o;<0EvD3C&cZ*G@ zUeGk{WT1O>7If~@?WChn5T8)jq%I)Zh`}x6ebL6yGqKv-r&>{=qB~WystYcP)*osa zkNC9gvsm_NEOay)^H>u|H!I+GtTEco@!Y7+JbM4x`yRf(*r>K%Xnmx`5t7Aj29jYQ zsxuJuxqAuA#z~IbUrKNb*3|1DjG^N86T<0#|E# zZiV^ibE?{c>4&;)KFc)lAM?zLZcpouZZG+!KV4^FDbDTp7R01lCG?O?)n@!gX zd@V4TR&#CJy=FRfjoFOE-9O1uKM4#C`+?^=brr}$3Z!I$n=Z3OQW6Ps5Y~tnHNy}q zzt{(dgs2*Zm%(|B=vRKit53l%tKhSYfT=7%;Lm}jK;PLhNpCJhW987cSx~Y~2y7}w zLJJaxN2#Y|2CSiUMs_^lY={IC@2Zw(Ih4nX}kHw5*z0J=suSQXl0ij-5H zasM@jyM15^`Hu#Nd?z6P;SE8)*a~gS7nxXsJ+#GCPa|ul~*V9axGFU3J z5@>MY7`#2FvQ*SA!@4z02i}OSEilgq_!_(dt;{r2EQwXM&?nP3H`g?qb8|($JkrY} zHgqy1P(?%`g+!u3xc(j{`=gIiIHx>e?~j-w$_!lMZ? zBveBjIm!eNa-Qx)byCo zyaoI@1bINyap#oTLJxg z4)m;mVyBW~I=hjJhC%R#PP;*(M9capX0kqpAEN9hX<9+qJ3v`N5LYvI^uu_n&+=tdm$kX%5 zZY?m|Z6l_YgDc&`xzP5pFwvf0+<*M z>vzzV>b0ENn1M*pQn}gKuEF)rQXu8VJVH|Ok>a8TA7!|N=9es)Va3C+^<`EEwXY$- z#b6u2geKz2p70f@35_B)21g>%lY_sQu3^`P0VFC3`5euxA*(JA#308pIN%R|72-zj zrV~z`W&6OJr4gBF7Ah_;q>->e`? zT4qJ<{srb}2EyNb4&5o}Hda_&(kh1Q`V4Oc*BFL~-D76iTqWvwS;iHnF)^zaa9&}E zJ?Y%s6I_e>*uL^J4FL%>ql!LXGi%&K5GvQ#=GhX?2C5VsZRk~22%8$b1RWv(@bTBN zR4Y%?!G=Q{TXHcfu7`sKpT^LmLZX9H^pSfCGV-h8!~|}>#`KCI=1rG@pffrFWL2B& zqumnwPllhI0@Ia88KpV{EU+Y1=^Kb6ql$~ek4mwj&$AMJvlOqoNM7xJAw9+3Ll2zk zwd!;sw7?iG9s(g6aLPPxU=F4h<0j47NZrEw(YJ!O*F+$34k zk#iDdbb!9hjl!Ehr97-4pbd)|TmGH@r`#?%;_GeB#!spIDipoilciVf4V{8rOc;Ly z)J1B=@;tOM_lG8wrYyHle)4IoVZStBiqh7|lEjuL7Usf!#6aaP+NVuqVB(yRn#; zYo*(VR+h(Ny$r0#RF>Q~TE?a4ahzwpN{FK<9THfq7x5qhyGYjQ?yp5@Zc2VunhCin ziSS_~Waz6Wad6T}_3y|47=G$`}4pwWUoN0bX9kmPOk5|d})R1?u}I4ZIg;g zenaZJud4d)j|SCu?bCKuc&Voz?GoXlX?+^XUnaERz)i;c<9-BPvi)sw|0JdvpS~eJ z)j#yV^Bj*rW#Z;?lh&~>-F__pC1hW8`=usR#QD1fCEC zvypvPS6e%#-+_KohSOwR0f_ zb#V%ePw;3Q#bFFjAbux4viHiAD$u-YjkqhLdlc37ZCnd0AaQ*<}*6s?bQNa(vfAoJ2Y z1loi^s-N0w;w(sf$fV5@%3GdQ(--(CB+wLyfsqfx-YH81;gd|fcSq7h?C^qts z4lq-S#0qG+Q79 zjG|3!5v0Wdfk&qJ6149Jaajg9tF?8Sm@N4fZ_)^6+ zO|)96T}=)Ie={Qz*$ve>Y^e6fG?A7bI*8}Iz-sEAI7ugTEdX_h1M!n}ezbw@D^A#D zbdN`N1oBHX=E?;0nNw#x@Z&U#;%O2{pM+2py`-pm1QgOd z0VV&b&tdXsGSZ+Jh<#^Ci&U%d=Um)d5saSEOL>d%To;R=NI};<3>k(_G_3~n1|=i!a7r?C0rt$b^AD#CAZpd z@@pOMD_pYS=p!6$u*$p(&uJA0VPdZ4(#(M~@=t!$x{s4~5>{YlKp+%9nGwbm?VQcQ znO#G0rLTT!MQ3GlrMX2bkT-IWXWf8RpHKY(M2(Qb_W|qoDId(EYGocc%_sc}XLji)PoXzve@&zr#N{Or@}n-N*cjXNsG|GL=(p zOJV+Znss29-vl5(;(!bQb1GnYt{_JE1_7d3UthtjeQiWZo3JK5h=8HwkhsTlPC&v553!!BCFQWe+uN@ zf~k9*+K}m%`H?h!SO4*nEw}Tby|KIJ0iE*QJWpSWvvzSkoNI7D*_!nnld|nSJ(1K+ z)V_c<9UpW}D`MMmvHXDxa)?4aP^r&^4242OrVB!aj_$ZMTm*HB+G8QCJQ85Q-dxft z@mrkfi5myB@ko^J+cbMB0zd9am~JBQ=fLBC4T{Hio(SL+)I4y8e!Gdl-l0K7AUmfb z0(a0mPu9dk@`Ac1Fgvx(|(Rq7WJ?zflO}b0V(s`zr{6{GJ$^#_~kU zNBW^?x2$@QDTbg#Gm`e3Wh;(V2+&Png|Btu#S@vUvGfXx<5{_7 z7Ba!<5mArNS4gQebq`9%2TE{Fj6xf&+WU1LF|%50aNS zc2Gm`#>u#apf(e*qs`|Zxp?`}3+EoceBt7Ql5W<9VY-cc7fKg)A>Dc!pptG2=<%N` zCtY@FI8ReVax-qkq=-$=74q%9X$Wlfr{Tyih|+zMe93c4xm&Q(?*3U$t4aafmAu3$ zw{s0Bhx(moFI_-*CNBDj0-y!u;l);T+XJWo5F$uZWr2<|pW0nod>@6EnBi@pFeAyF zwC)Co)(QNu9(10xj?%E>G)$#7>S9@UqOr}p>@28Rbb#83M&nSVkttq^;*~otpd_Tc z7sZcS64ltLOAra5oC7E;I~B(wtoLIyUdjSBy9fMo7CllgMmtWo{U_O^Q&$4ar8NL% zZyuQKhj6&dYA5G#J(pJ)os+P1=t)3%dJRB%PghVHE_@plZfyr8?MXnf*8r3|@}O*$ zSn-+eRg46Xw)O;!XV(A>Eu*bah>TbNRP9XK)LTbEFQj@ef7+AOpEZs|yO8Yc_@csF z2{lG>JCEG?5I=^Vji)Ure_Ns(Z`A9<7l5Z0?WnnK;J5)(dS=&0Tc{o$9Ou#^`O7G% z8;w&nxn?O=AwK5YBUo3l zvqdxD86u&dwhmQUIjrMzy@!jH489v;lRNqn*ecL;_+-Eg}Xy48wZY zuuNdYtb$ij=wPvB3`gU77`UahDcWFyy|z?QCa{#SAP~zNc)kl#j)<~bc?%Z+B7fS{ z^jTPSOQ^GkQQK&X<+GCdCg+k0vWiUKM4}$eRjQgkMbfa47|IbT8W6M1Sd0&05a|-& zns`_#sX~1-{e_R9nj0lWfi^T-6(pw;V96s`bUVoxIEOMSAp#9EXg$2`Ks4TD&5~lb z!HLvD5y28kMs%yJD1&CdD5`+a(ZNhB+D#)l02o<9J~hY_fE=69K7HrmW5DOQSF7Zv zrbil_(VSgb-xZc{D-4yMGyfsRRcqR)di3)ei z(Kdg{3G~HMQoxSNUsGw~XtR$RVw4mNx%Ppmo%~rmmQapQj|+V7tr*B?tRV6uiS3FEnOyx=uH#&_eQF!y{5JcF{}RfzBs zKrk2!@R8jWjG8YoRMD|Z$bBP4%fa3r7v%)A+BKommZOc#S!ltZi8cv!0{I0i!YcB# z+7dEgP)nN^JKqkVz*+(HE7%6vqNKi~9hp{9CLPU~t(H8{6+x=7j`k616n{@z|3qbh zzDGaTp*yW#qo2RU9Rur|^z#ZmzDz%V2(R4w9R2(={rm&{Y=?rd#_8u1^z*Cu38PV( zJy>dDxhQMN=U?V?FY|eq`JBsqzGXhwGM{Ie&#@dDH`7}jAgU}U0HV@C0-&P=6$gkC zmIOewFBbsOR!#s!I|B|7chJIUi^_By3tK8CT>u3dff><4xZv` zCw$C@?#eYLqen9{j>@m{mv&_47pYDV`rY}t;vSTphvuu`Za3Jw6^$X9VS`bz2AJKE z^Ktui;QfWxqmW{x+G&u)4r*Ofq(vYEdFh+gsz~4lZ4!gw?edNr?Jl<@ z*SbSspm|6T6?_Z((!Z%K3iKc7U(wh0H{89uy>sjaK?EGM9L@}f^YNSEpIU!;Z+|2F zxqVZ}B%hw}IL=ipjCb8wMP(*(>%aE*Kle}lJ=fFx(x_5L!n+M{L^4TZEpq?Z-;*2e z!17UvL;$GAb=jAdOo|Y#{AAQOb=05#OzxXVq6XE{o-2 z#G?x>#(`%$sCNe+|NgT#pMLi9r}O{5bREklB;;k!wF?gOte0D^#}@a&sy)BP!=Y4} z80s?5g&tlieKDMr#`5v}AEeB%;vN<=D^<>Tk(_8_Pk(v(4lk`TWtMS0d)K?|G|7cO zFGucX?M^YZCk-C&4jU^5f2E?~B)8kgUv+-J?}Nt%WVTIGb5h5pwJue;R^E4QJJG5v z8Vaked)VtBCf^tmIY1ob!DBCv@Vk!RP5f>l4qb>`Cb5%C}(gq$d#g|EvtnOqx}LDHbu zmig*YyF|@+l6z@g2P-=(P{&(zirc|jOp7#$66?PT+m~GD{>t^>#!ST}67}45u?Url zZ&GNvo(Q|VC>hA)9rt}!m3;Z^8t(iNGVemRm#+M%=}NKU%BDNWq(8_z^3S!N4_@Ru zVt$0f-os(PTTAl~*VfOgo9e)0`PXlG(2Gs~Ev)(V|I_pkOsLG~YjWFE{{C!}j2nXc zr|T-+jRr8?O;tXrV1}>z@(oD8x-Q*ha=mGmo|=MFm*^H+7@?mCPba?u*{v#U@@^;r z`4hL_IG9=F?Y!MA0A>T2t|F^N6Dw=fdtMaWZjwi78H;g}R?Xy)O$0EWTM^gT?z!s_ zsw9EoT>kq@P`VkP#-ae~J^U~J-1a0@BcyvL;)P9Aj?X^Y;8Kn*_AgxQpD%KX{G0qc zG5+Hj54<2~izapY-J6tm*RAHcNjVwM3auuHNY#8>R#_m}*@o-Sc|?q5NtRx7gQ(Qh zJz3o=&)x2vQuR64HNslpC#HqNMVlIHm0RE{P~iifmhkO7psuY-Ta*?qY}v#HMCsK* zQJNqnMs(18vjU5q>R5)eF39QiveYS7dq@aI0|D(CFCV$1u~IfyRy4?G*W8{FkT_#qt`9OlRYJqw}fg7|al(sAtPXyez>H3nV zi)G6lifIC`S#C=+XKJ}tEJo!7#|;Qssp~+m;29`AxIYqf9boSu$>Ad=@<>r{0&qk$EncpIGGv&koPN3H?*{Z7VnPNcGgsUdh6Q8h8t9Rmp06$ zZ?A5w3A+Qj19HtsxF`(>u$S_DQu2v_$73MECdNhgk`|HDF+-stQ*aEG;JIr@Dj(yT z@JJFPS5drEFWYWF5W$utx0xWl_Tn-t*dhht*g!~-eLClWyK}c6C?UBi{7X_{L>Vgv zqypCgI-fFvH6=rqM3y~COkzWF?z1>CG_c_!wUwQDX~_S$U0lYX7($&v>0Zso765dU zzHkWeFw~;RNn4DN?*LE`s%nW8J*4_V<^Y5x@;^gQ{>{PbZcvDVQKLpxM!{hiU<%|r zY^Sntx1_a&IUNo`HYZj0KT&!z^zH_61_Qv!tjG`^8vt4q4_^J*Tkz*VkE1p9L|LkT zZLS_=$|+?pgg!}x9fvaj07GfB6o>WDJ5WVobnLog3o(Pm7SMI>fa?7Vo zCKH+Bhy2~94&>dg!DMaOA4}A=fumju>uSkT74aI|k0Xg0Fhby~dV`mP3n6`hf%pok zfd)d5Q{%uDvPVTpK1L4Af#Hat!jz*mz9ggMO%<=Ik!Ji0kDSRyB1Q?%V1g7Fg09?+ z2wWFTV8}`t9#RCf!R$lQOz>+&I<5fi%591KNq8%CD>y;@A{7%1q$m!Hw*ie-;jwcF zqmWt_&j9E^OC$JpM=R9onFKPljTZ|V1?hzadWVShcaOel{G%OtfZe@jcmn?(Cc&y_ zKu1NPDxC9GhBYaaI)RFCW+S`+S6HvF5f|LO6}H~|)S&5TMLz&lTSD*~>$>V4^f6#W zq)I{n%(R$!(#r8@P@P}Z^sjN}FZ}z+cf1==Ie2RtM7TO|0TnCcodr1rX{R17kQ5Vo Ru=Zm@v%2tUyeUT~{{wmB0I&c6 literal 0 HcmV?d00001 diff --git a/.doctrees/references.doctree b/.doctrees/references.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b53929b870ea4e1cabd262db8d05c5b72f3085b5 GIT binary patch literal 3039 zcmaJ@TW=gS6i%D&HQCLj7a_GNtx#zznrt6e^TOrL+bG~O-VudQ&szUK#| zb)9eeZsYNZza~Y&!ik$wKcv=bF?ANV#K<;9YGM?zLB zEb2Jlvowoaf$#9!e4F3loBY5(n{bu0iFQT7^yEzG(@ExxrL)C9IA|udV-whF0zT3P z0o*;l>ZW|F&iOKFy9ih{@>A;l%Dy{NTxguSuSY1rMffT63YPMRfBT66sPl6SC6aKT_Y%={#kn<>A|Z@rSa}vcejQoJlne7rx6y zngW^^e$*If1^vS1Q=~i%#~XfFAD^I{a@po zD-Zx0Ka81{Ui^u_VKps`q_GmD)GE`=)b#3DWvQ&w-RM-=cQM0P{5Wwsl9#kp-Cjs) z%KE-x)`}uSU)pOM%}lGpGJw)|f2Ps_9c`!TDrZY)!wKIx@q>(khSVw@ut+ILZ)sj) zu~lD4aLXx{!)EEU#A<}vl1TQri;FuE80Y9hGo@^yEL+(;zT!u*-vL=D+7iiLGoAfTS%ZdVG>2q>5+y7K75?;NQ6NVIy;h~r3Vz`1?C^_2Bk+Ca z@+M(gD@`~pQVE!&?1(L~!SB?WUa``ttOS3swzFn}|Lw=M(WL{6qjxTEtey0`F#rI~ zaO6iKpx{T67MY_NL%LI}uY&six@L*eDM70MOmI!?F(2$;7%o}&>w5R6qSa#RFQce@wCh4r811Ho~$5} zSn^sJQR8!mq{7gtjDa*>_7=PV$F>oS0TU{c!RV+_Ba8OvZ^bWMVwkRo$ckt!MZLGs z+)$@_34HEFasf6)1{6w>3md-Qedxy}E6Gad0Su#LO5uBChX06LTbgH+3B=~8Zr4Xj zXOrM>M$O6rXcEhEl*ghReaH_VJpCN`9P3%KWnYPmg4tPh2iQO1 zHkY_;VCfVTO7RRF_x%9?nUj{AZ2-iS5g`|T*PIuY&IuP8m-qp^*QAQL-!?e~%YJbn zwLzk;SL=F7q)KT0^7w;|3U3>a8+h5gtk zjGM0Mi9CW=Dq2%9&MKz?n88bxg1_f*fiq@t$;|{>r-bEHNP>AScG=49y=LM9Smmtl zX%~Kz6|dvW0!Djy9-7@ zM2!wtxeO?H!3(G;sOTU4sMiM<`6DVQD0XB|iS=oawIWsqL<*>S}gA z_=%rSaA&IP)H%PZ^R4Q~bX`2-swq>ZPQm{*7kaf~sX8`b7YbFk;CQX(?1GzbRGg~c zy0W$YlGcvax@KS99`)QtJ@2%dQ{aevu~aV9ooeg6R&xO!?w88mKu~{{=j8p8TV>UY zGm0~dv(9U+EA};K_$9yWM2ed8PA|Hn*2y)j;u6#gGL=xuB}w$X!Nb8b7>fw~7F>~rF@#$a)7TWK!UqVS96lCzw;U&=ck z3f0!BEz`2tqCg{X@W8f%TZ{Xk48>ItdvP_$yD$7(1OL{-zx5DT@f8%$hW6p0{@l7# zgK$cD7!cSAdr}0ILZ|nYLJQjp0_bZ_gFzDQ*n^HJIKB-7Y_zV6B%W6l3VWp_qjv9hK){}(VoH^vyE4JTiPA~eEa;w=lRw-}tYBmn+*|oak zIrZ%hDYCh^viLfPZ6??xWuTM#ntd?v?BTjyD@G&j-|Uv%x>c%L7uJUd`>oTCdtJW; z0b1^mwXW!l^;nyI+SRBM~gJta11Xmj;d?WfWzz1cgvb9rv~DG;czM7eFi3 zZb?>#gGxb?!O()FELK8=nu`x8I74=$?1Qjd-KsNZj-X+4p>PD1uPbh6Ci>U`p@6dj zn-S@*iv}l$0!nucNjJ0YQ^d?QQ8Q{9Av3Si*C^R|b7p%ax0+KApqw2J#yj>#n6t+) zc@`Y8v3ArE8$&3C8i`*slH8?3lH!@gvk;^qHkQP?aA-0T?K0$r9E&Myvw$8n323iK zKrFADE6=FgRp2Mg#`$psAbcEltT!FlZyj{rKqzsSqj=^$5*=0Y!5L=W%7|aZu&=}Q z22Zb50%DK_LuJ=a0@gEaVDaSAX4DJnv0$P-M~Sv*f?r&m=b{FavjRt9D2@e&|D=*~ zPquC2jMoz^jjV>{Xf!@~=YwD)E1^a_oTw;jOiirSV03RXDsLPy-lCG@2V)5w{I5gibTh|_7yR#*T=^I8m`GuvWK<_I9V^sL_&NwEUuDd1wNcZ;WOcTV)A8;(!RzVJjbo zVUBN%gf0Q#UNHc~<(s%v8yQ0{=xi-L{6=-lnnN~6*wXIvD2 z2ZP=1WLGXFWb}x~JnkI?Z(=^EoU@^79}ZQUutK9EeaQ|1qaR8uS#qz49E6_9fP?pd zqb3|YEY^!n$s7zg0@n}ZD>V}njEN5!Mt4LcI?lx1>2eE15ONW(EQAZS_(D#o-+)We zF(pr{kWfcQ9FY)e?-)W2x^8(QqW+9-m?G-$TCrfV{RL_eqUIo?0@t`WSR556IUAyk zItC0sM~3BMBBP#WE%c62Yj*35Qtma%wi;?AEYz?_U$SGt=t?pwZ#-7A z^oS#wQ0lGdhAE{k(TWAr?QKv)LMbfPPr0+e@C9U8E+(ejC~Kj2l)9Pupt_Q}iK2tc zgcDa%Sfnr6*&xM-$!H46)F}l$lL4jf1xHON^~P8)UY$&-a%s5em#V|^byRu-j88u? zjO;Cu$T*+QIVtep3hw1t7p@JiwXW^A)>h!gN4Z?e6Trk>{ECy(8#)Aa zj2Dv2YWa#?lhZR@Wk$~P3?r&XBI4v+MfXaSFZ5lvS5$g@UYlJJd*K6_)BJ-UVRyZDdz2B_`g5tcBjO>Q?51>T2(1 ziY|7whei65T?kU#L`G9crp_wpnHWllw=i)SLTuvKEVJ(iM@?AuwpcGDxY=GQRa3J{ zQkg~cuwg{+h(yF$wQNhNTB zzn#p>g+)$X#9HVbr*30Ds6zf$iY|6Ng+=<3eHf&;nT)28Or2BEGZ}E|L2%TBQ#ZzX zA-Rc&tB{<+6JsVO7_%NRjPB!+=s2_XXXk-RkC3Sz&YAXDwN>yGq?yw|4$E` z4Y~M;J=Vde?>!5itF`QW-l_RcVUu+s{dQ(k`>Fey>un03yr=JT<8T$`4G-kcSMGv=3GS&uUItl zCOiQ6Zgj?U{e8JsM7aKb57gjuRfmIIC_G3Xyk7_N?ix$1W2gX&y$ z8$}m8S7DL9WOsoSx02BmlBv&C&@&m#RS$uqCUey{V!e<&AH(=|NI^bZ8QEa-)o%>r zyDt(SpRYa%^VK28a8^(1l+~V@+P@fUPhU7;1+!B7i?MJ%3x1~|%yJ#yw#{{XRd;Z#p&?x|5JLfe4VfEs$HHmU9(1=m zId}>^JOE~6_$g@Qi>h6Xe$3mxGYr$S19LX&6h0bo&aQqd!*b*$)Ng$HdRAbuoUP$J z|Gh~1W;oB!nVG>nzYvXRos-Uk8eQjkJSb{5c}9tzll}lEt=VK=E-cRTGgu3~o97Q@ zKB&&~2T^pf^E?*mOZG#MVgngXAz5;-i07oxGa1bD=Ypdq^Zbuuy^vfav+H$WboXCB znV4X+e917n|Bgh*X8Go46Mh4QPg__vo?=3X1J-7@4!?e{xzz%m*U=B9;8#+Oa={ve zQ_%3#_26R$tmB8QakpWO+Ew`NlnW=Qd0=tfEn6_Z)!XL0e*Dra72u0}-GONsY&wNu z$Ai;L{2ShnFhB*)0DV0$RCg<+^Sbry36Phd=bZH8LN>~?DwUitaCCVF9d zDtCoeD0nLOFHnOJANyM_EY%0qqhR+vWLGXFvi)7Gh2F9K3(N;qw%<D&o_16e7W#LABdqoM0~qV@^JXLV`UVaZW-o-Dg)8%*p^{OVNndT6GcB z;A_>6_XTjF@Sv#KD7aHi2;5kN2MF#Rx?~&7{C|! z?MsITUmOkQ>3;J%SaXc_D2~Wa=>9Hb7QQ|ZUM1<^yRtgofO%Y&!9(ns+2gZQ-|S9G zBqx1yCdAmNms%rpp$@EgM`mH&@jMG+;jqZ_s z(G}B~Y@M?gz-k5Ui7OjwwV>d$$&an;$xl(wLeohX6QX@B!eYv#Av43Yx^p0Z>FdtMo zb{|C-%P}m{*K8wd_D!;yLNj%aVc%rHu|I*QCLB9B-i^bOFY(f28C{m)X{$4$P46=c z>($Y)IMH5xN*Uft4HqvgiUM9+i_eqNi^J*F(r`}>FJHhbAM)%KhxjTl#<=tbcrNb_ zu|>zFe3*sQJ2D!Pgn9?Yyzr~qsMN*>ss*?#V~-2(mY(pW;#zdi6odU*F(L-nLk+^< zYJ3lv++(gK){1JGoPW`k@M}TKku}tyTzur>%UKh>B%FwMJan_M!k+zTv$>Rf-ocbYGZ$`BFe9-lM zx3VLgJI*R_=x^G^eHMs6m{ayfCH{0M8Jck|>Am=CJ+^zA@`kI}Nn%zfMQ)s3>Ph#I>Fi$=Qo|?>)XGPrL&Nr9fOMP+WjBf>RU*2xn;T|~& zrEB4;Vz6`09EdI02?z&Mx6OPO9*d8`;X8Occk-F=Jx_?Gb2>X$-dC{8#>gU816|tk z&r>1Y_+1Oh<(n68U!IZG;FC%3<#4cufk8ZM4barvNQbVZEYqySJL4cGtxDR4>@En- zOYm)Ur}h~1&XnlKYlVnJe?8P7qATC2#Txp+8b%pkM~%so03rVx)v99v@;)ulpIEYF)6 z@2nGWFJr5mlZS#3(P1nfl_4kJErc)Or1I}P-hiH%0&P4te89`iw!j4nkNOGYfx*Q|+}Z6m8GG)wLmag9fPlL;9= z0M44M@!lsS5htVMr+AaPd(X{=5nd%k$SE1WNlyT~_(IOCF9-unK3+m*T`M>vVOHGb zN4f$&;qKkH(G^o@-LDl7LhC-LLC}id#RrS^Gw?bT=$m9&t|(ILZq`KasP#1SL6urh zQgpG@!Xkamu1C#&PgYZCrcN#Dn@p&+_dGLd-5{h9rvkcH zIJeSo&=cf+dIRiy^j5>@z9dA)iS-Y^%g>jE1dxyCkg8u31d~uz`3&~E=!q#*AJhs5 zq51&SNIrwbQhh$$iSpb>hUI!9Q@_QU=p9p^XFjMh^=XPOmZ?~zui4j8vnR=F3eD7+ zN_~?FQ&-M6W9r>P5^<(VF3;i5TIJ7crK`+Xy1_82dxfYtOS|sp6HEwQkK=2?Bf;6| zP?L|GkX{c6E@nZmQ_vGrdY!2i4$|v1sF6%BERD*OoF&l};e#m8Rx&Kt6X|s#Yod4b zx{&#xO0Q9hE|y+cq_5czP&1FLrqC?8U&Iw5^-U)9`Y$gHmDUvI3YabPIC01tSI><1pCxob?=9nCkXF0o7Cw=ajok7=-dM6;f`d;BbbN`!96JlyX1OiV7+BBdF1pa(Iw_ z#`d9DKOp;Zb&+!4V@>pqa#I&}hAH%^BLNBp?t{;oZS+8g^$&hAK@{l^QbDbMqe{YMDhC}F?y(|iAno|r=4)(Qu)^=7C+*oyuA z8J6mk>oq9P8_BR-Po(|Xtcl*y{$0!m)$_bdDZ1G6JS@`J?6s)bMPxOFX6m%3zR864 zw}P`KwBIZw5vRS{4jq%bdk-}3F}!b(%0-X)NCqQmA4+NnL6R9Z!#g=25{DdaAyiBrAs*3)yDIp6KkS(WPUI6L3Qozy6Zej@G*3 zjO_Le3MR1^VIQK0gaDFLp6^5SW2gg9TZa1(p$4k^5Y>f2DVf*e&MP`@K$9qJRF6D~ zk(f?p&nU}*kDKCD_7p`A{FQA*ga_%9xPf9lLH3io1^vL;>wj4jy_>yOEa?nW?lr2n z7t}~NufQUG&9#>@t&tB9wnap0V1!qlWuW=!z`0RDC2rsBbc%)-m9$3AL^h(uh+_^0Z>nu?x96ZMP`rmXQrct}_f{ zyh(_Wlj~5vXCzU}!pLBgomvgH?Xd^Tj#V167^AI{XW_=iw8JpWl__g;@)d+ZDj#zp z`93a$BOzbh8L4dTHi{0J^6#x$QDGjBLyfL$H#|r`qi;pA8f0ItE@pI{HPJf?-pG7V zUAtXR(Z#Oaut;CCPoiemlGPNNsZ)^pCKC#N1DrLX;B7)msZ+4*REPbd83m;_7zO{! zFviadF-9nO5(R-Lsc9&ft~RIOqrxDSkGYV7{~?5vAqAgDhfFE>H?63Uf-gXgt`x+B z^fUUaDAu!NU#>1v@K3CX-cfMB-8;jSdyVQ@P$OY2h(-FEeGN5RL009h$7-fdLF$`K zDEJ0&)`Wt03Ms`YctrAbIj?9B`AUmHGb4ideiUn*?90`~tlrL==p6|^#(Yp+ z58g=8#jXdjNMExDP_ygFY6{KNNl1N@2?@Uq&YF<$!OoQ8Av71#W&GHE0%MBSCTi1@s zz^4rR?x)yyVPFss=li7Y5;$#-&Qz0kM#%DC2+m7bZuAt@GW5ry=*{@Nv!^vt2%{U^v?Gi|R z6Uk4`8}WrAI6xsl@oTmcbii2?%Kwj$Y}}KS`}_qCr>xE5Y8b}#xDXd7V3+;>0{^=l z#V4H0gn=d>HzDJm65Nw8PWSrd2hkx@tX-!S6=LmLsL^%3iU;XuJ$7}1w=EaUzB0`6sOm2+~|vd&>FAC(~|X9(d-IH~+A&6lAkrhr_f6%GP& z1=Juw#{NnZOZBsSHp;UX8J6pbWZZ)_(K|98%Y0BJ`1bjLNj$T zQr|=}m-9$m%mt|@e$CcGC2-b+jPryf;+{x;P(P`=1dbau2E0P@rqcvRqN5)(2P< zy`$DW%m-C!-9^#GQVWapHCv9F-9c7UXr@jr>YGfc^*eCZgj)LuX~d}|d7@^LcL{vK zFvk6a7!$a~HUf;}7Axf3n!9J`5R;FXkX!2oXENc|KIn=mxAxVF2f1ZI4GFifSU(5* zQJ@uMS*|E@Yj4&>@3?h5^Fftc$5M2$+`=M#%{HKBN0ZeQnyGV(`X&=@Rlr#jZXGD3 z5$9I=P5y$sPj7&&C3hG`cbE_zC)PjwE`gT|2_PTOAyxlL5KKZ<}EY;`3Q7F&#WLT~zGWA2OiQX~wUgm=;Q}3bZVws9X`kK84HM@(frqE2C zsnj=_F!c#=)`Y3A6OxECRdQ|bMc*ax?}kymL5Pa8wCnDF!GzHDIKC!axL4;;laHK` zURwkgv!K_@(Gyd8t9rr!NTwH->Sy99D33*k<$5B$RtMt?!_OVB5&%vOSz7)JF*Au3L< zq-_8LzmtkNtF90RmVBIqtjY-vNm!+OPxT|{kSVf0p%oP(>tj%ZkR|&)FCL_yg@Y*8 zjbvZ0E|TlRtcl){>we~gD!J~Z=wiu*MID-5HRF~k^uOXNdEc<5qZ__qfBt%ZN< z&uc|DD$ApI_mKG%;;AEyIw=!`Jq6C1AZ$p;Ek%SS?)ayIu*Av?Vbk_Di>fR{6-8M5 zet-;N@x>frOTo412$PSK5Mk#F4rPe2{m~&)guOy5Dn!^isL>T+cu-WVsp^swi zNA~6FBEnX)CVGdkQ<)E{2-`x@#Uc!g^fhasX2+A&6q+UXi@04N^-U(^YJjsQ9wPtAs%)A5$UaE)^Wkka8bKhfFE=DXplG za<@Q@u9U-r^fUIIDAvcwzFb|T+)b>B-cjyB=7TEb?x*NtDThV+n!O7(yO*q{&`h0j z)Hj(>?pbiwgmUi@Qi@Yf^4b)(;gbBPy9O56N^RE5%;I~$5FcaQt}XH6w!~`#eU~~$vdL3Q>zm7)(Ww;Np#3`=Kri#R5lU&vR~Kjgn^_aR zoB1DNKB&(84^nioGd~vTYj!JYc0XB7p_%&3Pkocg%>M#7YclhHT1Y8A^GmMI(F>Y# z-G91eVuH>4bC;V%_&Fg$Ht+A+F0eP-1ulmUji#nN(?a%tN$5ri`;{N#8$eG?p?`>0 zI0*d%p$0)e_J?R#8kHxRD$(=2ub@2rWLT~z(tbT_qIa}Em-(Pd`!gxJSlVNezGh!V z%}yn&DKty&7x6rg`X&?F?*L~_X#bx=5^>tA?SVD9+XY^380|NNXgT@2?E~08!O++) z@H$}t%Ewd4w0i{yB}~(OVCFOEkSW?euN4)d?f*axzMk!P%PU{}<3ak_`dt+3(_~++ zE)wom)xWD&ZcY=wbsFpKs_LbRN4le}?XAk8GV%8{}Pgp8(#e6)xB{h1)2gug~Fx;hxW zGllW1v_eD}zY=N?jFn$>g*BowCKDjK_WU`@cpx<<*B!~cfi=-PGM~qMP$l!Z6kRNt zu}ELDU!Z1ZlGPNNCHITC_N2bagv^(KvnFKzm5^+l%#!D*U-az)uP}`2F(E2W;9c7V zX0~164MK{&Jl+)IfE+z$b)3DVf*e&MP`@K-0|5M)k;D z7>Vgr_Dy9uaGJrX>~4x4_$%8k5D(HP@gGsFJIQ`>x1b+5dwq>H(Yx8}apr^S?DZH$ z7dv}lk-lb6p=OVg)fAek&tB9wnao~GR+`OT&j=~SXRkDS{sqhBG*#KT!^;gL`il?| z%W>uX|AHt~cNgTV^@G9n=%AC2p>VZ6bvg{X$Y79AE$#|%sp|KyZ||DJLLE64Ju$`E z30mPG&W?i`{0eZ}GcFI7M&(J)m*^^dI?A(|49oRIj=h#O(L0XSm=CHPD^ql_9K#}g z&1RrxMY5Vgv*dmeSK-t*k)g}!A-;1g$SLt_mh~-g)?^hvTSy}Ai3~=0`2#*_sI|MeTS zvIGBLE_wb0dfkKGnbPY%tq_r3-+~(axjtH;l~^V&iPvaz;A>q}vc~(tw*e!*dz-c)zvXDYyftl=2uMeDb#qz`x-5ehY|L zvtc)A-?i+jRjSy-4kKd5RyhC;10kY=Sw1#Hj;;~HmvGcSz%G~FQKw+}<2A=SV3W1Z zsx~UM@qua~kfnpA46r0tTLmT=YF2Rzjk4pRbf-Dhf>SS5hc~-*C!*y99v_cUn(}z7 zmQ={&6QKt2*qNNDdADNA(QZxVM|7pS4!iX@a#}tPkn6{=CVIzppZTE5^%_MN%XKW$ z*K9p%Rwk<{G)wLmaivOqlL^;92+o?URQo%VpNG&~NWhEV{$^s)TK@WgImPA0d2Q`+ zFtxXuk!*jn_$;^FsKjl66H~&o;&!2j6HMo7)8bcR7kD=jp;glaHH_aVH7xNf;M*m#E|6F7lYgH!_3{nPP35R#cdaMW{i! zD0^KK9;Ba@C!<&evM*N`v(jcw^p0d#FdtOrJyh>;v|zinMtMb-kHB%=e^-U&Zd=)rrLPkeOB2GrhkHjW* z3!LK&BitrL$SE1W%S`~g_(IOCvxNaBA1@)ZYJxKoW~pz1GlH&|Ld(^P2eYpXH7NVy zx4^+-{S5R_pdwk8D~cKDuqJv(t*e+1s_VHcD7x7792V(o=A&kplhqWOsZ)#kCKGCX z37j>d)~Jw1oLZ81T1@g5INvgiafc9N0=L*MH*wrzg`8VI7KWI7#Dv^>yWmVF-1=X1 z#gto5YQ=-xdK_vXP9!YQMaW~BVo0LMf#e( z6E#~%R^_e7YNpOD>YGfs^-tie3Ac6%X~emeeg~T%@6#J#=c6YYM)y7;I!>&A_$_eW zBqV@*Jcm?m34%$es(c1pMNdqj>S=|8aHv5IfXESBo?;R7g7nGDPIL_U;Q6TM^V zHOvRqwcu40UF=#Ai}W@7AZm66SxuptI#a1{GGXdh!C4cgen?0n&Q!_exfgv4obMP$ zb%PKUXKB~1ZGs7*>v4Qd_%mUs$wy8|ua5~XWRo6{lCy9yfvCNyVI1IbmSQ$4SVlFA5Gx zSfzVUwT=#%B5PDDD$G3}YEbUU?y2HI`dRp86stz|S zt!)^&;)^-CejyAj`8Wy5^=-kS49WE;bjXxk&uc}6#>@tlZ*N$6LM_^XHCfUJt3ty zxg_^ICw1qW(+wkhNQjVAOm!=pfNH9TbIRp~K`0+nA?1E5IGiEnwxdI)l)F$XD$LU{ zsL_>jc#wX^K8#}dWM8f>X6*T_iQZA}2Ihn6`s_N2E_Qu}Mf#fk95uU!tftURopRJS znNaR-aMpx!j|eHnDQB>6O@IXh3v8wKL&NxfE5yebw`+HoxZPdaJ-17nIBods^=knx za#n=1*WV&pT}t{qffVmqh=v+J&Ydx`ZMpUj2@Fv~d`&iqqm0GK1d%y8zv z039-&`7hFn3g@o3LXEC7KOUq%i%mnZ#>l>0U7W=ltcl*u{2ygLsGhgpK+(mXw_=gL zX46r#>&R*f&D3Xp>YK@dek-J=JkvtrTXOB1LgTM z8J0VMw11X0(L36&)s}5vsF842tInYN$cpoD3<&&j+E9Wq7RrCL!T+Af9~d_CLo zasrk^B$Z87B)Cos@ zlL_Iz1J0Td?iE5x=@L%1VNLt8LsJcvGDGcDfUfzOVYCMc(Q?8~@*XsSG?UyaN6PPo z^pKDCkiUls@=5q>^nR-;`)2^-8E9lhaawVuDo%ET8U$nIoo}#4w2fo}MBik1ILi1p zMasOuda8G1euWUGe6--awlR@66{kojbA z)`ZMQ3dzRFEO~tTMc?@*XBgFHAu3MbT|3`ow)2fEq}WSt=bKR>faH|tJKu~$9iVKu z^9^dCy7SE&gh45p*W%7AI&MJI%+5yj$Q2lg>3PM~%5vZ|gZ#acqKB2SZ08$1NT0+f zqFC=E`^nvcejtgPtcl*uUSDB8s4fJ)NYTZfS74F8W+$O$pChX&G*h3wsBbcvy?zeP zn#^7&3n|5CFWI&aqw-g)r>V-$9sXb#(V0R-EXQB`oo}YB?HqLSF%+)W-zYdNp<3J( z;P(D90?wAAC#E>tODi12*&a}XUjc4=#!qIjR6i%rLwOdHVY!~ju?4J&-f`?G=7TE7 zHc@o39K#}g&EAZf9Y$7DXr|6F>YGeBHVDp|aLg8xNR4AJ=FT^D!-$53h&aa*ceWu2 zEKA-Qho|D(g<&NhB_XNGf=d!o#a&lO-b+TH*H!49DZQ@M3K8k`0jR;RDO`Zy$%JUX0%uK# z=5;0;523kudwb)8*gXN-lXp>{=HyvTDwP! z{l$GwoYojj?xN;Q&u!H6POI48+}*F+Rj+JgTe(`@9j-f`*V@rq*PP+IzFlseIHfr! zJjN-&#|ECSOl>a6H|lk#>gNJmTbuL3Z_1^r)7sjc?K!>=d%Ae7=Hh~zZ}_FMH!xIp zt3K@Z(rV5;%Puz@uXSZ>{Uy}kOt<0J8h&eQapBfx->_44>bCFJ!BQW*z}NA7yHbM> zbK4E(pp|X#aZd2DQ7^-%`M#Ua4chr_SPBi#01xZqt>%&;*Y&He??ehuoZ6i4Ie8y8 zvB`}Mx%Em5zF7b-lP%S9dACx5svekJ-u@RP$}W;e`jyXwE1&gN)p)-r7CEYbEc!VCHQ+qXJO8%*WG%qXjcnmrw)pvt9ifG zT-a7RVr2$dX*E|0C4z~O{&iEPG#9k(av#FlD>@5=%FRU>1B^AV2ojYcrdD%)*{%*Z zV1p!3ya1nfbE>W8(z=s(>xEpwso}mr)qIJRo|$*6Ll7n?QYye$b%sh~t>Vn)0=wb6 zIsR31w-OAm`32aUD945%2uokUjN;U*b{V^FA$>!G8@r!>Rr8!i!Oe|Ta7Zn3#%iwT z57C9WLdmlS%NR)D<*YC@AkF4MFdifW=t@B#V zW%w5~;yHE7MW>3^3ee?q>-H#gRr@0h(Z!fwFmkHHFc8b7O380+S+usfpyt$aAc_N7 z3Amgzne&|rbdL|+ zF&n<$u;##5f}RWNLwUhGe#6c0ADYLvZR3#L=F|sDjz2_g001@?{Yn`c>+|hF$fAN@ zY@Il}xe~@?CCAc}1(5S>~=OzCn~|1sSG*=Na1mCq3Ae1G_pq?j@p)UDt4)yvkL_TExElI zEhBzCr##fg+Ro-Qr@FnhwK3S7-Np&zFAT*}wNQfO@N>RhA9eswFmM)wQ!uoA;49cD zI75i<=8}$Yt2XShgI|NSA@*S=rci;tpM_tx|6VsT6_R}9Z!mR^%%21QnS=j%cz5{E zPw_vWf=xt5Zo&UNkB2;i>w#t;)~9{J5ancHC)M6bHFr|2om69IqqrK6!3K)+$a--@ z+w>xAiA>}ENMxEG$!#>}M+XRbJU?H8VTK_?6zy-21L1LPX`j|0JAKvf1^e7w0m zCD5U}3tzIM`#KKm3tOd1OFHZW((69XA$y3nf)bcXfl_(5fedOj=fZ8=a=Ytcrkb@m z`2I>z@Uqrvka0D;4!H|G=K&zw4Ki4Dd_9+aO~YhvshTf03cv_=7)QvQ0`fFK4=xfK Hg9HB`K?hg` 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..0d0ce715d --- /dev/null +++ b/CONTRIBUTING.html @@ -0,0 +1,605 @@ + + + + + + + + + + + Contributing — gustaf 0.0.23 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..bbbfac771 --- /dev/null +++ b/_generated/gustaf.create.edges.from_data.html @@ -0,0 +1,813 @@ + + + + + + + + + + + gustaf.create.edges.from_data — gustaf 0.0.23 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.html b/_generated/gustaf.create.edges.html new file mode 100644 index 000000000..4038be157 --- /dev/null +++ b/_generated/gustaf.create.edges.html @@ -0,0 +1,779 @@ + + + + + + + + + + + gustaf.create.edges — gustaf 0.0.23 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.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ 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..454d306c4 --- /dev/null +++ b/_generated/gustaf.create.faces.box.html @@ -0,0 +1,802 @@ + + + + + + + + + + + gustaf.create.faces.box — gustaf 0.0.23 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.html b/_generated/gustaf.create.faces.html new file mode 100644 index 000000000..e1754984a --- /dev/null +++ b/_generated/gustaf.create.faces.html @@ -0,0 +1,785 @@ + + + + + + + + + + + gustaf.create.faces — gustaf 0.0.23 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.

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.

+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ 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..47dc8ca0e --- /dev/null +++ b/_generated/gustaf.create.faces.to_quad.html @@ -0,0 +1,814 @@ + + + + + + + + + + + gustaf.create.faces.to_quad — gustaf 0.0.23 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..b8beb4715 --- /dev/null +++ b/_generated/gustaf.create.faces.to_simplex.html @@ -0,0 +1,823 @@ + + + + + + + + + + + gustaf.create.faces.to_simplex — gustaf 0.0.23 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.html b/_generated/gustaf.create.html new file mode 100644 index 000000000..1f56b65b2 --- /dev/null +++ b/_generated/gustaf.create.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.create — gustaf 0.0.23 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..314d6161c --- /dev/null +++ b/_generated/gustaf.create.vertices.html @@ -0,0 +1,779 @@ + + + + + + + + + + + gustaf.create.vertices — gustaf 0.0.23 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..510d06d8d --- /dev/null +++ b/_generated/gustaf.create.vertices.raster.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.create.vertices.raster — gustaf 0.0.23 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..cc4a99634 --- /dev/null +++ b/_generated/gustaf.create.volumes.box.html @@ -0,0 +1,801 @@ + + + + + + + + + + + gustaf.create.volumes.box — gustaf 0.0.23 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..b06a45d84 --- /dev/null +++ b/_generated/gustaf.create.volumes.html @@ -0,0 +1,779 @@ + + + + + + + + + + + gustaf.create.volumes — gustaf 0.0.23 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..ab78116f7 --- /dev/null +++ b/_generated/gustaf.edges.Edges.centers.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.edges.Edges.centers — gustaf 0.0.23 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..b1116111e --- /dev/null +++ b/_generated/gustaf.edges.Edges.const_edges.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.edges.Edges.const_edges — gustaf 0.0.23 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..378caf124 --- /dev/null +++ b/_generated/gustaf.edges.Edges.const_elements.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.edges.Edges.const_elements — gustaf 0.0.23 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..32e35bce6 --- /dev/null +++ b/_generated/gustaf.edges.Edges.dashed.html @@ -0,0 +1,805 @@ + + + + + + + + + + + gustaf.edges.Edges.dashed — gustaf 0.0.23 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..c99101934 --- /dev/null +++ b/_generated/gustaf.edges.Edges.edges.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.edges.Edges.edges — gustaf 0.0.23 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..5f5218ee2 --- /dev/null +++ b/_generated/gustaf.edges.Edges.elements.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.edges.Edges.elements — gustaf 0.0.23 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..422dc16f1 --- /dev/null +++ b/_generated/gustaf.edges.Edges.html @@ -0,0 +1,848 @@ + + + + + + + + + + + gustaf.edges.Edges — gustaf 0.0.23 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..a830af83f --- /dev/null +++ b/_generated/gustaf.edges.Edges.kind.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.edges.Edges.kind — gustaf 0.0.23 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..d0d9b2048 --- /dev/null +++ b/_generated/gustaf.edges.Edges.referenced_vertices.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.edges.Edges.referenced_vertices — gustaf 0.0.23 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..936f091cc --- /dev/null +++ b/_generated/gustaf.edges.Edges.remove_unreferenced_vertices.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.edges.Edges.remove_unreferenced_vertices — gustaf 0.0.23 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..ce2560714 --- /dev/null +++ b/_generated/gustaf.edges.Edges.shrink.html @@ -0,0 +1,801 @@ + + + + + + + + + + + gustaf.edges.Edges.shrink — gustaf 0.0.23 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..4ed9c12dc --- /dev/null +++ b/_generated/gustaf.edges.Edges.single_edges.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.edges.Edges.single_edges — gustaf 0.0.23 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..57450a912 --- /dev/null +++ b/_generated/gustaf.edges.Edges.sorted_edges.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.edges.Edges.sorted_edges — gustaf 0.0.23 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..43ba5120d --- /dev/null +++ b/_generated/gustaf.edges.Edges.to_vertices.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.edges.Edges.to_vertices — gustaf 0.0.23 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..70ee8b8b8 --- /dev/null +++ b/_generated/gustaf.edges.Edges.unique_edges.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.edges.Edges.unique_edges — gustaf 0.0.23 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..06fa6e7c2 --- /dev/null +++ b/_generated/gustaf.edges.Edges.update_edges.html @@ -0,0 +1,787 @@ + + + + + + + + + + + gustaf.edges.Edges.update_edges — gustaf 0.0.23 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..5c050fb5d --- /dev/null +++ b/_generated/gustaf.edges.Edges.update_elements.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.edges.Edges.update_elements — gustaf 0.0.23 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..e491a31e4 --- /dev/null +++ b/_generated/gustaf.edges.Edges.whatami.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.edges.Edges.whatami — gustaf 0.0.23 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..fa9f28a9c --- /dev/null +++ b/_generated/gustaf.edges.EdgesShowOption.html @@ -0,0 +1,793 @@ + + + + + + + + + + + gustaf.edges.EdgesShowOption — gustaf 0.0.23 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..572434c4d --- /dev/null +++ b/_generated/gustaf.edges.html @@ -0,0 +1,782 @@ + + + + + + + + + + + gustaf.edges — gustaf 0.0.23 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..56f2906eb --- /dev/null +++ b/_generated/gustaf.faces.Faces.BC.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.faces.Faces.BC — gustaf 0.0.23 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..43de2e536 --- /dev/null +++ b/_generated/gustaf.faces.Faces.const_edges.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.faces.Faces.const_edges — gustaf 0.0.23 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..48d5a9c6e --- /dev/null +++ b/_generated/gustaf.faces.Faces.const_faces.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.faces.Faces.const_faces — gustaf 0.0.23 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..779c4cd9e --- /dev/null +++ b/_generated/gustaf.faces.Faces.dashed.html @@ -0,0 +1,805 @@ + + + + + + + + + + + gustaf.faces.Faces.dashed — gustaf 0.0.23 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..1bc6eac69 --- /dev/null +++ b/_generated/gustaf.faces.Faces.edges.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.faces.Faces.edges — gustaf 0.0.23 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..3934270ae --- /dev/null +++ b/_generated/gustaf.faces.Faces.faces.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.faces.Faces.faces — gustaf 0.0.23 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..a20946e4c --- /dev/null +++ b/_generated/gustaf.faces.Faces.html @@ -0,0 +1,845 @@ + + + + + + + + + + + gustaf.faces.Faces — gustaf 0.0.23 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..137081d82 --- /dev/null +++ b/_generated/gustaf.faces.Faces.kind.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.faces.Faces.kind — gustaf 0.0.23 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..31f4bc3f0 --- /dev/null +++ b/_generated/gustaf.faces.Faces.single_faces.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.faces.Faces.single_faces — gustaf 0.0.23 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..5e8ae004a --- /dev/null +++ b/_generated/gustaf.faces.Faces.sorted_faces.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.faces.Faces.sorted_faces — gustaf 0.0.23 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..d38c93c05 --- /dev/null +++ b/_generated/gustaf.faces.Faces.to_edges.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.faces.Faces.to_edges — gustaf 0.0.23 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..57e0f867f --- /dev/null +++ b/_generated/gustaf.faces.Faces.to_subelements.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.faces.Faces.to_subelements — gustaf 0.0.23 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..c66a64b06 --- /dev/null +++ b/_generated/gustaf.faces.Faces.unique_faces.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.faces.Faces.unique_faces — gustaf 0.0.23 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..841f0de14 --- /dev/null +++ b/_generated/gustaf.faces.Faces.update_edges.html @@ -0,0 +1,787 @@ + + + + + + + + + + + gustaf.faces.Faces.update_edges — gustaf 0.0.23 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..9364b6276 --- /dev/null +++ b/_generated/gustaf.faces.Faces.update_faces.html @@ -0,0 +1,787 @@ + + + + + + + + + + + gustaf.faces.Faces.update_faces — gustaf 0.0.23 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..17202a3ae --- /dev/null +++ b/_generated/gustaf.faces.Faces.whatami.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.faces.Faces.whatami — gustaf 0.0.23 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..fdd432dbd --- /dev/null +++ b/_generated/gustaf.faces.Faces.whatareyou.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.faces.Faces.whatareyou — gustaf 0.0.23 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..dcab54002 --- /dev/null +++ b/_generated/gustaf.faces.FacesShowOption.html @@ -0,0 +1,793 @@ + + + + + + + + + + + gustaf.faces.FacesShowOption — gustaf 0.0.23 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..17b61f06f --- /dev/null +++ b/_generated/gustaf.faces.html @@ -0,0 +1,781 @@ + + + + + + + + + + + gustaf.faces — gustaf 0.0.23 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..70af7a1af --- /dev/null +++ b/_generated/gustaf.helpers.data.ComputedData.depends_on.html @@ -0,0 +1,806 @@ + + + + + + + + + + + gustaf.helpers.data.ComputedData.depends_on — gustaf 0.0.23 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..1aac6c0dd --- /dev/null +++ b/_generated/gustaf.helpers.data.ComputedData.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.helpers.data.ComputedData — gustaf 0.0.23 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..62810ff55 --- /dev/null +++ b/_generated/gustaf.helpers.data.ComputedMeshData.html @@ -0,0 +1,794 @@ + + + + + + + + + + + gustaf.helpers.data.ComputedMeshData — gustaf 0.0.23 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..627177e79 --- /dev/null +++ b/_generated/gustaf.helpers.data.DataHolder.clear.html @@ -0,0 +1,787 @@ + + + + + + + + + + + gustaf.helpers.data.DataHolder.clear — gustaf 0.0.23 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..81f75dea9 --- /dev/null +++ b/_generated/gustaf.helpers.data.DataHolder.get.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.helpers.data.DataHolder.get — gustaf 0.0.23 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..1deb35454 --- /dev/null +++ b/_generated/gustaf.helpers.data.DataHolder.html @@ -0,0 +1,810 @@ + + + + + + + + + + + gustaf.helpers.data.DataHolder — gustaf 0.0.23 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.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..69aa2bf0b --- /dev/null +++ b/_generated/gustaf.helpers.data.DataHolder.items.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.helpers.data.DataHolder.items — gustaf 0.0.23 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..3f41107da --- /dev/null +++ b/_generated/gustaf.helpers.data.DataHolder.keys.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.helpers.data.DataHolder.keys — gustaf 0.0.23 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..6d4465b7b --- /dev/null +++ b/_generated/gustaf.helpers.data.DataHolder.pop.html @@ -0,0 +1,801 @@ + + + + + + + + + + + gustaf.helpers.data.DataHolder.pop — gustaf 0.0.23 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.values.html b/_generated/gustaf.helpers.data.DataHolder.values.html new file mode 100644 index 000000000..92ce642a1 --- /dev/null +++ b/_generated/gustaf.helpers.data.DataHolder.values.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.helpers.data.DataHolder.values — gustaf 0.0.23 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..400ac8f51 --- /dev/null +++ b/_generated/gustaf.helpers.data.TrackedArray.copy.html @@ -0,0 +1,787 @@ + + + + + + + + + + + gustaf.helpers.data.TrackedArray.copy — gustaf 0.0.23 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..05f4fcd88 --- /dev/null +++ b/_generated/gustaf.helpers.data.TrackedArray.html @@ -0,0 +1,808 @@ + + + + + + + + + + + gustaf.helpers.data.TrackedArray — gustaf 0.0.23 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..695a4e7c2 --- /dev/null +++ b/_generated/gustaf.helpers.data.TrackedArray.modified.html @@ -0,0 +1,787 @@ + + + + + + + + + + + gustaf.helpers.data.TrackedArray.modified — gustaf 0.0.23 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..47145f63b --- /dev/null +++ b/_generated/gustaf.helpers.data.TrackedArray.view.html @@ -0,0 +1,787 @@ + + + + + + + + + + + gustaf.helpers.data.TrackedArray.view — gustaf 0.0.23 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..11aa27bc2 --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DFloats.html @@ -0,0 +1,813 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DFloats — gustaf 0.0.23 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..8e1d40fff --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DFloats.ids.html @@ -0,0 +1,788 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DFloats.ids — gustaf 0.0.23 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..d874e8e73 --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DFloats.intersection.html @@ -0,0 +1,789 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DFloats.intersection — gustaf 0.0.23 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..2941b5e7b --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DFloats.inverse.html @@ -0,0 +1,788 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DFloats.inverse — gustaf 0.0.23 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..0d869ac81 --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DFloats.values.html @@ -0,0 +1,788 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DFloats.values — gustaf 0.0.23 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..797964825 --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DIntegers.counts.html @@ -0,0 +1,788 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DIntegers.counts — gustaf 0.0.23 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..8b6e7bd1e --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DIntegers.html @@ -0,0 +1,811 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DIntegers — gustaf 0.0.23 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..cbb380f51 --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DIntegers.ids.html @@ -0,0 +1,788 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DIntegers.ids — gustaf 0.0.23 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..98001f0c0 --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DIntegers.inverse.html @@ -0,0 +1,788 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DIntegers.inverse — gustaf 0.0.23 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..55d3ece29 --- /dev/null +++ b/_generated/gustaf.helpers.data.Unique2DIntegers.values.html @@ -0,0 +1,788 @@ + + + + + + + + + + + gustaf.helpers.data.Unique2DIntegers.values — gustaf 0.0.23 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..5e39def48 --- /dev/null +++ b/_generated/gustaf.helpers.data.VertexData.as_arrow.html @@ -0,0 +1,802 @@ + + + + + + + + + + + gustaf.helpers.data.VertexData.as_arrow — gustaf 0.0.23 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..71c2fecfa --- /dev/null +++ b/_generated/gustaf.helpers.data.VertexData.as_scalar.html @@ -0,0 +1,802 @@ + + + + + + + + + + + gustaf.helpers.data.VertexData.as_scalar — gustaf 0.0.23 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..bd970ab9c --- /dev/null +++ b/_generated/gustaf.helpers.data.VertexData.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.helpers.data.VertexData — gustaf 0.0.23 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..062580923 --- /dev/null +++ b/_generated/gustaf.helpers.data.html @@ -0,0 +1,805 @@ + + + + + + + + + + + gustaf.helpers.data — gustaf 0.0.23 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..5c4dc6b0a --- /dev/null +++ b/_generated/gustaf.helpers.data.make_tracked_array.html @@ -0,0 +1,805 @@ + + + + + + + + + + + gustaf.helpers.data.make_tracked_array — gustaf 0.0.23 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..931de2cf7 --- /dev/null +++ b/_generated/gustaf.helpers.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.helpers — gustaf 0.0.23 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..2989cdc9a --- /dev/null +++ b/_generated/gustaf.helpers.notebook.K3DPlotterN.clear.html @@ -0,0 +1,787 @@ + + + + + + + + + + + gustaf.helpers.notebook.K3DPlotterN.clear — gustaf 0.0.23 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..73c5b4116 --- /dev/null +++ b/_generated/gustaf.helpers.notebook.K3DPlotterN.close.html @@ -0,0 +1,787 @@ + + + + + + + + + + + gustaf.helpers.notebook.K3DPlotterN.close — gustaf 0.0.23 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..c24dc2ae5 --- /dev/null +++ b/_generated/gustaf.helpers.notebook.K3DPlotterN.display.html @@ -0,0 +1,789 @@ + + + + + + + + + + + gustaf.helpers.notebook.K3DPlotterN.display — gustaf 0.0.23 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..ba40509cd --- /dev/null +++ b/_generated/gustaf.helpers.notebook.K3DPlotterN.html @@ -0,0 +1,812 @@ + + + + + + + + + + + gustaf.helpers.notebook.K3DPlotterN — gustaf 0.0.23 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..78c9a1e94 --- /dev/null +++ b/_generated/gustaf.helpers.notebook.K3DPlotterN.show.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.helpers.notebook.K3DPlotterN.show — gustaf 0.0.23 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..bacaec9e5 --- /dev/null +++ b/_generated/gustaf.helpers.notebook.get_shape.html @@ -0,0 +1,802 @@ + + + + + + + + + + + gustaf.helpers.notebook.get_shape — gustaf 0.0.23 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..449019f67 --- /dev/null +++ b/_generated/gustaf.helpers.notebook.html @@ -0,0 +1,790 @@ + + + + + + + + + + + gustaf.helpers.notebook — gustaf 0.0.23 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..378439a88 --- /dev/null +++ b/_generated/gustaf.helpers.options.Option.allowed_types.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.helpers.options.Option.allowed_types — gustaf 0.0.23 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..48e668c35 --- /dev/null +++ b/_generated/gustaf.helpers.options.Option.backends.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.helpers.options.Option.backends — gustaf 0.0.23 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..8cf9fcb8c --- /dev/null +++ b/_generated/gustaf.helpers.options.Option.default.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.helpers.options.Option.default — gustaf 0.0.23 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..1f0bd7308 --- /dev/null +++ b/_generated/gustaf.helpers.options.Option.description.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.helpers.options.Option.description — gustaf 0.0.23 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..ff11aed44 --- /dev/null +++ b/_generated/gustaf.helpers.options.Option.html @@ -0,0 +1,824 @@ + + + + + + + + + + + gustaf.helpers.options.Option — gustaf 0.0.23 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..f2a9ae8bf --- /dev/null +++ b/_generated/gustaf.helpers.options.Option.key.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.helpers.options.Option.key — gustaf 0.0.23 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..a2c2122e2 --- /dev/null +++ b/_generated/gustaf.helpers.options.SetDefault.default.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.helpers.options.SetDefault.default — gustaf 0.0.23 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..a8d61491a --- /dev/null +++ b/_generated/gustaf.helpers.options.SetDefault.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.helpers.options.SetDefault — gustaf 0.0.23 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..1f2d38553 --- /dev/null +++ b/_generated/gustaf.helpers.options.SetDefault.key.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.helpers.options.SetDefault.key — gustaf 0.0.23 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..d589071ca --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.clear.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.clear — gustaf 0.0.23 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..c57cfcae4 --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.copy_valid_options.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.copy_valid_options — gustaf 0.0.23 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..d5f7c7f27 --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.get.html @@ -0,0 +1,802 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.get — gustaf 0.0.23 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..be07f3986 --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.html @@ -0,0 +1,825 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption — gustaf 0.0.23 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..7c11d1bdc --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.items.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.items — gustaf 0.0.23 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..ff1957b9c --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.keys.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.keys — gustaf 0.0.23 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..e7beef314 --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.pop.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.pop — gustaf 0.0.23 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..dca1efe85 --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.update.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.update — gustaf 0.0.23 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..56236201d --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.valid_keys.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.valid_keys — gustaf 0.0.23 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..fa665b1d1 --- /dev/null +++ b/_generated/gustaf.helpers.options.ShowOption.values.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.helpers.options.ShowOption.values — gustaf 0.0.23 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..3eb075fa3 --- /dev/null +++ b/_generated/gustaf.helpers.options.html @@ -0,0 +1,793 @@ + + + + + + + + + + + gustaf.helpers.options — gustaf 0.0.23 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..4a341e61b --- /dev/null +++ b/_generated/gustaf.helpers.options.make_valid_options.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.helpers.options.make_valid_options — gustaf 0.0.23 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..93fb1b800 --- /dev/null +++ b/_generated/gustaf.helpers.raise_if.ModuleImportRaiser.html @@ -0,0 +1,797 @@ + + + + + + + + + + + gustaf.helpers.raise_if.ModuleImportRaiser — gustaf 0.0.23 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..4d08bc3cb --- /dev/null +++ b/_generated/gustaf.helpers.raise_if.html @@ -0,0 +1,788 @@ + + + + + + + + + + + gustaf.helpers.raise_if — gustaf 0.0.23 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..6e8280bb1 --- /dev/null +++ b/_generated/gustaf.helpers.raise_if.invalid_inherited_attr.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.helpers.raise_if.invalid_inherited_attr — gustaf 0.0.23 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..7833d5554 --- /dev/null +++ b/_generated/gustaf.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf — gustaf 0.0.23 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..a7eb0c454 --- /dev/null +++ b/_generated/gustaf.io.default.html @@ -0,0 +1,777 @@ + + + + + + + + + + + gustaf.io.default — gustaf 0.0.23 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..2de379ed3 --- /dev/null +++ b/_generated/gustaf.io.default.load.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.io.default.load — gustaf 0.0.23 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..23ccdd1e4 --- /dev/null +++ b/_generated/gustaf.io.html @@ -0,0 +1,796 @@ + + + + + + + + + + + gustaf.io — gustaf 0.0.23 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..6a6fd7d2f --- /dev/null +++ b/_generated/gustaf.io.ioutils.abs_fname.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.io.ioutils.abs_fname — gustaf 0.0.23 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..1447da052 --- /dev/null +++ b/_generated/gustaf.io.ioutils.check_and_makedirs.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.io.ioutils.check_and_makedirs — gustaf 0.0.23 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..0bfff908e --- /dev/null +++ b/_generated/gustaf.io.ioutils.html @@ -0,0 +1,782 @@ + + + + + + + + + + + gustaf.io.ioutils — gustaf 0.0.23 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..3cbc1156a --- /dev/null +++ b/_generated/gustaf.io.meshio.export.html @@ -0,0 +1,849 @@ + + + + + + + + + + + gustaf.io.meshio.export — gustaf 0.0.23 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.meshio.export#

+
+
+gustaf.io.meshio.export(mesh, fname, 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:
+
    +
  • mesh (Edges, Faces or Volumes) – Input mesh

  • +
  • fname (Union[str, pathlib.Path]) – File to save the mesh in.

  • +
  • 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..ef48a4c62 --- /dev/null +++ b/_generated/gustaf.io.meshio.html @@ -0,0 +1,783 @@ + + + + + + + + + + + gustaf.io.meshio — gustaf 0.0.23 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(mesh, fname[, 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..97f176b71 --- /dev/null +++ b/_generated/gustaf.io.meshio.load.html @@ -0,0 +1,802 @@ + + + + + + + + + + + gustaf.io.meshio.load — gustaf 0.0.23 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..5e6a0f97e --- /dev/null +++ b/_generated/gustaf.io.mfem.export.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.io.mfem.export — gustaf 0.0.23 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.mfem.export#

+
+
+gustaf.io.mfem.export(mesh, fname)[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:
+
    +
  • mesh (Faces) –

  • +
  • fname (str) –

  • +
+
+
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..b7b9fe261 --- /dev/null +++ b/_generated/gustaf.io.mfem.html @@ -0,0 +1,784 @@ + + + + + + + + + + + gustaf.io.mfem — gustaf 0.0.23 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(mesh, fname)

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..b10519d7f --- /dev/null +++ b/_generated/gustaf.io.mfem.load.html @@ -0,0 +1,796 @@ + + + + + + + + + + + gustaf.io.mfem.load — gustaf 0.0.23 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..29f3a09c8 --- /dev/null +++ b/_generated/gustaf.io.mixd.export.html @@ -0,0 +1,801 @@ + + + + + + + + + + + gustaf.io.mixd.export — gustaf 0.0.23 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.mixd.export#

+
+
+gustaf.io.mixd.export(mesh, fname, 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..6e704bf02 --- /dev/null +++ b/_generated/gustaf.io.mixd.html @@ -0,0 +1,785 @@ + + + + + + + + + + + gustaf.io.mixd — gustaf 0.0.23 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.mixd#

+

gustaf/gustaf/io/mixd.py.

+

io functions for mixd.

+

Functions

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

export(mesh, fname[, 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..866f5b467 --- /dev/null +++ b/_generated/gustaf.io.mixd.load.html @@ -0,0 +1,809 @@ + + + + + + + + + + + gustaf.io.mixd.load — gustaf 0.0.23 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..ce971d0bd --- /dev/null +++ b/_generated/gustaf.io.mixd.make_mrng.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.io.mixd.make_mrng — gustaf 0.0.23 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..a28df1b7b --- /dev/null +++ b/_generated/gustaf.io.nutils.export.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.io.nutils.export — gustaf 0.0.23 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.nutils.export#

+
+
+gustaf.io.nutils.export(mesh, fname)[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..849c4f8b9 --- /dev/null +++ b/_generated/gustaf.io.nutils.html @@ -0,0 +1,785 @@ + + + + + + + + + + + gustaf.io.nutils — gustaf 0.0.23 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

gustaf.io.nutils#

+

gustaf/gustaf/io/nutils.py.

+

io functions for nutils.

+

Functions

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

export(mesh, fname)

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..89f47bd0d --- /dev/null +++ b/_generated/gustaf.io.nutils.load.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.io.nutils.load — gustaf 0.0.23 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..4809fccb3 --- /dev/null +++ b/_generated/gustaf.io.nutils.to_nutils_simplex.html @@ -0,0 +1,800 @@ + + + + + + + + + + + gustaf.io.nutils.to_nutils_simplex — gustaf 0.0.23 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..3ee93ccc1 --- /dev/null +++ b/_generated/gustaf.settings.html @@ -0,0 +1,771 @@ + + + + + + + + + + + gustaf.settings — gustaf 0.0.23 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..79291faf0 --- /dev/null +++ b/_generated/gustaf.show.html @@ -0,0 +1,785 @@ + + + + + + + + + + + gustaf.show — gustaf 0.0.23 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..2c2fdd4f5 --- /dev/null +++ b/_generated/gustaf.show.interpolate_vedo_dictcam.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.show.interpolate_vedo_dictcam — gustaf 0.0.23 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..0f112549a --- /dev/null +++ b/_generated/gustaf.show.make_showable.html @@ -0,0 +1,805 @@ + + + + + + + + + + + gustaf.show.make_showable — gustaf 0.0.23 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..f4e25f160 --- /dev/null +++ b/_generated/gustaf.show.show.html @@ -0,0 +1,793 @@ + + + + + + + + + + + gustaf.show.show — gustaf 0.0.23 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..83f228a2b --- /dev/null +++ b/_generated/gustaf.utils.arr.bounds.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.utils.arr.bounds — gustaf 0.0.23 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..5b9b1ca0a --- /dev/null +++ b/_generated/gustaf.utils.arr.bounds_diagonal.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.utils.arr.bounds_diagonal — gustaf 0.0.23 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..803c279f2 --- /dev/null +++ b/_generated/gustaf.utils.arr.bounds_mean.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.utils.arr.bounds_mean — gustaf 0.0.23 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..71da775d9 --- /dev/null +++ b/_generated/gustaf.utils.arr.bounds_norm.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.utils.arr.bounds_norm — gustaf 0.0.23 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..0b6f42f8f --- /dev/null +++ b/_generated/gustaf.utils.arr.close_rows.html @@ -0,0 +1,810 @@ + + + + + + + + + + + gustaf.utils.arr.close_rows — gustaf 0.0.23 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.enforce_len.html b/_generated/gustaf.utils.arr.enforce_len.html new file mode 100644 index 000000000..c901c3090 --- /dev/null +++ b/_generated/gustaf.utils.arr.enforce_len.html @@ -0,0 +1,802 @@ + + + + + + + + + + + gustaf.utils.arr.enforce_len — gustaf 0.0.23 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..1e20710e3 --- /dev/null +++ b/_generated/gustaf.utils.arr.html @@ -0,0 +1,819 @@ + + + + + + + + + + + gustaf.utils.arr — gustaf 0.0.23 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.

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..a71a7239e --- /dev/null +++ b/_generated/gustaf.utils.arr.is_one_of_shapes.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.utils.arr.is_one_of_shapes — gustaf 0.0.23 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..b93ba8e08 --- /dev/null +++ b/_generated/gustaf.utils.arr.is_shape.html @@ -0,0 +1,802 @@ + + + + + + + + + + + gustaf.utils.arr.is_shape — gustaf 0.0.23 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..acf90bcd8 --- /dev/null +++ b/_generated/gustaf.utils.arr.make_c_contiguous.html @@ -0,0 +1,802 @@ + + + + + + + + + + + gustaf.utils.arr.make_c_contiguous — gustaf 0.0.23 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..f1d5fa02d --- /dev/null +++ b/_generated/gustaf.utils.arr.rotate.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.utils.arr.rotate — gustaf 0.0.23 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..3d8484d25 --- /dev/null +++ b/_generated/gustaf.utils.arr.rotation_matrix.html @@ -0,0 +1,805 @@ + + + + + + + + + + + gustaf.utils.arr.rotation_matrix — gustaf 0.0.23 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..cbb0fdddd --- /dev/null +++ b/_generated/gustaf.utils.arr.rotation_matrix_around_axis.html @@ -0,0 +1,805 @@ + + + + + + + + + + + gustaf.utils.arr.rotation_matrix_around_axis — gustaf 0.0.23 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..507912266 --- /dev/null +++ b/_generated/gustaf.utils.arr.select_with_ranges.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.utils.arr.select_with_ranges — gustaf 0.0.23 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..33be353be --- /dev/null +++ b/_generated/gustaf.utils.arr.unique_rows.html @@ -0,0 +1,809 @@ + + + + + + + + + + + gustaf.utils.arr.unique_rows — gustaf 0.0.23 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..5cbcd0246 --- /dev/null +++ b/_generated/gustaf.utils.connec.faces_to_edges.html @@ -0,0 +1,815 @@ + + + + + + + + + + + gustaf.utils.connec.faces_to_edges — gustaf 0.0.23 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..b6c91dcc8 --- /dev/null +++ b/_generated/gustaf.utils.connec.hexa_to_quad.html @@ -0,0 +1,822 @@ + + + + + + + + + + + gustaf.utils.connec.hexa_to_quad — gustaf 0.0.23 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..c72b30ca2 --- /dev/null +++ b/_generated/gustaf.utils.connec.html @@ -0,0 +1,817 @@ + + + + + + + + + + + gustaf.utils.connec — gustaf 0.0.23 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..e93e11ccf --- /dev/null +++ b/_generated/gustaf.utils.connec.make_hexa_volumes.html @@ -0,0 +1,810 @@ + + + + + + + + + + + gustaf.utils.connec.make_hexa_volumes — gustaf 0.0.23 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..9511be902 --- /dev/null +++ b/_generated/gustaf.utils.connec.make_quad_faces.html @@ -0,0 +1,805 @@ + + + + + + + + + + + gustaf.utils.connec.make_quad_faces — gustaf 0.0.23 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..877d6cb53 --- /dev/null +++ b/_generated/gustaf.utils.connec.range_to_edges.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.utils.connec.range_to_edges — gustaf 0.0.23 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..d6b147466 --- /dev/null +++ b/_generated/gustaf.utils.connec.sequence_to_edges.html @@ -0,0 +1,801 @@ + + + + + + + + + + + gustaf.utils.connec.sequence_to_edges — gustaf 0.0.23 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..984333460 --- /dev/null +++ b/_generated/gustaf.utils.connec.sequentialize_edges.html @@ -0,0 +1,818 @@ + + + + + + + + + + + gustaf.utils.connec.sequentialize_edges — gustaf 0.0.23 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..ce7aec74b --- /dev/null +++ b/_generated/gustaf.utils.connec.sorted_unique.html @@ -0,0 +1,802 @@ + + + + + + + + + + + gustaf.utils.connec.sorted_unique — gustaf 0.0.23 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..0ce7197ee --- /dev/null +++ b/_generated/gustaf.utils.connec.subdivide_edges.html @@ -0,0 +1,812 @@ + + + + + + + + + + + gustaf.utils.connec.subdivide_edges — gustaf 0.0.23 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..7091ed280 --- /dev/null +++ b/_generated/gustaf.utils.connec.subdivide_quad.html @@ -0,0 +1,804 @@ + + + + + + + + + + + gustaf.utils.connec.subdivide_quad — gustaf 0.0.23 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..933e4e0ae --- /dev/null +++ b/_generated/gustaf.utils.connec.subdivide_tri.html @@ -0,0 +1,826 @@ + + + + + + + + + + + gustaf.utils.connec.subdivide_tri — gustaf 0.0.23 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..6983981c5 --- /dev/null +++ b/_generated/gustaf.utils.connec.tet_to_tri.html @@ -0,0 +1,818 @@ + + + + + + + + + + + gustaf.utils.connec.tet_to_tri — gustaf 0.0.23 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..d9b4ea13c --- /dev/null +++ b/_generated/gustaf.utils.connec.volumes_to_faces.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.utils.connec.volumes_to_faces — gustaf 0.0.23 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..23e17b443 --- /dev/null +++ b/_generated/gustaf.utils.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.utils — gustaf 0.0.23 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..e96d355b0 --- /dev/null +++ b/_generated/gustaf.utils.log.configure.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.utils.log.configure — gustaf 0.0.23 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..03cdaeccd --- /dev/null +++ b/_generated/gustaf.utils.log.debug.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.utils.log.debug — gustaf 0.0.23 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..98f621acb --- /dev/null +++ b/_generated/gustaf.utils.log.html @@ -0,0 +1,791 @@ + + + + + + + + + + + gustaf.utils.log — gustaf 0.0.23 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..7dd91cd18 --- /dev/null +++ b/_generated/gustaf.utils.log.info.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.utils.log.info — gustaf 0.0.23 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..1d9546110 --- /dev/null +++ b/_generated/gustaf.utils.log.prepended_log.html @@ -0,0 +1,801 @@ + + + + + + + + + + + gustaf.utils.log.prepended_log — gustaf 0.0.23 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..7bf53431a --- /dev/null +++ b/_generated/gustaf.utils.log.warning.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.utils.log.warning — gustaf 0.0.23 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..98dac62d2 --- /dev/null +++ b/_generated/gustaf.utils.tictoc.Tic.html @@ -0,0 +1,802 @@ + + + + + + + + + + + gustaf.utils.tictoc.Tic — gustaf 0.0.23 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..fb51f8c15 --- /dev/null +++ b/_generated/gustaf.utils.tictoc.Tic.now.html @@ -0,0 +1,788 @@ + + + + + + + + + + + gustaf.utils.tictoc.Tic.now — gustaf 0.0.23 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..9626ce6d4 --- /dev/null +++ b/_generated/gustaf.utils.tictoc.Tic.summary.html @@ -0,0 +1,806 @@ + + + + + + + + + + + gustaf.utils.tictoc.Tic.summary — gustaf 0.0.23 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..a3456a3c6 --- /dev/null +++ b/_generated/gustaf.utils.tictoc.Tic.toc.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.utils.tictoc.Tic.toc — gustaf 0.0.23 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..34c9ec230 --- /dev/null +++ b/_generated/gustaf.utils.tictoc.html @@ -0,0 +1,779 @@ + + + + + + + + + + + gustaf.utils.tictoc — gustaf 0.0.23 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..dba66813b --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.bounds.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.vertices.Vertices.bounds — gustaf 0.0.23 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..0ca949ce5 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.bounds_diagonal.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.vertices.Vertices.bounds_diagonal — gustaf 0.0.23 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..71a195f6d --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.bounds_diagonal_norm.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.vertices.Vertices.bounds_diagonal_norm — gustaf 0.0.23 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..e9de6caaa --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.concat.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.vertices.Vertices.concat — gustaf 0.0.23 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..fe21dcdbb --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.const_vertices.html @@ -0,0 +1,796 @@ + + + + + + + + + + + gustaf.vertices.Vertices.const_vertices — gustaf 0.0.23 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..9b324bea2 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.copy.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.vertices.Vertices.copy — gustaf 0.0.23 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..5de7dcf29 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.html @@ -0,0 +1,851 @@ + + + + + + + + + + + gustaf.vertices.Vertices — gustaf 0.0.23 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..4eff84f0d --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.kind.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.vertices.Vertices.kind — gustaf 0.0.23 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..dd56dcff5 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.merge_vertices.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.vertices.Vertices.merge_vertices — gustaf 0.0.23 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..65a8aec6c --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.remove_vertices.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.vertices.Vertices.remove_vertices — gustaf 0.0.23 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..0ffac35bf --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.select_vertices.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.vertices.Vertices.select_vertices — gustaf 0.0.23 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..db2249a3d --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.show.html @@ -0,0 +1,795 @@ + + + + + + + + + + + gustaf.vertices.Vertices.show — gustaf 0.0.23 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..bfd5fd2c6 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.show_options.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.vertices.Vertices.show_options — gustaf 0.0.23 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..f14040a31 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.showable.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.vertices.Vertices.showable — gustaf 0.0.23 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..dbd091e3f --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.unique_vertices.html @@ -0,0 +1,802 @@ + + + + + + + + + + + gustaf.vertices.Vertices.unique_vertices — gustaf 0.0.23 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..899e0a733 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.update_vertices.html @@ -0,0 +1,803 @@ + + + + + + + + + + + gustaf.vertices.Vertices.update_vertices — gustaf 0.0.23 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..f60e39cad --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.vertex_data.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.vertices.Vertices.vertex_data — gustaf 0.0.23 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..1b515868a --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.vertices.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.vertices.Vertices.vertices — gustaf 0.0.23 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..1a2adce52 --- /dev/null +++ b/_generated/gustaf.vertices.Vertices.whatami.html @@ -0,0 +1,801 @@ + + + + + + + + + + + gustaf.vertices.Vertices.whatami — gustaf 0.0.23 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..55d8bce7d --- /dev/null +++ b/_generated/gustaf.vertices.VerticesShowOption.html @@ -0,0 +1,793 @@ + + + + + + + + + + + gustaf.vertices.VerticesShowOption — gustaf 0.0.23 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..bdba6dc86 --- /dev/null +++ b/_generated/gustaf.vertices.html @@ -0,0 +1,782 @@ + + + + + + + + + + + gustaf.vertices — gustaf 0.0.23 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..0355a14a4 --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.const_faces.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.volumes.Volumes.const_faces — gustaf 0.0.23 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..8294c94a0 --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.const_volumes.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.volumes.Volumes.const_volumes — gustaf 0.0.23 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..339523631 --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.faces.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.volumes.Volumes.faces — gustaf 0.0.23 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..3924e3ecc --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.html @@ -0,0 +1,830 @@ + + + + + + + + + + + gustaf.volumes.Volumes — gustaf 0.0.23 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..577aeffaf --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.kind.html @@ -0,0 +1,786 @@ + + + + + + + + + + + gustaf.volumes.Volumes.kind — gustaf 0.0.23 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..e90468231 --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.sorted_volumes.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.volumes.Volumes.sorted_volumes — gustaf 0.0.23 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..88d537db7 --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.to_faces.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.volumes.Volumes.to_faces — gustaf 0.0.23 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..e9416b81b --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.unique_volumes.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.volumes.Volumes.unique_volumes — gustaf 0.0.23 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..5f8a6cdde --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.update_faces.html @@ -0,0 +1,787 @@ + + + + + + + + + + + gustaf.volumes.Volumes.update_faces — gustaf 0.0.23 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..1940c61b4 --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.update_volumes.html @@ -0,0 +1,787 @@ + + + + + + + + + + + gustaf.volumes.Volumes.update_volumes — gustaf 0.0.23 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..711847a90 --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.volumes.html @@ -0,0 +1,798 @@ + + + + + + + + + + + gustaf.volumes.Volumes.volumes — gustaf 0.0.23 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..79b8169f9 --- /dev/null +++ b/_generated/gustaf.volumes.Volumes.whatareyou.html @@ -0,0 +1,799 @@ + + + + + + + + + + + gustaf.volumes.Volumes.whatareyou — gustaf 0.0.23 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..85a38f3d0 --- /dev/null +++ b/_generated/gustaf.volumes.VolumesShowOption.html @@ -0,0 +1,793 @@ + + + + + + + + + + + gustaf.volumes.VolumesShowOption — gustaf 0.0.23 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..23ea4cab4 --- /dev/null +++ b/_generated/gustaf.volumes.html @@ -0,0 +1,781 @@ + + + + + + + + + + + gustaf.volumes — gustaf 0.0.23 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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

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 zcmeFZ^$9Ae|N{4Wma& zPf8F$`g@Jn`xAe__s7ouj7y0pt<5NwK|2Jq5WUdGKo_1&P+A33U*dm!|m;oG3?&am@Z#Mnu z6~8PSWOcOv(W)WvaCbe64S@Cs zgF2ZKXN>WZI4@!i5ee1`*>adyb}CPi5Pc4wK2hUxF#$orfvvsdj(7zGc~2k^{5G5S zdSy17_NM)U{Cd)YPC|?`XiK%UdaS)2H&nmsE*E~y=Y|z$4+~#E-tS{SYJ9!n_pdnK zO6u>B{`c?Si@ShB;>?KNWm}PwntJd$=-=zc&6dNl3L7`8T0g@o76sdrul+x4GQJj% zI^U&c4GZQ)Xw9|d$e&uNSZ>$93X+tPk`foMw(CkXEH>H~RssStD#`e4Tp9<8M839- zkG>Ib8u4{2D{6GJM!QV}vS#w?Fh*WthhCUTD7VHm8Y{9#;HK#p zKs;!BO^giJNc`&mKv_Kq=_^Yi<1})f3#?AsO!ALyz48a8p89SM)W0gX^op@VFGlWu zKa@i)V8R{vf`2Kjc;UPwwbNEjL;A`_AldaL-_Nc&b% zsPAKrckfN^dY~>8KZ%Zp-HDvrayW8X_15mw2nwG-(JKC!QzS;A<}Zo8ZuqC4A3nL4 z=C+|kcw34c?fv=hOIFUuVl5^UR>4Pd?=qrdV+9sS?Ss;9>*MA#wrWc!0_JxX>FDU< zsvd#X-B*u z71341z5!#5|4ZD;a(7Cr-^q+X_XbvCQ0U?p={Ndy7s~^p;s2_& z&}&GHk9px}ASt~)V(yZNh7TcMVFj$vjLwz9F1Px{#Px|BLJ6(v6;N>zW?ppg<8VRkT|k4 zWH15D59gaxLc(okux_4Emp%pZ*1I97QavGExK&f&-brXcQ1|9VV0JlTBAxr1*xRVx zd_FK?5{;H1xF>LvHR$0Wb4)fF(TwFY%|VGo$$s4@UPn|#I_Pizm!DBufrGxgxtW=1 z69%}%PHLw)MY3vinBi9?6{|iMX$lS{YNDnoY}1_0QQK(}G*Bx%66Gm_z&||js4m6| zkAIMfahD}ZO-o7?LhsYG?L2-^xDVINFDVAQ4J)XsI2m4c1QJ(1mJD9)mS8s@xKF{s zN&GNcR9042L}V-D^xtk)=+{kuoE;=M)rzV}?~$I4U3{KQvCL6DUJsY#Jk}iac!r$Y z^$c&EXRa8!*gKlx&U~JanY+y<2mS*7!X@5Bk@izju}?YnyEN+^=AJX%TmToaRgPC% z4mvzCzAVJna?-8->en?YQuC?->?iC^9!1;rFBMz}>4X7K%mBCn(FZCO;kkcW1OLt* z{Z!XF{2Kk$roV6^Pa+j_G=pIEbR59!v}bLpORTlH9&G!`1qq)ifM_)%?s0C`&AaQ- z5h$$?TW6G=enLqFWqvZsO{(459kY{bV@y)#eL&?p2$TSH5SO3~F!}CvAnNJK?`Z9o z3y??UnA>=F0tWS%x+;&&rip?mnZ7X*$v+TbMA`JzB*y=3NVWukuV`x5Go3SRz#yd6 z%Z+0?#+;x5gt6g6#=M#DMDy`80Ou}e~bGumgeCfHQ&X~AQ? z+W$vU{M5vc-qc6;!mWqkeY>UTUR?94>?1vo!%FHm(Ng^jIDW!bRs{&7)AH{-SN=mg zbqKBK3i0A(@k-J`d#p2o4tR=vw(xKR$ryFX0dF^#Am@rVqE0 z2xJI$$}3;^KVQ%pOLLywuBy!{OI;%&K5EQ?2p%MfjSY=h{mcJ!=RwpRgy_f2v}>9Y zt^o(if9dmKSZxf-o*6_V;e;K#dE<4fviy_YB|6D( z7q5TLe~bP}pZw(``Y{H@os-3n$iZqhSV6yHeVzaF&i~|rLIcLziy`J8V~NQwQTFU8 zC4kK7*Ei&E`z+La6jr;M6Z6)!*%+tT(HkPB(cV8OmBcc(}|E7 zJYO{R?36oar`!jpkjyllewutc@$Rn?q&~81!Qwp(sVQ|EA>A9Lp`U|y$`t>km;_Gn2lTi7;F>aRc6`d+sD%pKAuFJ zc)S2W#Km&q_FuS7pU%?7t_8Ncxm+KQi@M#T>f2=kf8ubDq4v{Yav>Yihz2+Y#S+Wr z8>6N_xBm-Pcv_qbUlDkyG;j}rBmUQ-4 zvy5x&@vfj*4e_gLGsMtFxCKCZ@=q%00wi~_S0#kOHv7+&=}IFUv!0YDrizw2BSnam zn>0bczzHaWa>1@Ik0Y7pwiqS-Q{Mz;qS_sag3+2V^uY`XLk8Hc8YjDbF`yF zo)-4~O@}ovp`VIYlS+e%&*hPG_kF`Mkgg{sTjfod&O+uf84-#R6|M9~@i+YLP?_?{ zuIRy|zK9s&YA|b;p&42HJZsJ$ZyO~e|F;$=%~@Z!mrXW#K7V{5OINF-LZ^5@MGPqD z$Lh{OXU0lkWuq*zFH3kT{GL>Edw#^(ANkD=o$G+Z(h=`63II(gg zkP{849^Bl~?$!7FcxiyzK{vh{ixsEC-Bw;)bYL&UpqZ;%?wV^rEoMxTF~7`-+UWIK zT*`oy;XnR~iS>83{d(ID+yqI~i+}_O%x-@8`X}-PIOOWEfwrro*f=L2GAljLV=#9H zQ}x~CUon=qGY1O-BGDt&FA~+T^+9s{-|rgv3jzrSf|3vTsJU}vq7}_+aT-)f3I_NjR|f|N zCFS-cwb(2!e>-WVuS-TWD0VP7XVN7#>*K;ZJ>>7+O5-k5gEr59%Yb;xR{XKKu|M`Z z?B}0enb;Y|tBTLbffBKHm6{Sl&z79t{jD05y-KZebw6~-nh*JGnneWbIKgaYfHTSd zo|kU@#sZqr;ouNu+Kza>93f-#Xp~NdSXtRBlLJFy8Hs|K-Ws>HnYkQT7qq*wF2Cgm zx4sjR2*tzHi?Ip95EmHoZfLRjoo9d08I(weC@M+)uWEc{mXFEe^;}5S?z!^>XT-~Z zmaU%XG5;NSbKG{`@ATQs$#_m}>+BxYvcIY7t$_>3gw!XTx=9sTH$7eGhspYnv_qd< zy{8U$cC5FrT!tF+6M~%$|4rORQ>pTGKhooK@qSn5`8@F8+8KP$5zSbp27G8PX|M14 z@t^lc7LW-0u2Y(tTZ^d(F;&xgPTfKZR?5mSgtY$G7_|4P!Ck5{Ou&HDT)PC6-{hm3 zsm9R%IsQT#D04f3b%lxjB(e0pvELz?$#udO4UB@n)!J~yHbElN(J9dz5-#9|qgTFQ z08{HoMTYVclvFm)Qsyr4t3&Mom{SvhE`L_SxGee&(JBUlpLF12#@M{mJtV5MCQO8X zEK>(#lT+X=2z4QaFGlf^!c2ZvV^AE*Kiz;f*{9LQzkT+&6cdFi7$&z)i$#~sYtEk4XDp(KK3-PXKQjTvm&4-? z`mD1+OG1n;kJlD^Zv+gukt7bGy|DZPY!H zc2`BuDP`8wNVGruIRzv1U%ae=NRs$Te^+^38u@+aXs40Kb#X5=B(8yoQ~xpCzOdEN zL_Me2dD3$ob3f|d!H{d!3;p7pV=tQq!wCjtc z6jF@cgU8EbYFB7iQqa2&t1nZe5*Vjz(B8R%zsU6UUr<2tam7hsR|b7 zQt962X|=z$oF4gdNWB8fJ=xac0wc&xo)=cXgmg;ANQ02oSr36Vy~@TGV@u)Pdi0-% z3=|s7`Eq*xYX+_m<1-c%a!14JyElakD&+(hD$87nFN>+Cg}=FS^C~f4($I`@yoiIMcpr^E?N+BbBchmRhbJ%g z`UE^X?H*`--ti1sq-!(9hm7ws#AT&usTwm}uuivqB~rvko>$QS%Zw*y{vEgR-kfk> zu5O~WuU{UPpLlZ1QNqr@eqZjK{QwRQEU~HJXEBpLEl)a;hg@Z_T}?26PXuw5gDCrs zfI=Ax(R$uu$`QMt)pygfY!A`!8}?ZFb}3mutjiHMh<%%j26=eo4Ofd^9 zj1U=wnX_rZOdO3B-tsTrqKD?9E&q-#$#0eDV}O zp;){A>L&*IrbuE%N4%a1sEi>0X5s8>!RhYb`NO~+i)h6Vb`Z;{|my=xs zP_hv=RG&iZ>S6W@8K`!vltYi#Gteyu82MX-LirB`A*Ds0&gm54%!SxHAG3w+J{D0qvt9pacXm)HARvA` z0<70w>%Yl(Lb3MY~Ja+_i7G@_=SSje)R>;eFXJFTml3* z!>ce*sF4RsC-i=xhhSc+WRX7p)>(NtNsCr6h_DE~8&4-5swz^V9xl;eB>i2*_)iU{ zN>m{AUFLY*1C61&63RTB^IoAbr0%Gqn3$SLE`vi!LcyUkM_(R6 z7LG(%5Szds!H?W3x3-c_8+^82!6_(0E4Q8Uuy*bv;KqWz>CX{>+*gU-(s z=_lH)Rid}`Q<09-gTSevVGC{uOWzrO!c@Lxg1`AAcUE#a*XnQ6|E=*Qq~{h_9OgsEVV{`Qwu zUcx~%X}q<^ur3Z1>Y`_5=viB7(oT>46Lfq7qKEuxXn-qm9M`zzZhJqS4S!xM%izFk zo+e)J$y+g$&>^NO^cQ=k@?w5Ly()ZfPCK;Ae#yYHP7&@i@bET_J4y7NZWGdXEpWvXK-5;lf8oU=(67yR=7K_-#Ztqn}wIQ+rR zBe%~*wDWc-xYDB1e>CXiepD+NB=WPR)Od+5E}GO_5NhE|?tsMxI2i|{pL{n$%_D=A{c@MeaNF z;;#)bWt!}1zkDDvIV$kRXwnRsRQm9YEEy>K0qJ>-$j&9Ag(T$z2EVxwO|(b>+~HWO zVRB#HNBf5SZf&_g`z)PyKlLsjbbTz`o`sV0;@m>No;IJ!cvl}a$FP(wXHzt) z!e8U*x!cBg9ck3=m*rrm!XUq-cp0b35zhyI|EtcoYVi?DID3vAk?lAR2ar3eG|m8! z^F}-roHf43B0`np#wJB-ri&c%)^D5F#Z3jdQg9d`$Qi^LU#*pG{9wOC&%jVrSp14f zR#_!_O+R&b6{!FWn)Oe7<1UQbFYAs#HCoGdCpVT@=OvPZ`e}!K{QdmN@2-=yx4rHX z8;!RD=B2dYuM^s+yMNy}VCmyBP`?mft>j|Xe z>HO_{{Iuejl!=$^_!(w;WhCA}Lcb=7bzuX8av_g)&svm$P__OZV90eAPNx6N{hvDJ z052HVLhLx>%L84|yzmfndD~}GZ!K@Vs~T)z0T8jZ&$5I3r2kZB!vgsD{_h z@3XDI7^H4@r)#fAd*%n=SPAOHtZt27>^f9l?+mfI`;_e?A&%7qN8sFN)xjA5c!Pa2vZXSU`>bTnv3KX za6ju%Yc)yg*yca*r1gvmZDviiR$_)Ek_y_VxN-=@x@XL)zZ%@I^IReCu$nOck8fmB zRM4r1lfD>~Re&om_sHR7zoH?gvhVIWgHQ{JSMb8eBzB9%38=lGSsf%deai|lQf>bG zEKYYep#h|STp%$bLO&(;2JLPer&m7L^hWeoM^;Gf!=zH481NFPNSVK~EZN-&RWeG2 z*}YeR^9Q+=>Eg;fUar`%L)XceYtny>B~|v(^JVcN#-Gq1-(QW%HUVv};7Q?c0g6}A-}fa3j_)H;U|uSb#jOLMDVazHrw z_w^+DzeU*_nRyh>W$NN8U#>An% zOnhQ}-KL9s*K2h9PX6{6aQ%XUr+!&XWg03()+_NE$X?ejgT_kx{b3g*cx(j2l7St@ z#Gp6&lyNEJdV#LtEmL)0xe_He!evF-^Tb-25*7+8Tyq3bJyh}5&fo5$^061Aa|-;U z5T+Ie<4&z;ExVl|abobweF?PLcJpoT;f(;)%+`F+Uf1%MYuC_u1_V=O#CE*Y4{VrJ zMO_s3=U>xz38>Y~EmM@L{=V}5B<+ccz=~|V?pWO|Eq?26@k$K|eXA*ZRsVnUv${CJKvxPgDX9dvCU^4mqR9A?RBrvU_JIpJ{1+ImnjrH^ zj`Uyzg`kxR^t9ML?Y$)R>HU%HhAq!*r67`+yCl@zcSw!kkxdr#;C$&EG|xSJ6%_>PyrdF zJ5o8J2a{lB3tcB%{?NHuhz4aB@u3#mw~48A3#3wPfF8krFKL%u=483te;?*F0&#aw z*0_8WUs9Ggw8E5IQ$xPD6SOXf4)ayMe?K*(Nysj(TR_aS@DH9kQ!x_)5=SSuT7oe@ zQc1UB!U0odK&crI`1*1v94{bHd-Ek8Ei~GahU0SicpU zZD9frdQPoymo)BtL5ctBd)D(%Xa+-gr1X$3&RwLJI<32>Ko@6p+rb)@n<`T`ZkxvIUV_{cI$~^Kx#8BO1Rr&&G*HpDydx#m0n$H#$kA1O+S%Fp_U+r==J802&G*x- z>hg1OF|qY=e3!je6cxnG@aOg;%S_}dm+gD5!JojU_sDaVMv}$%@PDVPOs7DSwj5wv z`0N$%ro?I4epvVKo>1S7yF0Jde^zV5C(aqz?x@-Nni&Pgnz|zJuG=FCJAa>8Hu&s9 z084mAT;Ui%u^Hq)1VVHSJ#a49xMX1GIU!`qCb#=9f5GrC9 zvy=Chdi4D>LQDPesAf~FXlmRw&?sU#z>Y$`m0vX!`zEv)+x#FyRbj}IYpN(*BzKJS zYx+t)h#4kR$~Y723Yw))n7jaL9bTk~#5jj`e5V|r6$w@uSLiO#G^<=68<}l;C(De* zDJZF*KG(%0nZE0ih+@Jhs3to&ycWOOdn7r);cjf#8^PF4IB>-jRCj7-p!(8d1>JXB zv6XixUOW!-A``3Jlg~7pP#ow4BQ%gS39@d3O0txB*6xmoxhwC51j5*ge~Hc?I65P< z;2uk$s{@ZIyewAFU@DOTQw28(-&U`eqcRj^B;ATslu7kG5z2C)@#;$K!IYnSRf;W_ z|Dy+Clt-=4_%FotXv;+ek)_AE65WtUb=?T~+ofgF$O55#9YPy0PV!A~$yN1w(s#+ax8CxLCibNI)B_5_;f9^3 zgTGil)uK#!37(&m?CIB(&G0K0_uSY2n?j#4Paze+y}E;f3{!taLKfrhIjGA#LR5(I zC3-6~Wfym#F}z$(lRDwLUfmcuM@*Hsw|<41w5Imek2k92!er6K`1>B!iwOfa|`K*i*8bhD>D? zAKEq6(K)N)}tMFfUl?nA`cs!iK|(J1ZS z&=Vn$zMed|C}&iYlfi3XXj9Lxu*w+Bw6i(cZpaLQMXt91m+v3oFK!u5Y@v%6(k`6WR z&JJZqb92AHrF7IVnDfZ-BH|Oqn*WlgVuczDX;x-b*3BE5iub?V#eEkU{H2vkWl)vM zpQC)I*7xtk%c5a=gfu)FEW3<4rkKPt@%@^42=A(WlQ$Y6iDZXP&Gzd3jZ8h8&~9qf z5N0E36qSHB;6%(#p8AspGlg1En1{%l<{3azx0uvx)f(cgX_}bDsXkpF^!zA|kiNNz zx{gegwY86Cgfm{9Vlt{VeUZxQvp`cXr+6u}_tt&*t$I`Ui}#fG8;l0O-M-_5m5Ij) z-0!A{w@yL+687c^MH_`F`jMo*YC4ie9JKRTRr>6HlHr*qu09ZnL+po+_T|7oj3h5{ zSz9=o51-k$N&O}Ff&>xR2jV~aAiX=(2Bzmo-X;#-@~D;nLS@3##_t1X}Y z+qUqF?e*XId&;07T~fC_0FOYB)W32B(J0tHc3fJd!WMXGG`dV?j7J{I^XH9MqW32u ztK~X9PA8*aF(au;)o}GY{R{y&$x=_f9*ntCW%WNZD8(MSTx=2$8B)0oOG)S~sX)6P zk<+v(X;OXLen2eE-TZzx2nQXM{SQ$|DrVvihO?g!H=fN7d_VnFEiC0V<+vQh3sG?I zjw-prONJgtM!z9bMBv$bx_z7eftclV-lPQ6<)+&*M)KU%NEJTHU>i&?!b9K5aI=R! z>E8J{3ipD`$(J+}P!7`;%WqkKDK3|z26M0vS{1LP;n)n4%8jy#(v4y4K0*y}9I@YY z@)s8U5_X6i8=oewH^mUS&2ySY*FZKnU9Fb)>}=R!e9O>9W(_Hj=dKsCqVW zJlmbcp4G61LbQ<|mxMXOG7xmQpt$w|#dV1-Z)OLA15B_!UA~bbCw<3#y6fDhVZ$%B zPoDWckcjhDz5iCu3V*KL^+)&7*VfzgtE%p`{;F`{@5(rbxx2LIbT=?YalX?MHrN=#?j&`TT&`6-6==e)Bwle(>$1ys0C+iPzXi05MYd(8M05;zmbFZWs(AL z`k4nj9@t~t4`n}BYe_>-Zs6{Fja#Pct67_Xv&qvsfkhn6!>=EWl9K%`r!r0O=j#23 z>s%4A+AC}JMJ=3b+g>sJ&`MlM;yfvvat?#77Y6m2qxMA4*jOUH-)1pdhBMRqD=ZdkTPZ0pgk z@X$zJLoWO6Mz4p97hit0qXY@8pw+{CRKVc3;Cis(=`VNL%#dxeKN9g{Ew200-xIEy zq?QP#6_QeShF^!R&Hzp&%c(AM)F6H=Evz^f`#_L0@pAl1$HSTz4JRy6i-D(|2d{e; zwxfI|^L~n$5qqjiMWO(3xHL~hPc&&=ezWs!lNT8aWR!aR~yBu8-6}Y${UQqZ!_e= zW(3ptkrk@d`Pk~1H2u)+9!;M?eIc@^K*D7ScH3DHUP+X}vPx;W^m6*(J15z7vtgo< z-rkv2);zs=Q3ELm=k+XW&Sn2_;eMzdENLd&8y<+zT4G)mSXa2uX%MFSo5K4rHRNTT zPD=fvs#dnqdB?^V9UmUD`X~s^5bW9G`=;thvZm*zOFK_;1ZGNGb>uV<_PG-JL#?L? zJ3UV<*o0@Z3s(W%%=`#=(HSkgKl3aFuJvxcg# zAHeO%@%xpcuslgeXdeBI=##g>4u|#pyfH;-k0iE;5 z?Vl8c5P$Dxk+nkH0IjON-%+sHlrMx zM;K#OicM0Bok(}uLu>5E zHB3(1LF*or0mgm_tw>*iGe+N!<|>ZTm?!CdyrRFuQB zgGsNC1RM?TaIh-sOH7!QovK+D`{H(}iX;zu^Lzh=K!6J;xzkP9oy60{oS?M%yNL^N#J{L2Yolmc_4;87A%|v^^wHh3;gcZv;y2}+cWXe@SB<4g12VK zYwEUAYgt3=$+C2~U@MhJy1>gU%qmzSLGZ~94ODmC9v{}ZbQDbQviMIhIU?G%7lx^_ zijJ^PxLVH?Jt?4GKx0Z0FfW~JXrsPYpOvwqi`!DP72@xPcP*~Eo?E9LuF`#;g(V3n z|Bh(j#KR=tdx->JYz4c1KPtfjod6G5w3t3rpXil39_PLE_$6LHaKSc~g>agxrS|ob z^OV3k#gCh>6P@^1cs$DpoXA#s+8#&2bp>7r#rceX&Qm$yV!`Ao&2sJ(1(({Bx~(pAf!aXK z6Ioy5N+)K4KQ~^uqX1IK2o!r??ym1dMCdkP7B{cqm$d9CwZuH`xb^EyJzo2^;dg$m z$$}rOOgylg$kJ&sFf)NSz8y-)3wPOLuXG@bN1GJ(h)rqxF9~E5$$L^z*$B|_X2OHs zsx5bPbbwbJVw+D|(`z0xWLi8eOg}UL{c)K}McA8d$Y8HEC9v50%}_j5m5G^%4M?>V z33(>D5VaQdS4}EgKNe-yH_W(PQv5I|U&opIvifEcPB-mD!L1v{=rqCtL6$)NQC2Xz z{IjpJ&V{^K%uf88CcLp$dt77i_*-E0L&O1q_@&vGn-)Qb>$Psz{KG%b|H)b&5l?w(6G0D)(rO zMprdMngWPU4LA&)TT3qc4~yTImd{aNP+ND^8akTnm(NPOMW#8bo=|?nbjBhd<*2v6 zySiJwkx*rI$m!BjSEnYewK}(XTYAPX3wwOEo-@a0X+7{b6FYM}RQuf>bq<890N{&+ ziy;4RJpZE}IWMN;FUHSPi-{}+z3e!0a|LG*1Noci%>{F>PEl{hbC!SbhHQW?XP`SD zoAIVV{*!T4qtxg$C*izDBT1Ws+5wKMYOZkwqov6=6POW(w)owoO_uKAWR@JK^4#51 zbn{Oqt|0>3zwD(Y#eqwOx!G16{#Ae{=}iNfHZvxI{(d6|j!1X_lG{}qz;E|8tJ-e@ z*>DESZ~?j0ga?&+6@s5}H14zvWWF}JW7W5)_Jy*G1T{jNt3$=E?OG$rOT4$LW!7j@ z^lL6s4RfX%R>|nN7FO1qM#34r()Id=sO+QLqVre7rVBN~@}jVh8*lD%=IY~Fd)RnW zh5w~7YjP!AZAvq1%;GsXP;up<+{U zlZTYZWW;{hwG}em@CP0_x$Gjrys{QUL3a15l{wH$>8&-mA5(KU8nyK~eVnYmpwZ1Y zCO&!smA8t$5&JFq=|4sfHl%Yg)(sOzznst)t%ddOl2&|N>|xC3UV5+ip3$**+k&-2 z=)hJOQ`LX0bE)p|x+~3gnB#&0XU@#QC+hz_me?TyxtQ`p?w_RT?ZFS^iWGl386rzD z{rlP(P=04pFlZ=vU^7)tPdjyrd_doB8s8U_mOXV2 zHakq>uM?T_vQseB!^Wfr{?eR<^P8sqg{k0`?$iiYnVyJoX9|Q@Mpc z8T!MLERRa#6Mtn1mb!B#2>q~!BN8(uJk1LVO6i_%5gyZ2@{2wFHKiRO6I?6z^y|z~ z8~cM*Rq$TYJ+Kj%NK55VSpb%N{Eup_p5nvk(5S@^e1tA~zf0>Ax$INgTVJmCv1qDI zLK zD}n)m=em|EOlfYPE2KGE9ik@T!ua?6^$v}3f7efb#GTH7F2PzZerevE4m8+}xEAXi zAHCPSE7d1IKMo0Insz6B_!1ae#D-aTowoS#HIFegr%+yaRmtHZkOXk2QT0_MdX2nZ zZwwLj6-Vka-`@gz9+|X1i+GExt0?dpBIq2@KHCpzrsOp3}4~IEQ%Yn@%EkG zy0w+IdCqdRPQV{#z_xmu`_4!QD_XwkOXz^@7N~@yUVs*gd=U6U%d9f*8-@Kpchs-G z!@j!9L4BvHN}|o|2~zd9;FnyxDd8v{h^!UO_f4Oykrhi(&osFYYSQYo!m0H) zo(ccjePW?%C={XF*}ozE;8Muu+|@; zQ8l}~ovIlO>USb)Q#^LJv}JT|2r=MKtFBM+o$E=YXT*n#FPYz%B<4vB*57O*k?D(z zT)K!VRZ?kPY?K5GAe9b4uw6hKCJ8_15SurOqQjZQeEB2WRu;a^_^mUd@7zPYuJ}&7 z@|~pih8qW2#vuCt!W{&>MZv~8ql~(AKEp7n*Llg5kU);&>Egy!pt}WK33%4xY=YK! z#IIT-&)Mj-ZNV>$@P(xQ2Au$(Pm$;mjpdh5C?McHpW1utE|BT%Db~{^;f*o>CHT>u zS!_O#NdoX`b$_Ur(4TIH12`cF%6Scp(gzGY<`y% zK7xh{PY{_ucsUU>KpalQkNl7rhx}fwJ*E%diCDhp_)5=%SwoE^uznKV|NvVL7TI3x$FzuovwHUhr^dYqpzf|Bo|z4*Cb= z3-Au&EBS-ZJ3q(En~w8ouServecFiyk#l^0NHR0~$qb9)c2^EI=?{*^??6iMZe;v? z_CNl??Mn@l{g8v_Ao(;QuH3?{R-f~joNOt&qyM~!Aqc^Uk}Ri}XwK(jyobPxSz(Sz zcAPKXOIG*wqZrDCxy7C6;)t)1G=Dtw(ew|WVMLDrcei+3GXAgKxV7%P+VX|J4hzY4 ziPPi`#Ob7DJgL#8r^weCMrCHNa@oDD%{8tdpOIMr>zJPcs$xhCam6M<&$WD33m5H` zylh0hYgqkBj}#kq@&J-TfAyl_MYTqn_peOl4l>vBa8CKu^OTOp4cq?{s%!NK!GIv6n}URxZwycU!sj$)M7@Fm&W8ICitsV74X-q5(dS)4~#^X(GF zv&hJ68l^`fjLW2^E}!MVxH_emG|MMqkbEg~?B%mTF42Rd&B<>r(!_aAJRYpey3PD+ z8f@2s%w^w>et~0(zb-}$bksW`V$OTYcH9myq!K|Te8>d<^L-*6Q7f(v5Im^EsY>E# zxQk&Aq{e)5jlU(=9s55MLaX!#NLDn+-yC`wuwBpbE!mh4`4|wTxiBYAvX98Y0#;K| z{hCZx&kS^pdgEULs70H%xXj*7 zVjxnObI0rpCGvub^-p(U`0zPP{0p2i^uQKLuC!-Ih{M`aPLEt}pN!B$qhD8j(b!ln z1$}T-#BeR&S~71>(G(+H8tPF6617+E7wVmWYKtm{cW=z_YOUf*NTcjctnVg!rM7FC zUqeX84|JTZ$fklZYZWnfF0u^V9`I|oDQ2dmcyTt2dnG*oXSf-Ca-ddmq%b47n6Bd_7PaD zGJjFzQUR!jVe-+*=08QJ`ZB*3Jym{?MzYxzTq%}|_zgqy*igbf)dDF?-LwFG${zZ1 zyl3iHa$!QsLpsm6{oHu8`gZ-}MBZ;r20v+nKP`vF@t1g5v35H$((-8@cN$2%+TuJC zS_rWy#7f4x`u5!snw0T-!~=$>e}MzaQCU%O13rOG8+W5*8K14GmL!k_Qip@0y431; zn*{DDYqsBG{0NQ)NoJ7=isEpFYkx*exYz|WVdSCe291w+U<_{(_{S_0UC=iz6_;Cf zy2#^a*ULKVk61Pu0}a(XW}AgOCNVF~${4M!^bQsc9)dDix$g=ekn&j&j8zf#w%UGJ z2(wM4%@GQg3KW?&Q-MR;IunkDyMoRu?9wu{FxQgDACW(K>gc6tT60NOTJx{s<+6lx-ea%!1IE}592hK9*OL=z8bQ$CLg3^|14bpx2L}58l15Q@>$r<$FO&i zpVYi<%5?XO&t}dpm`MuLYu~P24o`Z@Hz{H?tr}k=W_SCs(9d-)>ufMD>cJfAymQ{^dNl}vi3Mv{eZR*mmzsm7Q$>9w(K0kO!VPC!(3}2Xg|G4M zZXmqgaI5VuWFlJk!f(}?mJ|TPoAmu$MCyz#XlHV;UFDBw8T$9V&+CsLu(Ud9sy$$P z&5|rQ5`q#bl~k88&4?pQy*NmwF0(**lJ(_$7YaoAk*#XEZS_mk%HhEUD~gQPZS?fc z<=M}Mm5UkP%m^nZ^M1>P{~7%TH}Iw`rFgY_&08h|404XI@|XD0@U!Zg(Cwe##6y-P zC{L#C2Z(Ro0Y+~Nm{u<@FK+|m0Ru~9fj--T>iu4_)L+-;oe+W&o2$NuYpv4 z+*n;U^-fAbfpr}~*~A1Jq^>zP@>|}g7nj~@P&?=?U*aX)Yh&~MQ`8nY zc0kMy=w5+WS)QADi3zB`f^TqM@$?J4Gad=i1%|kWcO+i75Pkffv&|tR!Y~BB5k4Mn zOYt1|x=Kc24r_+^D&5(!k5ACOf*Bu@$ zrNxn@=RbWswh{=u<&u$OwXzxh%60LKU;EtHbH+cVuXjhYDO_A=o;LyhE!0Ix zI7FRd3jSMt?bmUQ8otsXOsjAhGH)6$^myCXFN0pHBkGsT`79M@V>mzS0HX#)5`~14 z4OB1<#;SX%k*=ZV7VGrkn~QtB*T+6@UW_0i-HGJ30I!-0uStm|fdsnfo0Boapn4T~ zR90Pei~j`d2rfI6KMX9`hVKM_<~UsBq7oYzq|l`;$Y% zy#tNA(@toa5;5}*vUe!FEK@0wJN`)3{($juZ)1d*CH}3+H9moUkI<azTPBD`%L~D zKCM+b!<5Kz(T9(X&3xMjW)+~=VRQTymW5xMYB@TYv(BS`8b7F(mnC^)y3G^Y0P#xN zSvnt~aC@zc3D?0`Oy5Y7?5W8J|GEJ|>}PLOY^$qTFM1gjAEBZt95$^vM#R&Hs|Bnv zd?ot0PL+@bZoK-6sp|0|c}I!6ah2lU^b>Q6*&e|D0KM@7>O$_>=Mhj5{OE&Tjy&jd zHM!Ja)AWpt^vV71%e~1VLflxWdWS%z6E2<-NuTbOGkqK)R`T=yVJXKq?)dal@zyBx zN0GILtYXk$@)Nij62-x?*(mj@scI1%Ck;))uxD22z3`>12U3eO!XMn|%d4&NK#Qth zYF7$>;&tmwuUPvRLb#*q2MYQT~*~^6U5=7JW|K@(Fs+!OJ0qfB_GoI?TGKZ z5{GfdR1v6msj26GyBQzf4PJm>!(4H^AJ4T&sV>7o?S6qO?HsK{Gno>UJrcgBE~7~D zLAAKLx#|`zon5&@0P;2V=mLv+P^rCQvoh`{E|?-bJ6H}RLzy)TUWVeELGe;cdaDNQ zcZ9fW0-X3W){9shEp+p-xjzUQhR<}(;N&u~`k9s7?*h-m+&*}*@Do^SYX({4`=`8j zN&RAOOn!EeHsYi2e-#Vb&7ZQbmrh*v{sf~V^{ANyHPmvFYZ(D;EfYgVnr)XTYvRRl zEi{y=5BLey^eWjS$d?~{)R!#;*5lG$d;)8ia4}ra8ojyf6!k-#RlmkkX4LVfGiH@8 zL?PnwredM(=iVMub1wG9h|iK2vIhBjhI$RX2eA5#OX!-9#G~nF%luGQ3GClIY;+X(fHtnUlge(V&`?TcIjYuzvfzbd~B5is3Zl9>CJphx~fG zov&n7TBAq19q34;H%?N%l0CKU5Hed0JQEj}&*G%xI@K4c5pKCw^&+LF0!X=;$<{@$ z-4NfKF_?cWU>p_%^sONPvR7Vl18#R!m9f@cA*7V^3UU*|cpL=fCB3IQ4c5_})KLOj ze~wR`XD5sVFq}K?w-|_vo_Od<`FC`HTc!gnIt#`H?S6ITrfDq>hghU@WcS;+98A~J zP%ooC#25B!7hRPP>~G99;F%Lcq(N+EE5O8|ze;NkGt-0#t9*$G&8zrtYYlmg3%a9j)o$oT z>MC;HyjFQn0wBtQ7bxD8IU*~FwQxO!!c3iF%s%d}AM^ua0?cE<_j2zmA#h9NR_F^i zccyJ4Fes)_^4k1C=nZyWtc&Kdq+rKBq2nO3F2Fc_8MOo%H6tCLX?v`Si$RP04)2lt$ou4Z4sMU{4=0`K5nd1Umv7<$hsxtujyKAY45yaP>}Ra5Plo} zrNw6N7*d$o1!EKl7ddryh4~y3n{C<74m;PmDs*r&1-BdZK8*j#7}AtA4&%mB#Vp8;D9rf* zp=_?WHXr*$hR=|W6m`F#fKa1Lum>jTk zo^}5XVb@LR)UAL9)XhI5{!-FmBBm$21aNa|MuVEf%oM`*BhErE^wVldo~rz)WYTFg za1-ofv(6(Fp_)0fm>f7cWjLk1ZjPP-1A=A#CRjJwS6bjP0mFv$FUNp}@?{_|Se%EN zD<1br>r9jJH@sB}Uu5)QnuiD;5G|JFJ&I9`*BDO3VB>NJ88Xl(VZ#Dydm4MbLi?4#+YNJ59Fx;#yT83DjJYA6KW!$2!}c$yE4qZ2}i*6sjc z$e;*l?m&FPPh&8Pp00i3&3;#&yK|#70yL+wqtM_=4pxA16T=@GzEK(Y=X7FPhf zK(d#z2RVE~o9;#ftNlNL5bOk=D-sTE&7MGkBdgv;<&>N2NAFemNoS8TM8Ht~D8)r{ z2Hsfa43cWDR6dt{mot1KR ziaAT1N4Mm^oZ|a%C~&6$QmLMt8LW7B zvd@S#;+pOT)qP}Ls%5nd)bLJC0CRZpi^u`L_XRFgeL_Bca6XI9uDN;eYcxQ|M>jN+ z7Xn(t^(u2~q$ezNu&5d;@n1iy(rAr|Sq|4VDUd6?v?*)YPw61^Tw+eBS)^CwloM1m zq+ol{p7o6oyEjorm=v6u3u6K{+YkCTbZ(IsHGv0fJYUjUb}fwF^qP{rq}E-zX9DeYgu1Xo1u39^|l zpB z0}SARYO{|Befzfn5Ut7SfP;N^yl)oKp*B}XpayxfkuvJ6n|H!nMHn6XiQxTEPu5Kq z5A_0`v?eVVCFI-M7j1)e(rq!6bNQk&97esSrEl}&!|(y0z~`c^zhNxWU~K`wILm~o zvosov?$|JazlSoTE&HV;Ey-_t zxsC6ObHX+blL}42ORh_DEI;ZcH`l{mb{jU4AJN(&3dX*e^A7eHFjEm(pQ1UfxFM63 z#96qlp;}r?_5FuTb{wiIn=k$$j@qxzR{j`z_TRzQ;jJX0pGUnTR@4N=@oZB5l>ITa zUk;B3G0NE8E*j0bna>o1JrU{^N~<8`b;Nnt$0m^fqY0K@W6?km|3F+BZuqTdm&QCa z8!ZEMT&+Lwpa9x%+#kwU5@%)xo;7_SJ&4mmPGvYepQJFvBA+ik?e$Mum>Cyotnn`( z+1^{(NkY43Xwku%lnn%^OTCOvi^L6xcBd4)>9LS3Y2jh~!_AA-$wNY#oysKupqG-S z5HB!2p53SLQne)>W3)$ck>;W4;~OU-03Ss!A*hg?v_`XS0oqNS}seE1ne%P88>8J?|5ff z%b#3KC`7X`ZBiH?P(R-(8$c-{1#K*J&H{1MpQA$+4I=F*MU8g3ImuFfGd>%sn`W!g zEl_@hxFC>lVug1xUs6*+hON&$b^VXrF z&;t%IVXF1eelH>U6P{ij?9x=$2;oSy9Q}n9xnk%f+*Q%jL-iO4pW?>|Rm2N+MnwxH z$XmM7SV|fA9i3RJ=HXCnj-sqe-$z8P6y$~>!+AvY$-Zk;qdCKE2nNT=S-}#*TMy9w z>z7#nr-m|*u9w6!<^&K$&8Ifcq@uqX9|bB*wu*FC#|YZ~skOq@&hH(hvW(Sf-w|w= zQRX-CJgX_=5)CfUJ$)zluBV&API4bIN?WDPj5Z;v z>229MBgG)Vv*(rC9QE(Z0Km?AMP}yZ0X9({M_t>i&W-}9)9`tbqA7V6`_$>Sr8)d} zNPYvR#w5i6k6;M+db`7PGJ^SA_KZY7bFF?QUXPLar* zDHY*5U1_(L3F)6})?$hRT&`+93YCuodXug|?iH6r_G%JKJvO62!p|j{>jq~2%bX?N zDjFe_!x!n+{%Ua{ezbq?G*(iIN?1WfCG#AT4a!;IT;EOKUfS~dEbjZUFh7XRTnvQ4 zdrScbf{)I_o!6D^8(FZYsS|-61m&Nbze2+^Q&u>F-R@QMB%KleEg~Y%R1j*T{H#uy z*dk3BopxnSvVBvQ)A1m)`qcao;fvze98C)=ReWInR}rHQ^`qpZL^8_SX+%EZ1kiwh zodY~HGz_eF{$@3^B8h=UXNZf*SA7a(%n(P(eOM*qG#$X}PT0TeWF`+*R3! zrJV}I5659wLxoP&dm-#3`+8QG^T4#P7!B+QfBIMh4JryKZN`B~eM`WOb9QR2qpMM; z1z#pCa?@$Ms#$Q>0g@KbS7ns@gi{9HBG*7;1iCi7abyhuQ*WNChc}yQU508kszy|f z58Xe9{lx67*ot1fZqqeH-aY-bxFi>;82HT9r7?Gy`WgzfG^(5{z*|S%iQVqxSS$Sv z%-McFgv!7{-xehSWZ}nY9^_5_x~uxG%#S|;@cdo?v1<8t#}6Cq>556Tj0!HXPH2EW ze2jH|Sf?NrKET=z*bF7k0pySwPrijG#EM;OsO`76>>~%)z^Hd!!lfNb zmq=GU{BnkiqF zSteAkI1xMb4800ATgY*t((luY$6`^0fMG;Me`R8?X&3^&R|k{flEBtNWeIU2Cm3A*k*nw{X^IkuxHpyemYoVNEZ& zr?iyS>+dpP-ekYf0C2R-Fvt17f4$7!20r=we=G#<7)v|v_+Ef%cNFLR1#iw$Sj-X$ z>;bro>p-#;ns|M^Kj;5uH`FF;)s_{yOS6EcZw4O^feGCJY5-a3lB`!v z#gY)u&!pFsoXII{=R|g=%iA7}&qBUMtum*1@UE%N0|u$&>%jFb>)&(xicrGb5i~b+ zmw0omQI2~@VW@mBK(eGM#>vK_E;vLb=6`?u#kLZ2$!%sg)=Cdp+_bv1R;)ge!k`g| zG;6EmuXutWw5O_K};FuL2rDg*vry5k)b0*)Eur6l`4;iiigDU?-S$aKYug zec%afqjw_DdnG|d4Ja6V5&DPwD5+yA4>D|WMhUzy&?OLW4%+cx$750a_t1a)QR93r z(Fyq9a|?Gd!z9%6UA=C9DWHS&EY8tutSKtX&v;UQNn zuq^SFO30&finPx?J@`iIJ%I_lsPeS1fgNqpw=$0AI-AK8cSdfQabV+w6GoZ7p9F=D{jXXqV#oJ(?ECEdA`Icm`F zAHN9K>mA>`mBmq1=^`c{B2~@)(%&=#dj6Sx5s_)aMaNTP zwm1K75S0k$;c`7ciQ++Qu73ZQse~n5py|q%ZygS#&4BiYKHaUr1xpXD*}Y+Y^3;h7 zPR|uJd2|E5gnqHzC^ZhaGJQo`!%#22QrRobQulX+Hq#6+reWIwc>Us-3us8Df(5NZ z?_N$G_HNIq=ega*ZTU~&xOjLxuf*G0Z$&i{E3r{)@q~P)C@AqRVM)Y?D1_$(xl;3o zD8%Ptb7w!u5hdbct95ROVf`OVE;nzEZStL-4?s;L-=<)N=!=zlXH3BMh1s8IZ-35{ouHYa(qst9Z!MFh~gs)EsBm>5rOvY z&>#}Y;@>2U=VN;brKaX3GQ7YZ4|fAXB0|-`aS3TcQZjK4DF#l00=0P~%CdWTZ=7t= zk1EMnl6Ivf-l7-1NxbSk^pXqa>5i~ep6cfOmu?e8Wt8F<}~3=yvf_h;{Qm) zAdFPh zweW0Qo5HjkYV&x`ONCYt(2D8y@Aw9!DS4pXQZ?QJz6wGS%*9nF(3zkNn*0kMEvnN_ zCnT4_8eI!3MVxKbR1q<^j;)`1fF6;|xo~Ie&us5=`UYVDP@I(mYw?5{GHWN>!*vlE+ZIh2lLz;d?SXk zQ(f}h8p`xIijEiH;pOx?$-;i(M3E&_L_i`< z)Nfq!VlBbYJ2Y0O}OsYBrg01r>X>8=8nNazSO0x9%9btkye^kWdD0t zbK{3w{j!px%JYn|)g2`&7AaMXi;5AloS5^oC~ZWM%fA2@%X5gtxwyDJ$5V~@uj=Is zjlJ@?qL>$=_`f?@$3#gsFBV8^?+!qR`uS%WLj)wT)wJ3d%iu*zMO2U z+&{w_mQo}hP;sv+OV?Cj30e0j&wU2#I1f23a=|iF-RRv03`dB))-@pRYR>gRBf(Yc zUG-N}4w!$qTCSU^J|S27s?%g0_fMXMUwj;B9)dVT@d0D)9&;DHPu~oDeGX+L=FUcnd@hr54LWJQ4DotYIqUJ7A1!(5F z3oX53Aw4rb-%`^|3IPvO|DwE6b%(6@gD@V^LD9kfBVE2O_k+Oc*=yK?3oTrMt19ZA zTl{#wR=Wwe1oh7Z;61w?3fY3Ex1+r;vw0uh+ntGO#iF93N*3h{$1Xfzz<(pE4uA=svQPA%)v_IL zbN}SB6}bc2cgsY3DtCHn5TZOqh4IEPTJVl$r%T(ZjT>`A>H16=kf>?ODIZlSBJ z-4D!MW9D{>vfP>yz)N%v+ZN>_6>E0VuIW6c-VYDk*ixu)T9R9$|AK!rQj7RiEa?y zY7s7-z1n)PBDbSr9e1Z{){&!_{7D|(|FOGEYEFmx?Yy|MR3vc@db5y za)vlRKR4b4Of*-%@yt^|KSCou=XHQMA3wE^xq8?n9{H1{>S$yo#Kcn-Jvq+NRJ3&y9*3=R zfu?YYyC+iU_^0m(xBFOCda`$|xe+E>7*f4>Jmx?PP_26|k{47$keM*ygp|`=_$X1r z{=^!3Erkzzn!}w$hFNLEea`ER>id*PZ1-8`gH1tTjc&Gq-t+Ku&^{N@qmof$PAWpN z{#K3ZD56uSEmNcr8*^eUbppt?M_qt9dSu|yn^pqIzN&fFR~+s&v2j`;!30V=aB z@tMy@DmDM*v5h<|+9(&`#4LEVL$800036-&&z9+Pt~USPH0`0S+##s%eJXJpEugTx z$;-pEnXP&EPpn$D&3RdX>gSxz8sSUf4zeLV&*eMO%ghYaznZ8;q3U@u~0Cb zx1{PVhukeg5)-y2htB7YbT>_O8D7Ph419muIsv7l4`AY1-icr=DNK`TKvGcWZ9?J1mIqzNb7W(VOU_j$?X@D0ggO;M{u*oO0vDzUY4ZR;R1 znZ9O75gBO2#VVoQWlTb)3A_rE=-eMU3&5rP5n*&#&M;Spr=*esh^55i+VBj%Lca_G ztemRd#!6v+PI9l!0=2*`$AK|Kg{{|Hx#E@W4~5*PxkFo@Us_eXRpCTa)(MaA*Q0`c zW)s*6ty;7YJmgCA{pw(_A|oxUz(+=M-G60%5R~D0-Gmh)8nkh*<^KM7ecAQz`Zx+_ z;?Y}%xM0(h{R3oOOB504POMwc@EtlGXEZ0Rs)6C|JYZ^;15jPo-T5>Ynl?z^0E#v$ z=9yp4Qt?ixYSE$vkno+!)K0WeROl&Zsn-_zt)SEdrIc&frDXlg2+jUQ;6c4|2koV5 zSkLCMh&rx8i$mj`j`PX3_a91H`hIkxzdT%@wj=Wedf8FTJy=FgW5TRV$oJJ%x>G!` zv)^wo+#u6qPf!CjJ}zdG-}!vlAxKe7em%=R2(6PV0ab#R2c(HuWtA=bUf(t#lw%guqUr;7f zoh2=hf1w`7FM-9osY>I|3B?b%7;(0-G2Fl@y;A@6oFEV7({KCt9c z-&n+#N}?m)6xSN|t)o|5^R0{ptC{LmOE;9U9vUB;6MfK`NcA;3qc({*TdTV5pXkQ> zmwVFjhZXZRtHM)mPV60@p0o$eQpvF%et*pT$_`&s(|stisVZ5n7EneUqBxEy{LHs| zyl%`+)L`Y5oUXg^Gd6rkIG`a{)6dfr*W_yW@fSs}d~de%k7nX)w27_$`*CGz9#wep4~8=R#9JH zuZM>Z%TdUOi?vk&yXQG)l$V{|GR6!6>Z-7aGiD^LKzkV6*D477JFmB!?akw}J_IY8 z&eQVy!a2x~OSP`v_u}+B4k4(q{3VZ634A`W1aY=jfi=rgL+qC%As?P4=8TxZUcs z3vU`yl6%FbHdAkd^1c)2$d2U|gTQU}&3HO3MRdFG`(s#(uZ_JoH}7;|!9f$Zjp}#u zyj(K`Z*UIFaBMaoGP>{Ll@xpy>$hq&=cFndSO z5Ek|}8%?nkx@LIOlA|)UPDG6qgpng7aQi&QyG5i5zRsfYrg8Q=h7Z(^ZiT-J1xY%H zh{05u5S=@YD3|7*es0W7w#yONB^l)_Fmi1spAf?u$P>9iZ%2%)7oz_$sVu<@$Ijo7 z4930C;lUK{EBTG;Mq`>l2LT7RI!0FW{;9RzLb?D8^`tMF2aKPLT*r1fdQz2$4dMWoeq-lnYo`J-*=z zo2Uy7-Vpyf_$UT@re`x`HWE97fAe7aZ6Hr`&N|m7E_%X&>KIa~v7nI7Y{a+oBK0c| zxKYql4E!*2>}F#VQRm#ut|=?5lwkkNzl**xuyeG_+m*3v+JUo7?u* zDa^;y^RK2~T!%p)-3jH7_Z8Jd;VFZYbR=@`3xyVWW&D$Y$#wYs6~@cjLbh0DXlovelWtqQcuo?fsd;GkUCW4~7WU zA5pF=lts{@Ck6|GFF(&fKKLdtlqIB)_#3uP#E%8*4yAlj}@_z(V$!dN~f~)WdSwxm+h+~qIm`J9129Pnx+wZGLtq&CX|d>XE9S%RsDO&I?-l%|gEA(Wl8aU;0cmI#Nd%j+`nS))(x}3(N zM-^;B1+uvnS33H$>K-7UVc_=NYD5UvsBb*)l@rY#aEW^>tR$Wra9_^WmYfHZ!%jbi 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_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..0c9895179 --- /dev/null +++ b/_modules/gustaf/create/faces.html @@ -0,0 +1,693 @@ + + + + + + + + + + gustaf.create.faces — gustaf 0.0.23 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)
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ 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..7489213d8 --- /dev/null +++ b/_modules/gustaf/create/vertices.html @@ -0,0 +1,527 @@ + + + + + + + + + + gustaf.create.vertices — gustaf 0.0.23 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..1ba1e6ad6 --- /dev/null +++ b/_modules/gustaf/create/volumes.html @@ -0,0 +1,523 @@ + + + + + + + + + + gustaf.create.volumes — gustaf 0.0.23 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..58bfae704 --- /dev/null +++ b/_modules/gustaf/edges.html @@ -0,0 +1,1008 @@ + + + + + + + + + + gustaf.edges — gustaf 0.0.23 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..13504cce4 --- /dev/null +++ b/_modules/gustaf/faces.html @@ -0,0 +1,843 @@ + + + + + + + + + + gustaf.faces — gustaf 0.0.23 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..ab18b20ba --- /dev/null +++ b/_modules/gustaf/helpers/data.html @@ -0,0 +1,1219 @@ + + + + + + + + + + gustaf.helpers.data — gustaf 0.0.23 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 + +
    +[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] +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..96df4bec9 --- /dev/null +++ b/_modules/gustaf/helpers/notebook.html @@ -0,0 +1,652 @@ + + + + + + + + + + gustaf.helpers.notebook — gustaf 0.0.23 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..f2ccd0713 --- /dev/null +++ b/_modules/gustaf/helpers/options.html @@ -0,0 +1,1023 @@ + + + + + + + + + + gustaf.helpers.options — gustaf 0.0.23 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", + "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..28802bf62 --- /dev/null +++ b/_modules/gustaf/helpers/raise_if.html @@ -0,0 +1,585 @@ + + + + + + + + + + gustaf.helpers.raise_if — gustaf 0.0.23 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..2f733692e --- /dev/null +++ b/_modules/gustaf/io/default.html @@ -0,0 +1,519 @@ + + + + + + + + + + gustaf.io.default — gustaf 0.0.23 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..244f879f8 --- /dev/null +++ b/_modules/gustaf/io/ioutils.html @@ -0,0 +1,536 @@ + + + + + + + + + + gustaf.io.ioutils — gustaf 0.0.23 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..62102f0a5 --- /dev/null +++ b/_modules/gustaf/io/meshio.html @@ -0,0 +1,673 @@ + + + + + + + + + + gustaf.io.meshio — gustaf 0.0.23 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(mesh, fname, 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 + ------------ + mesh: Edges, Faces or Volumes + Input mesh + fname: Union[str, pathlib.Path] + File to save the mesh in. + 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 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..cfc8d48ac --- /dev/null +++ b/_modules/gustaf/io/mfem.html @@ -0,0 +1,688 @@ + + + + + + + + + + gustaf.io.mfem — gustaf 0.0.23 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(mesh, fname): + """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 + ------------ + mesh: Faces + fname: str + + 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..088c004ca --- /dev/null +++ b/_modules/gustaf/io/mixd.html @@ -0,0 +1,798 @@ + + + + + + + + + + gustaf.io.mixd — gustaf 0.0.23 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( + mesh, + fname, + 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..1b485e8c4 --- /dev/null +++ b/_modules/gustaf/io/nutils.html @@ -0,0 +1,642 @@ + + + + + + + + + + gustaf.io.nutils — gustaf 0.0.23 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(mesh, fname): + """Export in Nutils format. Files are saved as np.savez(). + Supports triangle,and tetrahedron Meshes. + + Parameters + ----------- + mesh: Faces or Volumes + fname: str + + 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..e8a5ca32f --- /dev/null +++ b/_modules/gustaf/show.html @@ -0,0 +1,1014 @@ + + + + + + + + + + gustaf.show — gustaf 0.0.23 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) + # 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..751913926 --- /dev/null +++ b/_modules/gustaf/utils/arr.html @@ -0,0 +1,1048 @@ + + + + + + + + + + gustaf.utils.arr — gustaf 0.0.23 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
    + +
    + +
    + + + + + +
    + +
    +
    +
    + +
    + + + +
    + + +
    +
    + +
    + +
    +
    +
    + + + + + +
    + + +
    + + \ 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..921aeb476 --- /dev/null +++ b/_modules/gustaf/utils/connec.html @@ -0,0 +1,1338 @@ + + + + + + + + + + gustaf.utils.connec — gustaf 0.0.23 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_) + elif isinstance(range_, (list, tuple)): + if len(range_) > 2: + raise ValueError("Input range is too long") + + # keep the arange syntax. If this isn't wanted, + # change to (ran[0], ran[1]+1) + indices = np.arange(*range_) + + # closed is ignored + if not continuous: + if indices.size % 2 == 1: + raise ValueError("Ranges should result in even number of indices.") + return indices.reshape(-1, 2) + + # continuous edges + indices = np.repeat(indices, 2) + indices = np.append(indices, indices[0])[1:] if closed else indices[1:-1] + + return indices.reshape(-1, 2)
    + + + +
    +[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)[1:-1] + edges = edges.reshape(-1, 2) + if closed: + edges = np.vstack((edges, [edges[-1, -1], edges[0, 0]])) + + return edges
    + + + +
    +[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..75095c255 --- /dev/null +++ b/_modules/gustaf/utils/log.html @@ -0,0 +1,612 @@ + + + + + + + + + + gustaf.utils.log — gustaf 0.0.23 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..34d9503ff --- /dev/null +++ b/_modules/gustaf/utils/tictoc.html @@ -0,0 +1,613 @@ + + + + + + + + + + gustaf.utils.tictoc — gustaf 0.0.23 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..2501daef5 --- /dev/null +++ b/_modules/gustaf/vertices.html @@ -0,0 +1,1090 @@ + + + + + + + + + + gustaf.vertices — gustaf 0.0.23 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.const_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 + return copy.deepcopy(self)
    + + +
    +[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..67e3ea66d --- /dev/null +++ b/_modules/gustaf/volumes.html @@ -0,0 +1,784 @@ + + + + + + + + + + gustaf.volumes — gustaf 0.0.23 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..38e0bcd02 --- /dev/null +++ b/_modules/index.html @@ -0,0 +1,500 @@ + + + + + + + + + + Overview: module code — gustaf 0.0.23 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.rst.txt b/_sources/_generated/gustaf.create.edges.rst.txt new file mode 100644 index 000000000..24fc38400 --- /dev/null +++ b/_sources/_generated/gustaf.create.edges.rst.txt @@ -0,0 +1,32 @@ +.. _gustaf.create.edges: + +gustaf.create.edges +=================== + +.. automodule:: gustaf.create.edges + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + from_data + + + + + + + + + + + + + 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.rst.txt b/_sources/_generated/gustaf.create.faces.rst.txt new file mode 100644 index 000000000..0e04d7b10 --- /dev/null +++ b/_sources/_generated/gustaf.create.faces.rst.txt @@ -0,0 +1,34 @@ +.. _gustaf.create.faces: + +gustaf.create.faces +=================== + +.. automodule:: gustaf.create.faces + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + box + to_quad + to_simplex + + + + + + + + + + + + + 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.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..cbe1d8b07 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.ComputedData.rst.txt @@ -0,0 +1,46 @@ +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..443e9bcc5 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.ComputedMeshData.rst.txt @@ -0,0 +1,44 @@ +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..e759fba0b --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.DataHolder.rst.txt @@ -0,0 +1,53 @@ +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.values + + + + + + + + \ 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..9002ee860 --- /dev/null +++ b/_sources/_generated/gustaf.helpers.data.VertexData.rst.txt @@ -0,0 +1,51 @@ +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.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..6426addb2 --- /dev/null +++ b/_sources/_generated/gustaf.utils.arr.rst.txt @@ -0,0 +1,45 @@ +.. _gustaf.utils.arr: + +gustaf.utils.arr +================ + +.. automodule:: gustaf.utils.arr + + + + + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: + + bounds + bounds_diagonal + bounds_mean + bounds_norm + close_rows + 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..e760386bd --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 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..d06a71d75 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 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..7224c828f --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '0.0.23', + 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 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 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..250f5665f --- /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-2023 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, is 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

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