fibernet 4.0.2__tar.gz → 4.0.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fibernet-4.0.2 → fibernet-4.0.4}/CHANGELOG.md +32 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/PKG-INFO +3 -3
- {fibernet-4.0.2 → fibernet-4.0.4}/README.md +2 -2
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/__init__.py +1 -1
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/accelerated.py +91 -73
- {fibernet-4.0.2 → fibernet-4.0.4}/pyproject.toml +1 -1
- {fibernet-4.0.2 → fibernet-4.0.4}/CONTRIBUTING.md +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/LICENSE +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/MANIFEST.in +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/docs/api/index.rst +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/docs/changelog.rst +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/docs/conf.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/docs/contributing.rst +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/docs/getting_started.rst +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/docs/index.rst +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/docs/quickstart.rst +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/docs/tutorials.rst +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/01_mechanical_analysis.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/02_structure_comparison.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/03_thermal_analysis.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/04_buckling_analysis.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/05_chiral_braided_structures.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/06_uncertainty_quantification.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/07_electromagnetic_analysis.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/08_fatigue_analysis.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/09_creep_analysis.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/10_diffusion_transport.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/11_parameter_sweep.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/12_topology_analysis.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/13_publication_workflow.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/14_advanced_analysis.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/15_ml_property_prediction.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/16_fiber_bundles.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/17_composite_laminates.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/18_pyvista_visualization.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/19_optimization.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/__init__.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/advanced_generators.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/comprehensive_demo.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/full_workflow.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/integration_examples.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/ml_example.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/nonlinear_mechanics.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/research_case_study.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/examples/transformations.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/__init__.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/advanced.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/comparison.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/homogenization.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/morphology.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/networkx_integration.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/percolation.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/properties.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/spatial.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/statistics.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/stress_strain.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/topology.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/graph_features.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/graph_features_3d.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/api.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/__init__.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/copy_utils.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/crosslinks.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/fiber.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/material.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/network.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/pbc.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/structure_graph.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/tiling.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/transform.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/transforms.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/doe.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/easy.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/examples/__init__.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/examples/basic_usage.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/__init__.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/_fixes.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/_graph_builder.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/advanced.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/bundles.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/chiral.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/curved.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/disordered.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/field_guided.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/fractal.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/gradient.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/hierarchical.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/laminates.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/metamaterials.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/ordered.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/pattern.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/regular.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/specialized.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/tpms.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/unified.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/variants.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/woven.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/zigzag.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/graph/__init__.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/graph/io.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/graph/weld.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/integrations/__init__.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/integrations/lammps_integration.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/integrations/mdanalysis_integration.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/integrations/networkx_integration.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/integrations/ovito_integration.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/__init__.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/fea_export.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/gmsh.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/lammps.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/mesh_export.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/pandas_io.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/pdb.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/vtk.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/xyz.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/materials.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/ml/__init__.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/ml/_archived/dataset.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/ml/_archived/dataset_v2.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/ml/_archived/graph_neural_network.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/ml/_archived/predictor.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/ml/features.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/ml/utils.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/py.typed +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/pyvista_viz.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/rl/__init__.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/rl/parametric.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/rl/utils.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/scripts/validate_3d_units.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/scripts/validate_3d_v2.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/__init__.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/acoustic.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/buckling_analysis.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/coupled.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/coupling.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/creep.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/cte.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/damage.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/diffusion.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/dma.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/dynamics.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/electromagnetic.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/fatigue.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/fluid.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/fracture.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/fracture_mechanics.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/incremental_fem.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/mechanical.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/molecular_dynamics.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/multiscale.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/nonlinear.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/optimization.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/periodic.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/permeability.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/rheology.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/rl_environment.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/thermal.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/uncertainty.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/validation.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/viscoelastic.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived_fem/__init__.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived_fem/taichi_fem.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_fem_archive.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/fem.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/rl_env.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/trimesh_integration.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/units.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/__init__.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/batch.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/config.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/ensemble.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/exceptions.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/geometry.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/io.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/parametric.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/units.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/validation.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/version.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/visualization.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/__init__.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/advanced.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/animate.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/graph_plot.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/plot2d.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/plotly_viz.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/render.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/render3d.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/renderer.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/showcase.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/showcase_renderer.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/visualization.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/fibernet.egg-info/SOURCES.txt +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/requirements-dev.txt +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/requirements.txt +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/setup.cfg +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_accelerated.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_acoustic.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_advanced.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_advanced_statistics.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_api.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_benchmark.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_buckling_analysis.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_bundles.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_comparison.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_copy.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_coupled.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_creep.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_cte.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_curved.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_damage.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_diffusion.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_dma.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_dynamics.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_edge_cases.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_effective_properties.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_electromagnetic.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_ensemble.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_fatigue.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_fea_export.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_field_guided.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_fluid_acoustic.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_fractal.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_fracture_mechanics.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_generators.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_gnn.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_gradient.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_graph_api.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_graph_neural_network.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_homogenization.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_incremental_fem.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_integration.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_integration_v3.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_integrations.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_io.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_laminates.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_mesh_export.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_metamaterial_workflow.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_metamaterials.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_ml.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_molecular_dynamics.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_multiscale.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_nonlinear.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_optimization.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_pandas_io.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_parametric.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_pbc.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_percolation.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_periodic.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_permeability.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_pyvista.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_rl_environment.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_simulation.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_specialized.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_stress_strain.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_taichi_fem.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_topology.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_tpms.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_transforms.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_trimesh.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_uncertainty.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_validation.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_viscoelastic.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_visualization.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/conftest.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_3d_units.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_config.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_core.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_crosslinks.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_doe.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_materials.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_ml_rl_utils.py +0 -0
- {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_units.py +0 -0
|
@@ -1,3 +1,35 @@
|
|
|
1
|
+
## [4.0.4] - 2026-07-17
|
|
2
|
+
|
|
3
|
+
### Fixed
|
|
4
|
+
- **Critical: Progressive slowdown during batch simulation (kernel recompilation)**
|
|
5
|
+
- Moved `@ti.kernel def substep()` out of `dynamics()` method body
|
|
6
|
+
- Kernel now compiled once per `(dim, num_nodes, num_edges)` and cached alongside fields
|
|
7
|
+
- Before: Each `dynamics()` call recompiled the kernel → Taichi LLVM accumulated modules → progressive slowdown
|
|
8
|
+
- After: Kernel cached → constant per-structure time across hundreds of calls
|
|
9
|
+
- Test: 50 structures, first-10 avg = 6.60s, last-10 avg = 7.09s (ratio 1.07x — no slowdown)
|
|
10
|
+
|
|
11
|
+
### Technical Details
|
|
12
|
+
- File: `fibernet/sim/accelerated.py`
|
|
13
|
+
- Change: Kernel definition moved inside the `_field_cache` allocation block, stored as `cached['substep']`
|
|
14
|
+
- Impact: Eliminates ~0.5-1s kernel compilation overhead per call after the first
|
|
15
|
+
- Combined with 4.0.2 (vectorized save) and 4.0.3 (field cache): total ~16x speedup from original
|
|
16
|
+
|
|
17
|
+
## [4.0.3] - 2026-07-17
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
- **Critical: Taichi SNode exhaustion causing simulation hang at ~128 structures**
|
|
21
|
+
- Added `_field_cache` to `TaichiEngine` class
|
|
22
|
+
- Reuses Taichi fields across calls with same `(dim, num_nodes, num_edges)`
|
|
23
|
+
- Before: Each `dynamics()` call allocated 14 Taichi fields → SNode limit (~1024) hit at ~128 calls → process hangs indefinitely
|
|
24
|
+
- After: Fields cached and reused → tested 150+ structures without hang
|
|
25
|
+
- Memory usage reduced significantly (no field accumulation)
|
|
26
|
+
|
|
27
|
+
### Technical Details
|
|
28
|
+
- File: `fibernet/sim/accelerated.py`
|
|
29
|
+
- Change: Added class-level `_field_cache` dict keyed by `(dim, num_nodes, num_edges)`
|
|
30
|
+
- Impact: Fixes critical hang bug, improves memory efficiency
|
|
31
|
+
- Test: Successfully ran 150 structures sequentially (previously hung at #128)
|
|
32
|
+
|
|
1
33
|
## [4.0.2] - 2026-07-16
|
|
2
34
|
|
|
3
35
|
### Performance
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fibernet
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.4
|
|
4
4
|
Summary: A comprehensive fiber network generation, simulation, and ML toolkit for materials science research
|
|
5
5
|
Author: FiberNet Contributors
|
|
6
6
|
License-Expression: MIT
|
|
@@ -86,7 +86,7 @@ Dynamic: license-file
|
|
|
86
86
|
|
|
87
87
|
---
|
|
88
88
|
|
|
89
|
-
[](https://pypi.org/project/fibernet/4.0.
|
|
89
|
+
[](https://pypi.org/project/fibernet/4.0.3/)
|
|
90
90
|
[](https://www.python.org/)
|
|
91
91
|
[](LICENSE)
|
|
92
92
|
[](https://pypi.org/project/fibernet/)
|
|
@@ -626,4 +626,4 @@ python3 tutorials/v4_tutorial/test_pipeline.py --full
|
|
|
626
626
|
|
|
627
627
|
---
|
|
628
628
|
|
|
629
|
-
*FiberNet v4.0.0 | [PyPI](https://pypi.org/project/fibernet/4.0.
|
|
629
|
+
*FiberNet v4.0.0 | [PyPI](https://pypi.org/project/fibernet/4.0.3/) | [GitHub](https://github.com/GellmanSparrowS/fibernet)*
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
[](https://pypi.org/project/fibernet/4.0.
|
|
10
|
+
[](https://pypi.org/project/fibernet/4.0.3/)
|
|
11
11
|
[](https://www.python.org/)
|
|
12
12
|
[](LICENSE)
|
|
13
13
|
[](https://pypi.org/project/fibernet/)
|
|
@@ -547,4 +547,4 @@ python3 tutorials/v4_tutorial/test_pipeline.py --full
|
|
|
547
547
|
|
|
548
548
|
---
|
|
549
549
|
|
|
550
|
-
*FiberNet v4.0.0 | [PyPI](https://pypi.org/project/fibernet/4.0.
|
|
550
|
+
*FiberNet v4.0.0 | [PyPI](https://pypi.org/project/fibernet/4.0.3/) | [GitHub](https://github.com/GellmanSparrowS/fibernet)*
|
|
@@ -33,7 +33,7 @@ Parametric Structure Generation (for RL)
|
|
|
33
33
|
>>> internal = g.get_internal_nodes() # Nodes available for RL actions
|
|
34
34
|
"""
|
|
35
35
|
|
|
36
|
-
__version__ = "4.0.
|
|
36
|
+
__version__ = "4.0.4"
|
|
37
37
|
|
|
38
38
|
# --- Core ---
|
|
39
39
|
from fibernet.core.structure_graph import StructureGraph, SNode, SEdge
|
|
@@ -266,6 +266,10 @@ class TaichiEngine:
|
|
|
266
266
|
Explicit Verlet integration with damping.
|
|
267
267
|
"""
|
|
268
268
|
|
|
269
|
+
# Cache Taichi fields and kernels to avoid SNode exhaustion
|
|
270
|
+
# Key: (dim, num_nodes, num_edges)
|
|
271
|
+
_field_cache = {}
|
|
272
|
+
|
|
269
273
|
def __init__(self, arch: str = "cpu", num_threads: int = 4):
|
|
270
274
|
_ensure_taichi(arch, num_threads)
|
|
271
275
|
|
|
@@ -395,16 +399,94 @@ class TaichiEngine:
|
|
|
395
399
|
else:
|
|
396
400
|
stiff_np = np.full(num_edges, stiffness)
|
|
397
401
|
|
|
398
|
-
# Taichi fields (
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
402
|
+
# Taichi fields and kernel (cached to avoid SNode exhaustion and kernel recompilation)
|
|
403
|
+
cache_key = (dim, num_nodes, num_edges)
|
|
404
|
+
if cache_key not in TaichiEngine._field_cache:
|
|
405
|
+
# Allocate fields once
|
|
406
|
+
ti_pos = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
|
|
407
|
+
ti_vel = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
|
|
408
|
+
ti_edges = ti.Vector.field(2, dtype=ti.i32, shape=num_edges)
|
|
409
|
+
ti_L0 = ti.field(dtype=ti.f64, shape=num_edges)
|
|
410
|
+
ti_k = ti.field(dtype=ti.f64, shape=num_edges)
|
|
411
|
+
ti_fixed = ti.field(dtype=ti.i32, shape=num_nodes)
|
|
412
|
+
ti_ext = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
|
|
413
|
+
ti_pos0 = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
|
|
414
|
+
ti_sched = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
|
|
415
|
+
ti_sched_mask = ti.field(dtype=ti.i32, shape=num_nodes)
|
|
416
|
+
ti_dt = ti.field(dtype=ti.f64, shape=())
|
|
417
|
+
ti_dashpot = ti.field(dtype=ti.f64, shape=())
|
|
418
|
+
ti_drag = ti.field(dtype=ti.f64, shape=())
|
|
419
|
+
ti_ramp = ti.field(dtype=ti.f64, shape=())
|
|
420
|
+
|
|
421
|
+
# Compile kernel once (closure captures fields + constants)
|
|
422
|
+
@ti.kernel
|
|
423
|
+
def _cached_substep():
|
|
424
|
+
_dt = ti_dt[None]
|
|
425
|
+
_dash = ti_dashpot[None]
|
|
426
|
+
_drag = ti_drag[None]
|
|
427
|
+
_ramp = ti_ramp[None]
|
|
428
|
+
|
|
429
|
+
for e in range(num_edges):
|
|
430
|
+
ia = ti_edges[e][0]
|
|
431
|
+
ib = ti_edges[e][1]
|
|
432
|
+
d = ti_pos[ia] - ti_pos[ib]
|
|
433
|
+
dist = d.norm() + 1e-6
|
|
434
|
+
dir_ = d / dist
|
|
435
|
+
f_spring = -ti_k[e] * dir_ * (dist / ti_L0[e] - 1.0)
|
|
436
|
+
rel_v = ti_vel[ia] - ti_vel[ib]
|
|
437
|
+
f_damp = -_dash * rel_v.dot(dir_) * dir_ * ti_L0[e]
|
|
438
|
+
f_total = f_spring + f_damp
|
|
439
|
+
for k in ti.static(range(dim)):
|
|
440
|
+
ti.atomic_add(ti_vel[ia][k], f_total[k] * _dt)
|
|
441
|
+
ti.atomic_add(ti_vel[ib][k], -f_total[k] * _dt)
|
|
407
442
|
|
|
443
|
+
for i in range(num_nodes):
|
|
444
|
+
for k in ti.static(range(dim)):
|
|
445
|
+
ti_vel[i][k] += ti_ext[i][k] * _dt
|
|
446
|
+
ti_vel[i] *= ti.exp(-_drag * _dt)
|
|
447
|
+
for k in ti.static(range(dim)):
|
|
448
|
+
ti_pos[i][k] += ti_vel[i][k] * _dt
|
|
449
|
+
|
|
450
|
+
for i in range(num_nodes):
|
|
451
|
+
if ti_fixed[i] == 1:
|
|
452
|
+
for k in ti.static(range(dim)):
|
|
453
|
+
ti_pos[i][k] = ti_pos0[i][k]
|
|
454
|
+
ti_vel[i][k] = 0.0
|
|
455
|
+
|
|
456
|
+
for i in range(num_nodes):
|
|
457
|
+
if ti_sched_mask[i] == 1:
|
|
458
|
+
for k in ti.static(range(dim)):
|
|
459
|
+
ti_pos[i][k] = ti_pos0[i][k] + ti_sched[i][k] * _ramp
|
|
460
|
+
ti_vel[i][k] = 0.0
|
|
461
|
+
|
|
462
|
+
TaichiEngine._field_cache[cache_key] = {
|
|
463
|
+
'ti_pos': ti_pos, 'ti_vel': ti_vel, 'ti_edges': ti_edges,
|
|
464
|
+
'ti_L0': ti_L0, 'ti_k': ti_k, 'ti_fixed': ti_fixed,
|
|
465
|
+
'ti_ext': ti_ext, 'ti_pos0': ti_pos0, 'ti_sched': ti_sched,
|
|
466
|
+
'ti_sched_mask': ti_sched_mask, 'ti_dt': ti_dt,
|
|
467
|
+
'ti_dashpot': ti_dashpot, 'ti_drag': ti_drag, 'ti_ramp': ti_ramp,
|
|
468
|
+
'substep': _cached_substep,
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
# Retrieve cached fields and kernel
|
|
472
|
+
cached = TaichiEngine._field_cache[cache_key]
|
|
473
|
+
ti_pos = cached['ti_pos']
|
|
474
|
+
ti_vel = cached['ti_vel']
|
|
475
|
+
ti_edges = cached['ti_edges']
|
|
476
|
+
ti_L0 = cached['ti_L0']
|
|
477
|
+
ti_k = cached['ti_k']
|
|
478
|
+
ti_fixed = cached['ti_fixed']
|
|
479
|
+
ti_ext = cached['ti_ext']
|
|
480
|
+
ti_pos0 = cached['ti_pos0']
|
|
481
|
+
ti_sched = cached['ti_sched']
|
|
482
|
+
ti_sched_mask = cached['ti_sched_mask']
|
|
483
|
+
ti_dt = cached['ti_dt']
|
|
484
|
+
ti_dashpot = cached['ti_dashpot']
|
|
485
|
+
ti_drag = cached['ti_drag']
|
|
486
|
+
ti_ramp = cached['ti_ramp']
|
|
487
|
+
substep = cached['substep']
|
|
488
|
+
|
|
489
|
+
# Reset field data (always, even on cache hit)
|
|
408
490
|
ti_pos0.from_numpy(pos_orig.astype(np.float64))
|
|
409
491
|
ti_pos.from_numpy(pos_orig.astype(np.float64))
|
|
410
492
|
ti_vel.from_numpy(np.zeros_like(pos_orig))
|
|
@@ -430,73 +512,9 @@ class TaichiEngine:
|
|
|
430
512
|
sched_mask = np.zeros(num_nodes, dtype=np.int32)
|
|
431
513
|
for ni in schedule_nodes:
|
|
432
514
|
sched_mask[ni] = 1
|
|
433
|
-
ti_sched = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
|
|
434
515
|
ti_sched.from_numpy(schedule_targets.astype(np.float64))
|
|
435
|
-
ti_sched_mask = ti.field(dtype=ti.i32, shape=num_nodes)
|
|
436
516
|
ti_sched_mask.from_numpy(sched_mask)
|
|
437
517
|
|
|
438
|
-
# Parameter fields
|
|
439
|
-
ti_dt = ti.field(dtype=ti.f64, shape=())
|
|
440
|
-
ti_dashpot = ti.field(dtype=ti.f64, shape=())
|
|
441
|
-
ti_drag = ti.field(dtype=ti.f64, shape=())
|
|
442
|
-
ti_ramp = ti.field(dtype=ti.f64, shape=())
|
|
443
|
-
|
|
444
|
-
@ti.kernel
|
|
445
|
-
def substep():
|
|
446
|
-
_dt = ti_dt[None]
|
|
447
|
-
_dash = ti_dashpot[None]
|
|
448
|
-
_drag = ti_drag[None]
|
|
449
|
-
_ramp = ti_ramp[None]
|
|
450
|
-
|
|
451
|
-
# Spring + dashpot forces
|
|
452
|
-
for e in range(num_edges):
|
|
453
|
-
ia = ti_edges[e][0]
|
|
454
|
-
ib = ti_edges[e][1]
|
|
455
|
-
d = ti_pos[ia] - ti_pos[ib]
|
|
456
|
-
dist = d.norm() + 1e-6
|
|
457
|
-
dir_ = d / dist
|
|
458
|
-
|
|
459
|
-
# Spring force: F = -k * dir * (dist/rest - 1)
|
|
460
|
-
f_spring = -ti_k[e] * dir_ * (dist / ti_L0[e] - 1.0)
|
|
461
|
-
|
|
462
|
-
# Dashpot: F_damp = -damp * (vi-vj).dot(dir) * dir * rest
|
|
463
|
-
rel_v = ti_vel[ia] - ti_vel[ib]
|
|
464
|
-
f_damp = -_dash * rel_v.dot(dir_) * dir_ * ti_L0[e]
|
|
465
|
-
|
|
466
|
-
f_total = f_spring + f_damp
|
|
467
|
-
|
|
468
|
-
for k in ti.static(range(dim)):
|
|
469
|
-
ti.atomic_add(ti_vel[ia][k], f_total[k] * _dt)
|
|
470
|
-
ti.atomic_add(ti_vel[ib][k], -f_total[k] * _dt)
|
|
471
|
-
|
|
472
|
-
# Euler step + air drag + external force
|
|
473
|
-
for i in range(num_nodes):
|
|
474
|
-
# External force
|
|
475
|
-
for k in ti.static(range(dim)):
|
|
476
|
-
ti_vel[i][k] += ti_ext[i][k] * _dt
|
|
477
|
-
|
|
478
|
-
# Air drag
|
|
479
|
-
ti_vel[i] *= ti.exp(-_drag * _dt)
|
|
480
|
-
|
|
481
|
-
# Position update
|
|
482
|
-
for k in ti.static(range(dim)):
|
|
483
|
-
ti_pos[i][k] += ti_vel[i][k] * _dt
|
|
484
|
-
|
|
485
|
-
# Constraints: fixed nodes
|
|
486
|
-
for i in range(num_nodes):
|
|
487
|
-
if ti_fixed[i] == 1:
|
|
488
|
-
for k in ti.static(range(dim)):
|
|
489
|
-
ti_pos[i][k] = ti_pos0[i][k]
|
|
490
|
-
ti_vel[i][k] = 0.0
|
|
491
|
-
|
|
492
|
-
# Constraints: schedule nodes (ramped displacement)
|
|
493
|
-
for i in range(num_nodes):
|
|
494
|
-
if ti_sched_mask[i] == 1:
|
|
495
|
-
for k in ti.static(range(dim)):
|
|
496
|
-
ti_pos[i][k] = ti_pos0[i][k] + ti_sched[i][k] * _ramp
|
|
497
|
-
ti_vel[i][k] = 0.0
|
|
498
|
-
|
|
499
|
-
|
|
500
518
|
# Run loop
|
|
501
519
|
ti_dt[None] = dt
|
|
502
520
|
ti_dashpot[None] = dashpot
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "fibernet"
|
|
7
|
-
version = "4.0.
|
|
7
|
+
version = "4.0.4"
|
|
8
8
|
description = "A comprehensive fiber network generation, simulation, and ML toolkit for materials science research"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|