diff --git a/README.md b/README.md index 0f99394ae5dc..0ae6edebe117 100644 --- a/README.md +++ b/README.md @@ -87,5 +87,5 @@ The commercial product targets the needs specific to teams that build and run co ## Installing a pre-release Python SDK 1. Download the correct `.whl` from [GitHub Releases](https://github.com/rerun-io/rerun/releases) -2. Run `pip install rerun_sdk<...>.whl` (replace `<...>` with the actual filename) +2. Run `pip install rerun_sdk<…>.whl` (replace `<…>` with the actual filename) 3. Test it: `rerun --version` diff --git a/crates/re_analytics/src/pipeline_native.rs b/crates/re_analytics/src/pipeline_native.rs index 93f2eeddd44f..9f58f57a9796 100644 --- a/crates/re_analytics/src/pipeline_native.rs +++ b/crates/re_analytics/src/pipeline_native.rs @@ -61,7 +61,7 @@ impl Pipeline { // // Joining these threads is not a viable strategy for two reasons: // 1. We _never_ want to delay the shutdown process, analytics must never be in the way. - // 2. We need to deal with unexpected shutdowns anyway (crashes, SIGINT, SIGKILL, ...), + // 2. We need to deal with unexpected shutdowns anyway (crashes, SIGINT, SIGKILL, …), // and we do indeed. // // This is an at-least-once pipeline: in the worst case, unexpected shutdowns will lead to @@ -213,7 +213,7 @@ fn realtime_pipeline( return; } if let Err(err) = session_file.rewind() { - // We couldn't reset the session file... That one is a bit messy and will likely break + // We couldn't reset the session file… That one is a bit messy and will likely break // analytics for the entire duration of this session, but that really _really_ should // never happen. re_log::debug_once!("couldn't seek into analytics data file: {err}"); @@ -223,7 +223,7 @@ fn realtime_pipeline( let on_event = |session_file: &mut _, event| { re_log::trace!( %analytics_id, %session_id, - "appending event to current session file..." + "appending event to current session file…" ); if let Err(event) = append_event(session_file, &analytics_id, &session_id, event) { // We failed to append the event to the current session, so push it back at the end of diff --git a/crates/re_arrow_store/src/store.rs b/crates/re_arrow_store/src/store.rs index fd2dcfa141c3..ae6e11d645ff 100644 --- a/crates/re_arrow_store/src/store.rs +++ b/crates/re_arrow_store/src/store.rs @@ -133,7 +133,7 @@ impl std::ops::DerefMut for MetadataRegistry { } } -/// Used to cache auto-generated cluster cells (`[0]`, `[0, 1]`, `[0, 1, 2]`, ...) so that they +/// Used to cache auto-generated cluster cells (`[0]`, `[0, 1]`, `[0, 1, 2]`, …) so that they /// can be properly deduplicated on insertion. #[derive(Debug, Default, Clone)] pub struct ClusterCellCache(pub IntMap); @@ -200,7 +200,7 @@ pub struct DataStore { /// Only used to map `RowId`s to their original [`TimePoint`]s at the moment. pub(crate) metadata_registry: MetadataRegistry, - /// Used to cache auto-generated cluster cells (`[0]`, `[0, 1]`, `[0, 1, 2]`, ...) + /// Used to cache auto-generated cluster cells (`[0]`, `[0, 1]`, `[0, 1, 2]`, …) /// so that they can be properly deduplicated on insertion. pub(crate) cluster_cell_cache: ClusterCellCache, @@ -409,7 +409,7 @@ pub struct IndexedTable { /// buckets, in bytes. /// /// This is a best-effort approximation, adequate for most purposes (stats, - /// triggering GCs, ...). + /// triggering GCs, …). pub buckets_size_bytes: u64, } @@ -506,7 +506,7 @@ pub struct IndexedBucketInner { /// included, in bytes. /// /// This is a best-effort approximation, adequate for most purposes (stats, - /// triggering GCs, ...). + /// triggering GCs, …). /// /// We cache this because there can be many, many buckets. pub size_bytes: u64, diff --git a/crates/re_arrow_store/src/store_polars.rs b/crates/re_arrow_store/src/store_polars.rs index 780bf6f111cf..f3cc8f6a26c5 100644 --- a/crates/re_arrow_store/src/store_polars.rs +++ b/crates/re_arrow_store/src/store_polars.rs @@ -300,7 +300,7 @@ fn column_as_series( ListArray::::default_datatype(datatype.clone()), Offsets::try_from_lengths(comp_lengths).unwrap().into(), // It's possible that all rows being referenced were already garbage collected (or simply - // never existed to begin with), at which point `comp_rows` will be empty... and you can't + // never existed to begin with), at which point `comp_rows` will be empty… and you can't // call `concatenate` on an empty list without panicking. if comp_values.is_empty() { new_empty_array(datatype) diff --git a/crates/re_arrow_store/src/store_read.rs b/crates/re_arrow_store/src/store_read.rs index 5eb3b953635c..af98aecdc9da 100644 --- a/crates/re_arrow_store/src/store_read.rs +++ b/crates/re_arrow_store/src/store_read.rs @@ -104,7 +104,7 @@ impl DataStore { id = self.query_id.load(Ordering::Relaxed), timeline = ?timeline, entity = %ent_path, - "query started..." + "query started…" ); let timeless: Option> = self @@ -215,7 +215,7 @@ impl DataStore { entity = %ent_path, %primary, ?components, - "query started..." + "query started…" ); let cells = self @@ -405,7 +405,7 @@ impl DataStore { query = ?query, entity = %ent_path, ?components, - "query started..." + "query started…" ); let temporal = self @@ -694,14 +694,14 @@ impl IndexedBucket { ?components, timeline = %self.timeline.name(), time = self.timeline.typ().format(time), - "searching for primary & secondary cells..." + "searching for primary & secondary cells…" ); let time_row_nr = col_time.partition_point(|t| *t <= time.as_i64()) as i64; // The partition point is always _beyond_ the index that we're looking for. // A partition point of 0 thus means that we're trying to query for data that lives - // _before_ the beginning of time... there's nothing to be found there. + // _before_ the beginning of time… there's nothing to be found there. if time_row_nr == 0 { return None; } @@ -818,7 +818,7 @@ impl IndexedBucket { ?components, timeline = %self.timeline.name(), time_range = self.timeline.typ().format_range(time_range), - "searching for time & component cell numbers..." + "searching for time & component cell numbers…" ); let time_row_nr = col_time.partition_point(|t| *t < time_range.min.as_i64()) as u64; @@ -1005,7 +1005,7 @@ impl PersistentIndexedTable { %primary, ?components, timeless = true, - "searching for primary & secondary cells..." + "searching for primary & secondary cells…" ); // find the primary row number's row. diff --git a/crates/re_arrow_store/src/store_stats.rs b/crates/re_arrow_store/src/store_stats.rs index 51618e9c250d..9e2358d6f63b 100644 --- a/crates/re_arrow_store/src/store_stats.rs +++ b/crates/re_arrow_store/src/store_stats.rs @@ -368,7 +368,7 @@ impl IndexedBucketInner { /// stack and heap included, in bytes. /// /// This is a best-effort approximation, adequate for most purposes (stats, - /// triggering GCs, ...). + /// triggering GCs, …). #[inline] pub fn compute_size_bytes(&mut self) -> u64 { re_tracing::profile_function!(); diff --git a/crates/re_arrow_store/src/store_write.rs b/crates/re_arrow_store/src/store_write.rs index 098bdfc17d7e..89c9de4596e9 100644 --- a/crates/re_arrow_store/src/store_write.rs +++ b/crates/re_arrow_store/src/store_write.rs @@ -129,7 +129,7 @@ impl DataStore { .collect::>(), entity = %ent_path, components = ?cells.iter().map(|cell| cell.component_name()).collect_vec(), - "insertion started..." + "insertion started…" ); let cluster_cell_pos = cells @@ -155,7 +155,7 @@ impl DataStore { None } else { // The caller has not specified any cluster component, and so we'll have to generate - // one... unless we've already generated one of this exact length in the past, + // one… unless we've already generated one of this exact length in the past, // in which case we can simply re-use that cell. Some(self.generate_cluster_cell(num_instances)) diff --git a/crates/re_arrow_store/tests/internals.rs b/crates/re_arrow_store/tests/internals.rs index 87937c2563ab..813f0bcd0b07 100644 --- a/crates/re_arrow_store/tests/internals.rs +++ b/crates/re_arrow_store/tests/internals.rs @@ -18,7 +18,7 @@ use re_types::{components::InstanceKey, Loggable as _}; // is performance: getting the datastore into a pathological topology should show up in // integration query benchmarks. // -// In the current state of things, though, it is much easier to test for it that way... so we +// In the current state of things, though, it is much easier to test for it that way… so we // make an exception, for now... #[test] fn pathological_bucket_topology() { diff --git a/crates/re_build_info/src/build_info.rs b/crates/re_build_info/src/build_info.rs index 365dfe9519cb..ea3cde437d7b 100644 --- a/crates/re_build_info/src/build_info.rs +++ b/crates/re_build_info/src/build_info.rs @@ -7,7 +7,7 @@ /// /// There are a few other cases though, like /// - `git` is not installed -/// - the user downloaded rerun as a tarball and then imported via a `path = ...` import +/// - the user downloaded rerun as a tarball and then imported via a `path = …` import /// - others? #[derive(Copy, Clone, Debug)] pub struct BuildInfo { diff --git a/crates/re_build_tools/src/lib.rs b/crates/re_build_tools/src/lib.rs index ac8bba638851..dca6394595ea 100644 --- a/crates/re_build_tools/src/lib.rs +++ b/crates/re_build_tools/src/lib.rs @@ -36,9 +36,9 @@ pub use self::rebuild_detector::{ // // When working within the workspace, we can simply try and call `git` and we're done. // -// # Using an unpublished crate (e.g. `path = "..."` or `git = "..."` or `[patch.crates-io]`) +// # Using an unpublished crate (e.g. `path = "…"` or `git = "…"` or `[patch.crates-io]`) // -// In these cases we may or may not have access to the workspace (e.g. a `path = ...` import likely +// In these cases we may or may not have access to the workspace (e.g. a `path = …` import likely // will, while a crate patch won't). // // This is not an issue however, as we can simply try and see what we get. diff --git a/crates/re_components/src/tensor.rs b/crates/re_components/src/tensor.rs index d1ecb2497e4c..b1012a8d0c81 100644 --- a/crates/re_components/src/tensor.rs +++ b/crates/re_components/src/tensor.rs @@ -438,8 +438,8 @@ impl Tensor { match shape_short.len() { 1 => { - // Special case: Nx1(x1x1x...) tensors are treated as Nx1 gray images. - // Special case: Nx1(x1x1x...) tensors are treated as Nx1 gray images. + // Special case: Nx1(x1x1x…) tensors are treated as Nx1 gray images. + // Special case: Nx1(x1x1x…) tensors are treated as Nx1 gray images. if self.shape.len() >= 2 { Some([shape_short[0].size, 1, 1]) } else { diff --git a/crates/re_data_store/src/store_db.rs b/crates/re_data_store/src/store_db.rs index c532ac718419..1412953c8ac4 100644 --- a/crates/re_data_store/src/store_db.rs +++ b/crates/re_data_store/src/store_db.rs @@ -102,7 +102,7 @@ impl EntityDb { DataCell::from_arrow_empty(cell.component_name(), cell.datatype().clone()); // NOTE(cmc): The fact that this inserts data to multiple entity paths using a - // single `RowId` is... interesting. Keep it in mind. + // single `RowId` is… interesting. Keep it in mind. let row = DataRow::from_cells1( row_id, row.entity_path.clone(), @@ -134,7 +134,7 @@ impl EntityDb { DataCell::from_arrow_empty(component_path.component_name, data_type.clone()); // NOTE(cmc): The fact that this inserts data to multiple entity paths using a - // single `RowId` is... interesting. Keep it in mind. + // single `RowId` is… interesting. Keep it in mind. let row = DataRow::from_cells1( row_id, component_path.entity_path.clone(), diff --git a/crates/re_log_encoding/src/stream_rrd_from_http.rs b/crates/re_log_encoding/src/stream_rrd_from_http.rs index 93e05b73d72f..251d0caa9641 100644 --- a/crates/re_log_encoding/src/stream_rrd_from_http.rs +++ b/crates/re_log_encoding/src/stream_rrd_from_http.rs @@ -112,7 +112,7 @@ mod web_event_listener { /// /// From javascript you can send an rrd using: /// ``` ignore - /// var rrd = new Uint8Array(...); // Get an RRD from somewhere + /// var rrd = new Uint8Array(…); // Get an RRD from somewhere /// window.postMessage(rrd, "*") /// ``` pub fn stream_rrd_from_event_listener(on_msg: Arc) { diff --git a/crates/re_log_types/src/data_cell.rs b/crates/re_log_types/src/data_cell.rs index 57713b7d903e..f109c1f4e998 100644 --- a/crates/re_log_types/src/data_cell.rs +++ b/crates/re_log_types/src/data_cell.rs @@ -42,7 +42,7 @@ pub type DataCellResult = ::std::result::Result; /// /// ## Layout /// -/// A cell is an array of component instances: `[C, C, C, ...]`. +/// A cell is an array of component instances: `[C, C, C, …]`. /// /// Consider this example: /// ```ignore @@ -133,7 +133,7 @@ pub struct DataCellInner { /// costly operation. pub(crate) size_bytes: u64, - /// A uniformly typed list of values for the given component type: `[C, C, C, ...]` + /// A uniformly typed list of values for the given component type: `[C, C, C, …]` /// /// Includes the data, its schema and probably soon the component metadata /// (e.g. the `ComponentName`). @@ -332,12 +332,12 @@ impl DataCell { /// /// Useful when dealing with cells of different lengths in context that don't allow for it. /// - /// * Before: `[C, C, C, ...]` + /// * Before: `[C, C, C, …]` /// * After: `ListArray[ [C, C, C, C] ]` // // TODO(#1696): this shouldn't be public, need to make it private once the store has been // patched to use datacells directly. - // TODO(cmc): effectively, this returns a `DataColumn`... think about that. + // TODO(cmc): effectively, this returns a `DataColumn`… think about that. #[doc(hidden)] #[inline] pub fn to_arrow_monolist(&self) -> Box { diff --git a/crates/re_log_types/src/data_row.rs b/crates/re_log_types/src/data_row.rs index f19e01fd0044..43d0c62873a2 100644 --- a/crates/re_log_types/src/data_row.rs +++ b/crates/re_log_types/src/data_row.rs @@ -171,7 +171,7 @@ impl std::ops::DerefMut for RowId { /// ## Layout /// /// A row is a collection of cells where each cell must either be empty (a clear), unit-lengthed -/// (a splat) or `num_instances` long (standard): `[[C1, C1, C1], [], [C3], [C4, C4, C4], ...]`. +/// (a splat) or `num_instances` long (standard): `[[C1, C1, C1], [], [C3], [C4, C4, C4], …]`. /// /// Consider this example: /// ```ignore diff --git a/crates/re_log_types/src/data_table.rs b/crates/re_log_types/src/data_table.rs index 00b00c93b8c6..a760cf454aa5 100644 --- a/crates/re_log_types/src/data_table.rs +++ b/crates/re_log_types/src/data_table.rs @@ -207,9 +207,9 @@ impl std::ops::DerefMut for TableId { /// (standard): /// ```text /// [ -/// [[C1, C1, C1], [], [C3], [C4, C4, C4], ...], -/// [None, [C2, C2], [], [C4], ...], -/// [None, [C2, C2], [], None, ...], +/// [[C1, C1, C1], [], [C3], [C4, C4, C4], …], +/// [None, [C2, C2], [], [C4], …], +/// [None, [C2, C2], [], None, …], /// ... /// ] /// ``` @@ -698,8 +698,8 @@ impl DataTable { /// Transforms an array of unit values into a list of unit arrays. /// - /// * Before: `[C, C, C, C, C, ...]` - /// * After: `ListArray[ [C], [C], [C], [C], [C], ... ]` + /// * Before: `[C, C, C, C, C, …]` + /// * After: `ListArray[ [C], [C], [C], [C], [C], … ]` // NOTE: keeping that one around, just in case. #[allow(dead_code)] fn unit_values_to_unit_lists(array: Box) -> Box { @@ -795,8 +795,8 @@ impl DataTable { /// Create a list-array out of a flattened array of cell values. /// - /// * Before: `[C, C, C, C, C, C, C, ...]` - /// * After: `ListArray[ [[C, C], [C, C, C], None, [C], [C], ...] ]` + /// * Before: `[C, C, C, C, C, C, C, …]` + /// * After: `ListArray[ [[C, C], [C, C, C], None, [C], [C], …] ]` fn data_to_lists( column: &[Option], data: Box, diff --git a/crates/re_log_types/src/data_table_batcher.rs b/crates/re_log_types/src/data_table_batcher.rs index 824ec66d8067..19b9b1d258fb 100644 --- a/crates/re_log_types/src/data_table_batcher.rs +++ b/crates/re_log_types/src/data_table_batcher.rs @@ -418,7 +418,7 @@ fn batching_thread( // table.sort(); // NOTE: This can only fail if all receivers have been dropped, which simply cannot happen - // as long the batching thread is alive... which is where we currently are. + // as long the batching thread is alive… which is where we currently are. tx_table.send(table).ok(); acc.reset(); diff --git a/crates/re_query/tests/archetype_range_tests.rs b/crates/re_query/tests/archetype_range_tests.rs index 9585781a5559..586b3122a1a1 100644 --- a/crates/re_query/tests/archetype_range_tests.rs +++ b/crates/re_query/tests/archetype_range_tests.rs @@ -304,25 +304,25 @@ fn timeless_range() { store.insert_row(&row).unwrap(); } - // ┌───────────┬──────────┬────────┬─────────────────┬────────────────────┬──────────────────────┬────────────────────────────┐ - // │ insert_id ┆ frame_nr ┆ entity ┆ rerun.colorrgba ┆ rerun.instance_key ┆ rerun.row_id ┆ rerun.point2d │ - // ╞═══════════╪══════════╪════════╪═════════════════╪════════════════════╪══════════════════════╪════════════════════════════╡ - // │ 2 ┆ null ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302243... ┆ [{1.0,2.0}, {3.0,4.0}] │ - // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ - // │ 4 ┆ null ┆ point ┆ [4278190080] ┆ [1] ┆ [{167328063302246... ┆ null │ - // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ - // │ 8 ┆ null ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302249... ┆ [{10.0,20.0}, {30.0,40.0}] │ - // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ - // │ 1 ┆ 123 ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302236... ┆ [{1.0,2.0}, {3.0,4.0}] │ - // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ - // │ 3 ┆ 123 ┆ point ┆ [4278190080] ┆ [1] ┆ [{167328063302245... ┆ null │ - // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ - // │ 5 ┆ 223 ┆ point ┆ [4278190080] ┆ [0] ┆ [{167328063302247... ┆ null │ - // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ - // │ 6 ┆ 223 ┆ point ┆ [4278190080] ┆ [0] ┆ [{167328063302248... ┆ null │ - // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ - // │ 7 ┆ 323 ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302248... ┆ [{10.0,20.0}, {30.0,40.0}] │ - // └───────────┴──────────┴────────┴─────────────────┴────────────────────┴──────────────────────┴────────────────────────────┘ + // ┌───────────┬──────────┬────────┬─────────────────┬────────────────────┬────────────────────┬────────────────────────────┐ + // │ insert_id ┆ frame_nr ┆ entity ┆ rerun.colorrgba ┆ rerun.instance_key ┆ rerun.row_id ┆ rerun.point2d │ + // ╞═══════════╪══════════╪════════╪═════════════════╪════════════════════╪════════════════════╪════════════════════════════╡ + // │ 2 ┆ null ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302243… ┆ [{1.0,2.0}, {3.0,4.0}] │ + // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ + // │ 4 ┆ null ┆ point ┆ [4278190080] ┆ [1] ┆ [{167328063302246… ┆ null │ + // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ + // │ 8 ┆ null ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302249… ┆ [{10.0,20.0}, {30.0,40.0}] │ + // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ + // │ 1 ┆ 123 ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302236… ┆ [{1.0,2.0}, {3.0,4.0}] │ + // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ + // │ 3 ┆ 123 ┆ point ┆ [4278190080] ┆ [1] ┆ [{167328063302245… ┆ null │ + // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ + // │ 5 ┆ 223 ┆ point ┆ [4278190080] ┆ [0] ┆ [{167328063302247… ┆ null │ + // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ + // │ 6 ┆ 223 ┆ point ┆ [4278190080] ┆ [0] ┆ [{167328063302248… ┆ null │ + // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ + // │ 7 ┆ 323 ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302248… ┆ [{10.0,20.0}, {30.0,40.0}] │ + // └───────────┴──────────┴────────┴─────────────────┴────────────────────┴────────────────────┴────────────────────────────┘ // --- First test: `(timepoint1, timepoint3]` --- diff --git a/crates/re_query/tests/range_tests.rs b/crates/re_query/tests/range_tests.rs index 7c4c0cc552d9..2b4897794c47 100644 --- a/crates/re_query/tests/range_tests.rs +++ b/crates/re_query/tests/range_tests.rs @@ -303,25 +303,25 @@ fn timeless_range() { store.insert_row(&row).unwrap(); } - // ┌───────────┬──────────┬────────┬─────────────────┬────────────────────┬──────────────────────┬────────────────────────────┐ - // │ insert_id ┆ frame_nr ┆ entity ┆ rerun.colorrgba ┆ rerun.instance_key ┆ rerun.row_id ┆ rerun.point2d │ - // ╞═══════════╪══════════╪════════╪═════════════════╪════════════════════╪══════════════════════╪════════════════════════════╡ - // │ 2 ┆ null ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302243... ┆ [{1.0,2.0}, {3.0,4.0}] │ - // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ - // │ 4 ┆ null ┆ point ┆ [4278190080] ┆ [1] ┆ [{167328063302246... ┆ null │ - // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ - // │ 8 ┆ null ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302249... ┆ [{10.0,20.0}, {30.0,40.0}] │ - // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ - // │ 1 ┆ 123 ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302236... ┆ [{1.0,2.0}, {3.0,4.0}] │ - // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ - // │ 3 ┆ 123 ┆ point ┆ [4278190080] ┆ [1] ┆ [{167328063302245... ┆ null │ - // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ - // │ 5 ┆ 223 ┆ point ┆ [4278190080] ┆ [0] ┆ [{167328063302247... ┆ null │ - // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ - // │ 6 ┆ 223 ┆ point ┆ [4278190080] ┆ [0] ┆ [{167328063302248... ┆ null │ - // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ - // │ 7 ┆ 323 ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302248... ┆ [{10.0,20.0}, {30.0,40.0}] │ - // └───────────┴──────────┴────────┴─────────────────┴────────────────────┴──────────────────────┴────────────────────────────┘ + // ┌───────────┬──────────┬────────┬─────────────────┬────────────────────┬────────────────────┬────────────────────────────┐ + // │ insert_id ┆ frame_nr ┆ entity ┆ rerun.colorrgba ┆ rerun.instance_key ┆ rerun.row_id ┆ rerun.point2d │ + // ╞═══════════╪══════════╪════════╪═════════════════╪════════════════════╪════════════════════╪════════════════════════════╡ + // │ 2 ┆ null ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302243… ┆ [{1.0,2.0}, {3.0,4.0}] │ + // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ + // │ 4 ┆ null ┆ point ┆ [4278190080] ┆ [1] ┆ [{167328063302246… ┆ null │ + // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ + // │ 8 ┆ null ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302249… ┆ [{10.0,20.0}, {30.0,40.0}] │ + // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ + // │ 1 ┆ 123 ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302236… ┆ [{1.0,2.0}, {3.0,4.0}] │ + // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ + // │ 3 ┆ 123 ┆ point ┆ [4278190080] ┆ [1] ┆ [{167328063302245… ┆ null │ + // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ + // │ 5 ┆ 223 ┆ point ┆ [4278190080] ┆ [0] ┆ [{167328063302247… ┆ null │ + // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ + // │ 6 ┆ 223 ┆ point ┆ [4278190080] ┆ [0] ┆ [{167328063302248… ┆ null │ + // ├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤ + // │ 7 ┆ 323 ┆ point ┆ null ┆ [0, 1] ┆ [{167328063302248… ┆ [{10.0,20.0}, {30.0,40.0}] │ + // └───────────┴──────────┴────────┴─────────────────┴────────────────────┴────────────────────┴────────────────────────────┘ // --- First test: `(timepoint1, timepoint3]` --- diff --git a/crates/re_renderer/README.md b/crates/re_renderer/README.md index 4a29f3dd9f97..7f828c66c2e8 100644 --- a/crates/re_renderer/README.md +++ b/crates/re_renderer/README.md @@ -15,7 +15,7 @@ Some key features: * Built with multiple independent views/cameras in mind * WebGL compatible quality tier allows use in the browser without WebGPU support * Hot shader reloading -* ... and more to come! +* … and more to come! Goals & philosophy: * Handle fully dynamic data diff --git a/crates/re_renderer/build.rs b/crates/re_renderer/build.rs index 1e4e2f4aaed3..8b8d7008872f 100644 --- a/crates/re_renderer/build.rs +++ b/crates/re_renderer/build.rs @@ -131,7 +131,7 @@ fn main() { // actually turn out _not_ to be canonicalized in practice, which of course will break // hermeticity checks later down the line. // - // So: canonicalize them all, just in case... ¯\_(ツ)_/¯ + // So: canonicalize them all, just in case… ¯\_(ツ)_/¯ let manifest_path = std::fs::canonicalize(manifest_path).unwrap(); let shader_dir = std::fs::canonicalize(shader_dir).unwrap(); @@ -212,7 +212,7 @@ pub fn init() { // The only way to make hermeticity checks work for top-level files would be to read all // Rust files and parse all `include_file!` statements in those, so that we actually // know what those external top-level files are to begin with. - // Not worth it... for now. + // Not worth it… for now. if is_release || targets_wasm { check_hermeticity(&manifest_path, entry.path()); // will fail if not hermetic } diff --git a/crates/re_renderer/src/file_resolver.rs b/crates/re_renderer/src/file_resolver.rs index d481f480aa65..8216b7bb4a50 100644 --- a/crates/re_renderer/src/file_resolver.rs +++ b/crates/re_renderer/src/file_resolver.rs @@ -612,7 +612,7 @@ impl FileResolver { } // The imported path looks relative. Try to join it with the importer's and see if - // that leads somewhere... if it does: import that. + // that leads somewhere… if it does: import that. { let path = cwd.as_ref().join(&path).clean(); if self.fs.exists(&path) { diff --git a/crates/re_renderer/src/renderer/lines.rs b/crates/re_renderer/src/renderer/lines.rs index 686d6819b5a5..ef8ffe4ffecf 100644 --- a/crates/re_renderer/src/renderer/lines.rs +++ b/crates/re_renderer/src/renderer/lines.rs @@ -14,7 +14,7 @@ //! [people](https://gamedev.net/forums/topic/702292-performance-fastest-quad-drawing/5406023/) //! [point](https://www.reddit.com/r/vulkan/comments/le74sr/why_gpu_instancing_is_slow_for_small_meshes/) //! [out](https://www.reddit.com/r/vulkan/comments/47kfve/instanced_rendering_performance/) -//! [...](https://www.reddit.com/r/opengl/comments/q7yikr/how_to_draw_several_quads_through_instancing/). +//! […](https://www.reddit.com/r/opengl/comments/q7yikr/how_to_draw_several_quads_through_instancing/). //! //! Instead, we use a single (un-instanced) triangle list draw call and use the vertex id to orient ourselves in the vertex shader //! (e.g. the index of the current quad is `vertex_idx / 6` etc.). @@ -88,10 +88,10 @@ //! Again, we keep all the geometry calculating logic in the vertex shader. //! //! For all batches, independent whether we use caps or not our topology is as follow: -//! _________________________________________________________ -//! \ | |\ | |\ -//! \ | ... n strip quads ... | \ | ... m strip quads ... | \ -//! \|_________________________|__\|_______________________|__\ +//! _________________________________________________ +//! \ | |\ | |\ +//! \ | … n strip quads … | \ | … m strip quads … | \ +//! \|_____________________|__\|___________________|__\ //! (start cap triangle only) (start+end triangle) (end triangle only) //! //! diff --git a/crates/re_renderer/src/view_builder.rs b/crates/re_renderer/src/view_builder.rs index ce8a685da9bc..e9471b8430e1 100644 --- a/crates/re_renderer/src/view_builder.rs +++ b/crates/re_renderer/src/view_builder.rs @@ -582,7 +582,7 @@ impl ViewBuilder { // // TODO(andreas): Formalize this somehow. // Maybe just every processor should have its own and gets abstract information from the view builder to set it up? - // ... or we change this whole thing again so slice things differently: + // … or we change this whole thing again so slice things differently: // 0: Truly view Global: Samplers, time, point conversions, etc. // 1: Phase global (camera & projection goes here) // 2: Specific renderer diff --git a/crates/re_sdk/src/recording_stream.rs b/crates/re_sdk/src/recording_stream.rs index c34eb5e08aef..198900558096 100644 --- a/crates/re_sdk/src/recording_stream.rs +++ b/crates/re_sdk/src/recording_stream.rs @@ -736,7 +736,7 @@ impl RecordingStream { }; // TODO(#2074): Adding a timeline to something timeless would suddenly make it not - // timeless... so for now it cannot even have a tick :/ + // timeless… so for now it cannot even have a tick :/ // // NOTE: We're incrementing the current tick still. let tick = this.tick.fetch_add(1, std::sync::atomic::Ordering::Relaxed); diff --git a/crates/re_space_view_spatial/src/space_camera_3d.rs b/crates/re_space_view_spatial/src/space_camera_3d.rs index 8af2b76233a4..262ade0c72d1 100644 --- a/crates/re_space_view_spatial/src/space_camera_3d.rs +++ b/crates/re_space_view_spatial/src/space_camera_3d.rs @@ -67,7 +67,7 @@ impl SpaceCamera3D { // we need to pre-transform the data from the user-defined `pinhole_view_coordinates` to the required // `image_view_coordinates`. // - // TODO(...): When Pinhole is an archetype instead of a component, `pinhole.project` should do this + // TODO(…): When Pinhole is an archetype instead of a component, `pinhole.project` should do this // internally. let point_in_image_unprojected = image_view_coordinates().from_other(&self.pinhole_view_coordinates) * point_in_cam; diff --git a/crates/re_time_panel/src/lib.rs b/crates/re_time_panel/src/lib.rs index 3550e150fff2..57ccc352c4b0 100644 --- a/crates/re_time_panel/src/lib.rs +++ b/crates/re_time_panel/src/lib.rs @@ -194,8 +194,8 @@ impl TimePanel { // |timeline | // ------------------------------------ // tree |streams | - // | . . . ... | - // | ... . | + // | . . . . . . | + // | . . . . | self.next_col_right = ui.min_rect().left(); // next_col_right will expand during the call diff --git a/crates/re_types/source_hash.txt b/crates/re_types/source_hash.txt index 3663b7e71001..9b45a5fbbb9b 100644 --- a/crates/re_types/source_hash.txt +++ b/crates/re_types/source_hash.txt @@ -1,4 +1,4 @@ # This is a sha256 hash for all direct and indirect dependencies of this crate's build script. # It can be safely removed at anytime to force the build script to run again. # Check out build.rs to see how it's computed. -a6cd9c542af65eaa30d0a55d409f937ef4a51b2d51bd5576b6997f01319ef113 +6d8235375501eef76b6c7aa2ed3443684299c23260987911db6522c0dd2afbef diff --git a/crates/re_types_builder/src/codegen/python.rs b/crates/re_types_builder/src/codegen/python.rs index 850cc6546de3..c5b69fda5476 100644 --- a/crates/re_types_builder/src/codegen/python.rs +++ b/crates/re_types_builder/src/codegen/python.rs @@ -174,7 +174,7 @@ fn write_file(filepath: &Utf8PathBuf, mut source: String) { // NOTE: Formatting code requires both `black` and `ruff` to be in $PATH, but only for contributors, // not end users. // Even for contributors, `black` and `ruff` won't be needed unless they edit some of the - // .fbs files... and even then, this won't crash if they are missing, it will just fail to pass + // .fbs files… and even then, this won't crash if they are missing, it will just fail to pass // the CI! re_log::warn_once!( "Failed to format Python code: {err}. Make sure `black` and `ruff` are installed." @@ -992,7 +992,7 @@ fn quote_import_clauses_from_field(field: &ObjectField) -> Option { } else if from.starts_with("rerun.components") { "from .. import components".to_owned() } else if from.starts_with("rerun.archetypes") { - // NOTE: This is assuming importing other archetypes is legal... which whether it is or + // NOTE: This is assuming importing other archetypes is legal… which whether it is or // isn't for this code generator to say. "from .. import archetypes".to_owned() } else if from.is_empty() { @@ -1197,7 +1197,7 @@ fn quote_type_from_element_type(typ: &ElementType) -> String { } else if from.starts_with("rerun.components") { format!("components.{class}") } else if from.starts_with("rerun.archetypes") { - // NOTE: This is assuming importing other archetypes is legal... which whether it is or + // NOTE: This is assuming importing other archetypes is legal… which whether it is or // isn't for this code generator to say. format!("archetypes.{class}") } else if from.is_empty() { diff --git a/crates/re_types_builder/src/codegen/rust/api.rs b/crates/re_types_builder/src/codegen/rust/api.rs index df44a53cb8f6..ecc6ba3d0b9d 100644 --- a/crates/re_types_builder/src/codegen/rust/api.rs +++ b/crates/re_types_builder/src/codegen/rust/api.rs @@ -29,7 +29,7 @@ use crate::{ use super::{arrow::quote_fqname_as_type_path, util::string_from_quoted}; // TODO(cmc): it'd be nice to be able to generate vanilla comments (as opposed to doc-comments) -// once again at some point (`TokenStream` strips them)... nothing too urgent though. +// once again at some point (`TokenStream` strips them)… nothing too urgent though. // --- @@ -179,7 +179,7 @@ fn create_files( let mut acc = TokenStream::new(); // NOTE: `TokenStream`s discard whitespacing information by definition, so we need to - // inject some of our own when writing to file... while making sure that don't inject + // inject some of our own when writing to file… while making sure that don't inject // random spacing into doc comments that look like code! let mut tokens = obj.tokens.into_iter(); diff --git a/crates/re_types_builder/src/codegen/rust/deserializer.rs b/crates/re_types_builder/src/codegen/rust/deserializer.rs index 621ebed2b653..e0edc804d074 100644 --- a/crates/re_types_builder/src/codegen/rust/deserializer.rs +++ b/crates/re_types_builder/src/codegen/rust/deserializer.rs @@ -132,7 +132,7 @@ pub fn quote_arrow_deserializer( let #data_dst = { // NOTE: `arrays_by_name` is a runtime collection of all of the input's // payload's struct fields, while `#field_name` is the field we're - // looking for at comptime... there's no guarantee it's actually there at + // looking for at comptime… there's no guarantee it's actually there at // runtime! if !arrays_by_name.contains_key(#field_name) { return Err(crate::DeserializationError::missing_struct_field( @@ -227,7 +227,7 @@ pub fn quote_arrow_deserializer( let #data_dst = { // NOTE: `data_src_arrays` is a runtime collection of all of the // input's payload's union arms, while `#i` is our comptime union - // arm counter... there's no guarantee it's actually there at + // arm counter… there's no guarantee it's actually there at // runtime! if #i >= #data_src_arrays.len() { // By not returning an error but rather defaulting to an empty diff --git a/crates/rerun/src/run.rs b/crates/rerun/src/run.rs index 73df0dc535ed..4c33589f98bf 100644 --- a/crates/rerun/src/run.rs +++ b/crates/rerun/src/run.rs @@ -226,7 +226,7 @@ impl CallSource { /// Run the Rerun application and return an exit code. /// -/// This is used by the `rerun` binary and the Rerun Python SDK via `python -m rerun [args...]`. +/// This is used by the `rerun` binary and the Rerun Python SDK via `python -m rerun [args…]`. /// /// This installs crash panic and signal handlers that sends analytics on panics and signals. /// These crash reports includes a stacktrace. We make sure the file paths in the stacktrace diff --git a/design/batching.md b/design/batching.md index be45ae74c7b7..55c1b633aca3 100644 --- a/design/batching.md +++ b/design/batching.md @@ -15,7 +15,7 @@ This redesign and the major changes involved also present an opportunity to addr - Try and keep note of all the good ideas that came up during discussions around batching - Gather all the information needed for a future technical blog post about the datastore -TL;DR: A big braindump that covers a lot of the discussions and design thoughts that have been thrown around during the last few weeks, just to make sure it doesn't all get lost to time... I'm sure I've missed most of it though. +TL;DR: A big braindump that covers a lot of the discussions and design thoughts that have been thrown around during the last few weeks, just to make sure it doesn't all get lost to time… I'm sure I've missed most of it though. --- @@ -69,7 +69,7 @@ The proposed implementation aims to address several issues and provide numerous - Resolution of splat issues that currently require dedicated events/rows to function. - Resolution of the dreaded `MsgId` mismatch issues. - Replacement of the current hackish and partially broken garbage collection mechanism with a more viable one. -- Should massively improve the speed of range queries (even more so for our scenes that span the entire time-range, e.g.: text, plot...). +- Should massively improve the speed of range queries (even more so for our scenes that span the entire time-range, e.g.: text, plot…). - Should (likely) vastly improve the loading speed of .rrd files (even more so on the web). Finally, these changes are expected to significantly simplify the DataStore codebase by completely eliminating component tables and their corresponding buckets. @@ -425,34 +425,34 @@ pub struct DataCell { impl DataCell { /// Builds a new `DataCell` out of a uniform list of native component values. - pub fn from_native(values: Vec) -> Self { /* ... */ } + pub fn from_native(values: Vec) -> Self { /* … */ } /// Builds a new `DataCell` from an arrow array. // // TODO(cmc): We shouldn't have to specify the component name separately, this should be part of the // metadata by using an extension. - pub fn from_arrow(name: ComponentName, values: Box) -> Self { /* ... */ } + pub fn from_arrow(name: ComponentName, values: Box) -> Self { /* … */ } /// Builds an empty `DataCell` from an arrow datatype. // // TODO(cmc): We shouldn't have to specify the component name separately, this should be part of the // metadata by using an extension. - pub fn from_datatype(name: ComponentName, datatype: DataType) -> Self { /* ... */ } + pub fn from_datatype(name: ComponentName, datatype: DataType) -> Self { /* … */ } /// Builds an empty `DataCell` from a component type. // // TODO(cmc): do keep in mind there's a future not too far away where components become a // `(component, type)` tuple kinda thing. - pub fn from_component() -> Self { /* ... */ } + pub fn from_component() -> Self { /* … */ } /// Returns the contents of the cell as an arrow array. - pub fn as_arrow(&self) -> Box { /* ... */ } + pub fn as_arrow(&self) -> Box { /* … */ } /// Returns the contents of the cell as vector of native components. // // TODO(cmc): We could potentially keep the original native component values if the cell was created // using `from_native`. - pub fn as_components(&self) -> Vec { /* ... */ } + pub fn as_components(&self) -> Vec { /* … */ } } // TODO(cmc): Some convenient `From` implementations etc @@ -494,7 +494,7 @@ impl DataRow { entity_path: EntityPath, num_instances: u32, cells: Vec, - ) -> Self { /* ... */ } + ) -> Self { /* … */ } /// Append a cell to an existing row. /// @@ -502,7 +502,7 @@ impl DataRow { /// - Trying to append a cell which contains neither `0`, `1` or `num_instances`. /// - Trying to append the same component type more than once. /// - Etc. - pub fn append_cell(&mut self, cell: DataCell) -> Result<()> { /* ... */ } + pub fn append_cell(&mut self, cell: DataCell) -> Result<()> { /* … */ } } // TODO(cmc): Some convenient `From` implementations etc @@ -537,12 +537,12 @@ struct DataTable { impl DataTable { /// Builds a new `DataTable` out of a list of [`DataRow`]s. - pub fn from_rows(rows: Vec) -> Self { /* ... */ } + pub fn from_rows(rows: Vec) -> Self { /* … */ } /// Append a row to an existing table. /// /// Returns an error if the row is not compatible with the table. - pub fn append_row(&mut self, row: DataRow) -> Result<()> { /* ... */ } + pub fn append_row(&mut self, row: DataRow) -> Result<()> { /* … */ } } // TODO(cmc): Some convenient `From` implementations etc @@ -680,7 +680,7 @@ Lastly, we inject the `BatchId` as metadata. At this point we might want to sort the batch by `(event_id, entity_path)`, which will greatly improve data locality once it sits in the store (see storage section below). -That's also an opportunity to pre-compact the data: if two rows share the same timepoints with different components, we could potentially merge them together... that's a bit more controversial though as it means either dropping some `EventId`s, or supporting multiple `EventId`s for a single event. +That's also an opportunity to pre-compact the data: if two rows share the same timepoints with different components, we could potentially merge them together… that's a bit more controversial though as it means either dropping some `EventId`s, or supporting multiple `EventId`s for a single event. One last thing that needs to be taken care of before actually sending the data is compression / dictionary-encoding of some kind. We already have `zstd` in place for that. @@ -769,7 +769,7 @@ We also actually deserialize the `event_id` and `num_instances` columns into nat ### Read path -The major difference is we now directly return arrow buffers (which are really arrow slices under the hood), which means `get` queries are gone... which means latest-at queries should get a bit faster and range queries should get much faster. +The major difference is we now directly return arrow buffers (which are really arrow slices under the hood), which means `get` queries are gone… which means latest-at queries should get a bit faster and range queries should get much faster. Everything else is the same: grab the right index (`EntityPath` + `Timeline`), binsearch for the right bucket, walk backwards if you need to, and you're done. @@ -815,7 +815,7 @@ Doing the above results in something functional and technically correct.. but th Not only we do not want to lose the original batching, ideally we would want to improve on it, i.e. batch even more aggressively when we're writing to disk! We want an extra step in there: accumulate rows of data until we reach a given size, and then craft a single `LogMsg` out of that. -This will make the resulting .rrd file both faster to load (there's some fixed overhead for each `LogMsg`, especially on web...) and faster to explore (improved cache locality in the store). +This will make the resulting .rrd file both faster to load (there's some fixed overhead for each `LogMsg`, especially on web…) and faster to explore (improved cache locality in the store). ## Implementation plan @@ -831,7 +831,7 @@ We should already be 95% of the way there at this point. 1. Move `DataStore` sanity checks and formatting tools to separate files `store.rs` is supposed to be the place where one can get an overview of all the datastructures involved in the store, except it has slowly become a mess over time and is now pretty much unreadable. -1. Replace `MsgBundle` & `ComponentBundle` with the new types (`DataCell`, `DataRow`, `DataTable`, `EventId`, `BatchId`...) +1. Replace `MsgBundle` & `ComponentBundle` with the new types (`DataCell`, `DataRow`, `DataTable`, `EventId`, `BatchId`…) No actual batching features nor any kind of behavior changes of any sort: just define the new types and use them everywhere. 1. Pass entity path as a column rather than as metadata @@ -840,7 +840,7 @@ Replace the current entity_path that is passed in the metadata map with an actua 1. Implement explicit number of instances Introduce a new column for `num_instances`, integrate it in the store index and expose it in the store APIs. -1. Fix splats all around (rs sdk, py sdk, re_query...) +1. Fix splats all around (rs sdk, py sdk, re_query…) Update the SDKs and `re_query` to properly make use of the new explicit `num_instances`. 1. Get rid of component buckets altogether @@ -986,7 +986,7 @@ The terminology is very subtle. - `InstanceKey` is indeed a component, and so it is always passed as a list, which we colloquially refer to as "the instance keys". - a "component instance", or just "instance", is the name we give to any single value in a component cell: ``` -[C, C, ...] +[C, C, …] ^ ^ | | | | diff --git a/design/blueprint_store.md b/design/blueprint_store.md index b57f4535a920..6aaadc43425f 100644 --- a/design/blueprint_store.md +++ b/design/blueprint_store.md @@ -106,18 +106,18 @@ The assorted objects used in blueprint construction are: - `Container`: A view that specifies layout of sub-views (interface only) - `HorizontalLayout` - `VerticalLayout` - - ... additional layouts + - … additional layouts - `SpaceView`: An actual view of data in a coordinate space. - `View2D` - `View3D` - `ViewTimeSeries` - - ... additional space-views + - … additional space-views - `Data`: A query that builds archetypes to draw in the space view - `Auto`: A query to automatically build archetypes from an entity path - `Points2D`: A query to build a Points2D archetype - `Points3D`: A query to build a Points3D archetype - `Image`: A query to build an Image archetype - - ... additional typed archetype queries + - … additional typed archetype queries - `DataGroup`: A group of archetype queries with potentially shared overrides or defaults. - `RecursiveAuto`: A special DataGroup that recursively includes `Auto` queries for all entities under a given path. @@ -192,7 +192,7 @@ For example: /space_views /e514aac1 .space_view_class: SpaceViewClass::View3D - .eye: View3d::Eye(...) + .eye: View3d::Eye(…) .contents: [BlueprintId("/data_groups/b117f5b9"), BlueprintId("/data_groups/8ee750a4")] /e9f36821 ... @@ -206,8 +206,8 @@ For example: .contents: [EntityPath(BlueprintStore, "/static/7db713c0")] /static /7db713c0 - .positions: [...] - .colors: [...] + .positions: […] + .colors: […] ``` Note that this means the blueprint store is mostly organized flatly with the hierarchy being represented by diff --git a/docs/content/concepts/spaces-and-transforms.md b/docs/content/concepts/spaces-and-transforms.md index 2bc85e2ff559..34179b03bee6 100644 --- a/docs/content/concepts/spaces-and-transforms.md +++ b/docs/content/concepts/spaces-and-transforms.md @@ -48,7 +48,7 @@ There are 4 parent/child entity relationships represented in this hierarchy. - `world` -> `world/robot` - `world/robot` -> `world/robot/observed_features` -The call: `rr.log_transform3d("world/robot", ...)` only applies to the relationship: `world` -> `world/robot` because the +The call: `rr.log_transform3d("world/robot", …)` only applies to the relationship: `world` -> `world/robot` because the logged transform (`world/robot`) describes the relationship between the entity and its _parent_ (`world`). All other relationships are considered to be an identity transform. diff --git a/docs/content/getting-started/logging-python.md b/docs/content/getting-started/logging-python.md index b7baae196573..f73a977e299c 100644 --- a/docs/content/getting-started/logging-python.md +++ b/docs/content/getting-started/logging-python.md @@ -197,7 +197,7 @@ Even so, if you look at your [Timeline View](../reference/viewer/timeline.md) ri Unfortunately, the logging time isn't particularly helpful to us in this case: we can't have our beads animate depending on the logging time, else they would move at different speeds depending on the performance of the logging process! For that, we need to introduce our own custom timeline that uses a deterministic clock which we control. -Rerun has rich support for time: whether you want concurrent or disjoint timelines, out-of-order insertions or even data that lives _outside_ of the timeline(s)... you'll find a lot of flexibility in there. +Rerun has rich support for time: whether you want concurrent or disjoint timelines, out-of-order insertions or even data that lives _outside_ of the timeline(s)… you'll find a lot of flexibility in there. Let's add our custom timeline: ```python diff --git a/docs/content/getting-started/logging-rust.md b/docs/content/getting-started/logging-rust.md index fac1dbfeee20..f2c1b199fbba 100644 --- a/docs/content/getting-started/logging-rust.md +++ b/docs/content/getting-started/logging-rust.md @@ -198,7 +198,7 @@ Even so, if you look at your [Timeline View](../reference/viewer/timeline.md) ri Unfortunately, the logging time isn't particularly helpful to us in this case: we can't have our beads animate depending on the logging time, else they would move at different speeds depending on the performance of the logging process! For that, we need to introduce our own custom timeline that uses a deterministic clock which we control. -Rerun has rich support for time: whether you want concurrent or disjoint timelines, out-of-order insertions or even data that lives _outside_ of the timeline(s)... you'll find a lot of flexibility in there. +Rerun has rich support for time: whether you want concurrent or disjoint timelines, out-of-order insertions or even data that lives _outside_ of the timeline(s)… you'll find a lot of flexibility in there. Let's add our custom timeline: ```rust diff --git a/docs/content/howto/ros2-nav-turtlebot.md b/docs/content/howto/ros2-nav-turtlebot.md index 308670619fb3..a964c999e84e 100644 --- a/docs/content/howto/ros2-nav-turtlebot.md +++ b/docs/content/howto/ros2-nav-turtlebot.md @@ -429,7 +429,7 @@ if node_data: # Log this node's mesh, if it has one. mesh = cast(trimesh.Trimesh, scene.geometry.get(node_data[1])) if mesh: - # ... extract some color information + # … extract some color information rr.log_mesh( path, mesh.vertices, diff --git a/examples/rust/template/src/main.rs b/examples/rust/template/src/main.rs index b82da327fb85..a511e6d7cf96 100644 --- a/examples/rust/template/src/main.rs +++ b/examples/rust/template/src/main.rs @@ -7,7 +7,7 @@ fn main() -> Result<(), Box> { let _ = rec_stream; - // ... example code + // … example code rerun::native_viewer::show(storage.take())?; diff --git a/scripts/lint.py b/scripts/lint.py index 121d0b746d3e..1fc93c58d406 100755 --- a/scripts/lint.py +++ b/scripts/lint.py @@ -25,6 +25,7 @@ nb_prefix = re.compile(r"nb_") else_return = re.compile(r"else\s*{\s*return;?\s*};") explicit_quotes = re.compile(r'[^(]\\"\{\w*\}\\"') # looks for: \"{foo}\" +ellipsis = re.compile(r"[^.]\.\.\.[^\-.0-9a-zA-Z]") def lint_line(line: str, file_extension: str = "rs") -> str | None: @@ -44,6 +45,10 @@ def lint_line(line: str, file_extension: str = "rs") -> str | None: if " github " in line: return "It's 'GitHub', not 'github'" + if file_extension in ("md", "rs"): + if ellipsis.search(line): + return "Use … instead of ..." + if "FIXME" in line: return "we prefer TODO over FIXME"