Changelog#
All notable changes to this project will be documented on this page.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning, with one slight but important difference:
before version
1.0.0, an increment in the MINOR version number indicates a breaking change, and an increment in the PATCH version number indicates either a new feature or a bug fix (see the v0.1.0 milestone);after version
1.0.0, this project follows standard semantic versioning (see the v1.0.0 milestone).
Unreleased#
Added#
Improved Sionna-compatible XML scene parser to support top-level
<bsdf type="diffuse">materials in addition to nested structures, enabling support for OSM buildings and other XML formats (by @jeertmans, in PR #444).Added fallback to black color
[0.0, 0.0, 0.0]when material<rgb>elements are missing, with appropriate warnings logged (by @jeertmans, in PR #444).Added the
TriangleMesh.clip,TriangleMesh.keep_all_within, andTriangleMesh.keep_any_withinmethods to support clipping and filtering triangle meshes by axis-aligned bounds (by @jeertmans, in PR #445).
Chore#
Added tests for the improved Sionna-compatible XML scene parser using OSM building data, ensuring correct parsing of materials and colors (by @jeertmans, in PR #444).
0.8.1#
Changed#
Added lighting by default when using Plotly for plotting meshes, see PR #412 (by @jeertmans, in PR #432).
Chore#
0.8.0#
Added#
Added
set_backendfunction to easily switch between different plotting backends, without using the more verboseset_defaultsfunction (by @jeertmans, in PR #387).Improved type annotations for
TriangleMesh.atindexing methods (get,set,add,mul,apply, and the newsub,div,pow,min,max): replaced**kwargs: Anywith**kwargs: Unpack[_GetIndexingKwargs]typing.TypedDict, and typed thevaluesargument asFloat[ArrayLike, "3|1|"](by @copilot and @jeertmans, in PR #420).Added
TriangleMesh.atindexing methodssub,div,pow,min, andmaxas counterparts to JAX’sndarray.at[...].subtract,divide,power,min, andmax(by @copilot and @jeertmans, in PR #420).
Changed#
Changed default options for plotting with Plotly (
aspectmode="data"andflatshading=Trueon meshes) so that Plotly is now a much better option for large 3D scenes. Edited the tutorial accordingly, showing the improved visualization and the importance of lighting (by @jeertmans, in PR #412).TriangleMesh.atnow raises aValueErrorif the array index passed toat[...]is not at most one-dimensional. This is a breaking-change (by @copilot and @jeertmans, in PR #420).
Chore#
v0.8.0 changes are now displayed on the changelog page. Users looking for the latest released changes should look at the stable version of the documentation (by @jeertmans, in PR #391).
Renamed
jaxtypedPytest marker torequire_typechecker(by @jeertmans, in PR #422).Added
require_no_typecheckerPytest marker to automatically skip tests that cannot work when type checking is enabled (by @jeertmans, in PR #422).
Fixed#
Fixed missing type annotations for
assemble_pathsin the documentation, caused by the@no_type_checkdecorator suppressingtyping.get_type_hints()(by @jeertmans).
0.7.0#
Added#
Added
polarizationparameter todeepmimo.export(by @jeertmans, in PR #356).Changed the type annotation of
backendfromstrtoLiteralString. This may be reverted in the future istysupport inferring literal string from equality tests (by @jeertmans, in PR #292).Added the
TriangleMesh.shufflemethod to easily test set-like properties of machine learning models (by @jeertmans, in PR #220).
Chore#
Removed PyOpenGL from macOS dependencies as it is no longer needed to fix VisPy not finding DLL files (by @jeertmans, in PR #345).
Fix anchor link to JAX’s documentation (by @jeertmans, in PR #346).
Simplified
deepmimo.exportto reduce redundant code (by @jeertmans, in PR #356).Changed type checker from
pyrighttoty(by @jeertmans, in PR #292).Slightly improved code coverage (by @jeertmans, in PR #362).
Bumped minimum required JAX version to
0.8.1to use newjax.jitsyntax as the use offunctools.partialnow raises errors fromty, see Issue jax-ml/jax#34697 (by @jeertmans, in PR #370).Added a generic type variable for
mask(by @jeertmans, in PR #349).
Fixed#
Restricted
ipykernelversion to<7to avoid compatibility issues withjupyter_rfb, see Issue vispy/jupyter_rfb#121 (by @jeertmans, in PR #347).Pinned
sphinxto<9to avoid breakage withsphinx-autodoc-typehintsand the Sphinx v9 release (by @jeertmans, in PR #352).Fixed
getmethod when indexing mesh withTriangleMesh.atto not drop duplicate indices (by @jeertmans, in PR #362).
Removed#
Removed
confidenceattribute inPathsas it is now replaced bymask, possibly holding floating point values. This is a breaking-change (by @jeertmans, in PR #349).Removed
jnp.asarrayfield converters from all classes, as it would lead to confusing type hints mismatches between the annotations and the actual types accepted by the classes’__init__method. This is a breaking-change (by @jeertmans, in PR #383).
0.6.2#
Changed#
Changed
fermat_path_on_linear_objectsto leverage thefpt-jaxlibrary [4] for better performance and faster gradient computations (by @jeertmans, in PR #335).
Chore#
Updated CI to fix builds on Windows, and also explicitly build free-threaded wheels (by @jeertmans, in PR #336).
0.6.1#
Chore#
Bumped minimum required JAX version to
0.7.2as JAX0.7.0and0.7.1contained bugs (by @jeertmans, in PR #325).Added Python 3.14 and 3.14t to the list of tested Python versions (by @jeertmans, in PR #323).
Update the macOS runners (by @jeertmans, in PR #323).
Updated PyPI’s Trove classifiers to list Python 3.14 and free-threaded Python (by @jeertmans, in PR #323).
0.6.0#
Added#
Added
update_defaults, see below (by @jeertmans, in PR #312).Added the possibility to pass
Nonefor thebatch_sizeargument ofrays_intersect_any_triangle,triangles_visible_from_vertices, andfirst_triangles_hit_by_rays, to indicate that no batching should be performed, i.e., all operations are executed in a singlejax.vmapcall (by @jeertmans, in PR #310).Added a
batch_sizeargument toTriangleScene.compute_pathsto allow users to specify the size of the batch used for ray-triangle intersection tests, see above (by @jeertmans, in PR #310).Added the
DiGraph.filter_by_maskto disconnected nodes based on a mask (by @jeertmans, in PR #322).Added a
disconnect_inactive_trianglestoTriangleScene.compute_pathsto allow reducing the number of path candidates, at the cost of potential recompilations (by @jeertmans, in PR #322).Added an
active_verticesargument toviewing_frustumto allow users to specify which vertices are active (by @jeertmans, in PR #322).
Changed#
Changed
DiGraph.disconnect_nodesto raise anIndexErrorwhen the node indices are out of bounds (by @jeertmans, in PR #322).Changed the behavior of
first_triangles_hit_by_raysto select the triangle with the closest center to the ray origin when two or more triangles are hit at the same distance (by @jeertmans, in PR #322).Changed the behavior of
first_triangles_hit_by_raysto include the triangle centers in the world vertices when computing the viewing frustum (by @jeertmans, in PR #322).
Chore#
Rephrased the documentation of methods returning shallow copies to clarify that they return new instances, and do not necessarily copy inner arrays (by @jeertmans, in PR #307).
Fixed plotting issue in the coherence example notebook, where the scene in the second row was not plotted correctly, see below (by @jeertmans, in PR #312).
Added
jaxtypedPytest marker to automatically skip tests that require jaxtyping when it is disabled (by @jeertmans, in PR #321).Bumped minimum required JAX version to
0.7.0to usewrap_negative_indices=Falsewithat(by @jeertmans, in PR #310).Dropped Python 3.10 because we need JAX 0.7.0. This is a breaking-change (by @jeertmans, in PR #310).
Fixed#
Fixed the update of default values in context managers to actually merge the new values with the existing ones, instead of replacing them, allowing for the nesting multiple context manager without any surprise (by @jeertmans, in PR #312).
Fixed a typo in
viewing_frustumthat led to incorrect behavior (by @jeertmans, in PR #322).Fixed a typo in Conventions where the azimuth angle was incorrectly described to be in \([0^\circ, 360^\circ]\) instead of \([-180^\circ, 180^\circ]\) (by @jeertmans, in PR #322).
Perf#
Changed naive indexing by customized
atindexing to enable niche optimizations (by @jeertmans, in PR #308).
Removed#
Removed
differt.utils.sorted_array2,differt.utils.dot,differt.geometry.pairwise_cross,differt.geometry.TriangleMesh.sortto reduce the size of the API by limiting it to RT-related functionalities. This is a breaking-change (by @jeertmans, in PR #309).
0.5.0#
Chore#
Fixed typos left in documents with the help of Copilot (for most) and LanguageTool (for some) (by @jeertmans, in PR #304).
Fixed#
Fixed a shape (and possibly
dtype) issue in the fast path ofconsecutive_vertices_are_on_same_side_of_mirrors, that would raise an error when trying to stack arrays inTriangleScene.compute_pathswith a non-Nonevalue forsmoothing_factor(by @jeertmans, in PR #303).
Removed#
Removed
parallelkeyword argument inTriangleScene.compute_pathsas it was no longer supported, and its presence increased the code complexity. Executing code on multiple devices should be automatically handled byjax.jit, or manually specified by the end-user. This is a breaking-change (by @jeertmans, in PR #305).
0.4.1#
Added#
Added
batch_sizeoptional keyword argument torays_intersect_any_triangle,triangles_visible_from_vertices, andfirst_triangles_hit_by_rays, see below (by @jeertmans, in PR #300).
Chore#
Refactored
image_methodandfermat_path_on_linear_objectsto usejnp.vectorizeinstead of a custom but complex chain of calls tojax.vmap, reducing the code complexity while not affecting performance (by @jeertmans, in PR #298).Ignored lints PLR091* globally, instead of per-case (by @jeertmans, in PR #298).
Improved code coverage for ray-triangle intersection tests (by @jeertmans, in PR #301).
Refactored benchmarks to reduce the number of benchmarks and avoid depending on JIT compilation (by @jeertmans, in PR #301).
Fixed#
Fixed VisPy plotting utilities by returning early if the data to be drawn is empty, avoiding potential issue when calling
view.camera.set_range(by @jeertmans, in PR #300).
Perf#
Improved performance for ray-triangle intersection tests (i.e.,
rays_intersect_any_triangle,triangles_visible_from_vertices, andfirst_triangles_hit_by_rays) by implementing a custom, batched, scan-like check. This avoids having to loop over all triangles (or rays) sequentially while preventing out-of-memory issues. A newbatch_sizeargument is now available for these functions, allowing users to customize the size of each batch (by @jeertmans, in PR #300).
0.4.0#
Added#
Added
sample_objectstoTriangleMesh.sampleto facilitate sampling realistic sub-meshes. The new option is compatible with bothby_masking=Falseandby_masking=True, offering ajax.jit-compatible sampling method with the latter (by @jeertmans, in PR #297).
Changed#
Renamed
TriangleMesh.num_objectstoTriangleMesh.num_primitivesto avoid possible confusion withTriangleMesh.object_bounds, resulting in a breaking change (by @jeertmans, in PR #297).
Chore#
Ignored lints C901 and PLR0912 globally, instead of per-case (by @jeertmans, in PR #297).
0.3.1#
Added#
Implemented
method = 'hybrid'forTriangleScene.compute_paths(by @jeertmans, in PR #295).
Chore#
Reduced computational time of higher-order RT tests by leveraging visibility matrices (by @jeertmans, in PR #294).
Fixed#
Fixed typo (missing
f-string prefix) in error message insidedeepmimo.export(by @jeertmans, in PR #294).
0.3.0#
Added#
Added
gil_used = falseto PyO3 module to support free-threaded Python builds (by @jeertmans, in PR #293).
Chore#
Improved testing on free-threaded Python and optional plotting backends (by @jeertmans, in PR #293).
Removed#
Removed
differt.utils.minimize, see PR #283, resulting in a breaking change (by @jeertmans, in PR #291).
0.2.0#
Added#
Added
TriangleMesh.maskattribute to allow triangles to be selected using a mask instead of dropping the inactive ones. This is useful for generating multiple sub-meshes of a mesh without changing the memory allocated to each sub-mesh, thus enabling efficient stacking (by @jeertmans, in PR #287).Added a new
by_masking: bool = Falsekeyword-only parameter toTriangleMesh.sampleto allow sampling sub-meshes by setting the mask array, instead of dropping triangles (by @jeertmans, in PR #287).Added a new optional
active_triangles: Array | None = Noneparameter torays_intersect_any_triangle,triangles_visible_from_vertices, andfirst_triangles_hit_by_rays(by @jeertmans, in PR #287).Added
__version_info__tuple todiffertanddiffert_core(by @jeertmans, in PR #288).
Changed#
Simplified
assemble_paths’s signature to assume a 2- (TX-RX) or 3-argument (TX-PATH-RX) form is actually sufficient, resulting in a breaking change (by @jeertmans, in PR #289).
Fixed#
Fixed
__all__indiffertto re-export__version__and notVERSION(by @jeertmans, in PR #288).
0.1.2#
Changed#
Deprecated
differt.utils.minimizein favor of specialized implementations, see PR #283 for motivation and migration information (by @jeertmans, in PR #283).Changed the default
optimizerused byfermat_path_on_linear_objectsto beoptax.lbfgs(by @jeertmans, in PR #272).
Fixed#
Fixed
ValueErrorraised when usingparallelmode inTriangleScene.compute_pathswithjax>=0.6by disabling it (see Issue #280). This is a soft breaking change as it will raise a warning (by @jeertmans, in PR #281). Using JAX v0.6 (and above) is now allowed again.
0.1.1#
Added#
Added support for
confidenceattribute inPaths.mask_duplicate_objects(by @jeertmans, in PR #272).Added the
Paths.shapeclass attribute (by @jeertmans, in PR #267). The following equality should always hold:paths.reshape(*batch).shape = batch.Added the
differt.pluginspackage anddiffert.plugins.deepmimomodule (by @jeertmans, in PR #267).Added export utility to the DeepMIMO format (by @jeertmans, in PR #267).
Added
from_mitsubaandfrom_sionnamethods to theTriangleSceneclass (by @jeertmans, in PR #267).
Chore#
Documented how to build from sources without Rust, i.e., without building
differt_core(by @jeertmans, in PR #269).Fixed link issues (
jnp.{minimum,maximum}and false-positive on DOI check) (by @jeertmans, in PR #274).
Fixed#
Fixed potential
IndexErrorinTriangleScene.num_{transmitters,receivers}when the TX/RX arrays have incorrect shape (by @jeertmans, in PR #272).Fixed potential
IndexErrorinPaths.num_valid_pathswhen theobjectsarray has its last axis being of zero size (by @jeertmans, in PR #273).
0.1.0#
This version is the first important release of DiffeRT with the aim to provide a stable and documented tool to be used by the scientific community.
Features present in this version are various, and cover way more than what is described in the initial draft of the v0.1.0 milestone.
Chore#
Created this changelog to document notable changes (by @jeertmans, in PR #252).