ci: wire up CI, fix no_std build, fix stale package names in scripts
CI / test (push) Failing after 15s
CI / test (push) Failing after 15s
- Add .gitea/workflows/ci.yml running scripts/ci-test.sh (fmt, clippy,
test, no_std check) on push/PR to main.
- Fix stale rustyhdf5-py/rustyhdf5-format package names in
ci-test.sh/check-nostd.sh, which had been silently no-op'ing those
checks (cargo warns but doesn't fail on an unknown --exclude/-p
target).
- With those checks actually running, fix the real issues they surface:
- clippy: useless_conversion in chunked_write.rs, byte_char_slices in
global_heap.rs/object_header.rs.
- cargo fmt: apply formatting across the workspace (whitespace only).
- no_std (thumbv7em-none-eabihf) build errors in clawhdf5-format:
core::sync::atomic::AtomicU64 doesn't exist on that target (no
native 64-bit atomics) — switch profiling.rs's counters to
portable-atomic, which falls back to a CAS-based emulation there
and is a no-op wrapper elsewhere. Add missing alloc imports for
Box (filters.rs), Vec (filters_szip.rs), and format! (dict_encoding.rs)
on no_std paths. Replace f64::powi (std/libm-only) with a small
local exponentiation-by-squaring helper in the scale-offset filter.
This commit is contained in:
@@ -379,7 +379,13 @@ impl HnswIndex {
|
||||
|
||||
// Phase 1: greedy descent from the top down to node_level + 1.
|
||||
for layer in (node_level + 1..=ep_level).rev() {
|
||||
ep = greedy_closest(&self.vectors, &self.graph[layer], &self.vectors[id], ep, self.metric);
|
||||
ep = greedy_closest(
|
||||
&self.vectors,
|
||||
&self.graph[layer],
|
||||
&self.vectors[id],
|
||||
ep,
|
||||
self.metric,
|
||||
);
|
||||
}
|
||||
|
||||
// Phase 2: search and connect from min(node_level, ep_level) down to 0.
|
||||
@@ -1012,11 +1018,14 @@ fn get_attr_i64(attrs: &[(String, AttrValue)], name: &str) -> Result<i64, Format
|
||||
/// Like [`get_attr_i64`] but returns `None` when the attribute is absent or not
|
||||
/// an integer, instead of erroring. Used for optional/back-compat attributes.
|
||||
fn get_attr_i64_opt(attrs: &[(String, AttrValue)], name: &str) -> Option<i64> {
|
||||
attrs.iter().find(|(n, _)| n == name).and_then(|(_, v)| match v {
|
||||
AttrValue::I64(val) => Some(*val),
|
||||
AttrValue::U64(val) => Some(*val as i64),
|
||||
_ => None,
|
||||
})
|
||||
attrs
|
||||
.iter()
|
||||
.find(|(n, _)| n == name)
|
||||
.and_then(|(_, v)| match v {
|
||||
AttrValue::I64(val) => Some(*val),
|
||||
AttrValue::U64(val) => Some(*val as i64),
|
||||
_ => None,
|
||||
})
|
||||
}
|
||||
|
||||
fn get_attr_string(attrs: &[(String, AttrValue)], name: &str) -> Result<String, FormatError> {
|
||||
|
||||
Reference in New Issue
Block a user