Skip to main content

FeatureHistogram

Struct FeatureHistogram 

Source
pub struct FeatureHistogram<'a> {
    pub data: &'a [UnsafeCell<Bin>],
}
Expand description

Feature Histogram using UnsafeCell for concurrent mutation.

Fields§

§data: &'a [UnsafeCell<Bin>]

Reference to the histogram data.

Implementations§

Source§

impl<'a> FeatureHistogram<'a>

Source

pub fn new(hist: &'a mut [Bin]) -> Self

Create a new FeatureHistogram from a mutable slice of bins.

Source

pub unsafe fn update( &self, feature: &[u16], sorted_grad: &[f32], sorted_hess: Option<&[f32]>, index: &[usize], )

Updates the histogram data based on the provided gradients and Hessian values.

§Arguments
  • feature: A slice of bin indices for each data element.
  • sorted_grad: The full gradient array (absolute indexing via index).
  • sorted_hess: An optional full Hessian array (absolute indexing via index).
  • index: A slice of original indices for the data elements in this node.
§Safety

This function is unsafe because it uses get_unchecked and as_mut().unwrap_unchecked(), which bypass Rust’s standard safety checks. The caller must ensure the following:

  1. The feature slice must be a valid bin index for every element.
  2. All indices in the index slice must be within the bounds of the feature slice.
  3. The sorted_grad slice must cover all indices referenced by index.
  4. If sorted_hess is Some, it must also cover all indices referenced by index.
  5. The internal self.data structure must not be modified externally while this function is running.
  6. Each element in self.data must contain a valid Some value that can be mutated.
Source

pub unsafe fn update_cuts(&self, cuts: &[f64])

Updates the cut-off values for the histogram bins.

This function is unsafe because…

§Safety

The cuts slice must be sorted in ascending order. The length of cuts must be exactly one less than the number of bins. Calling this function with an unsorted slice or an incorrect length could lead to incorrect binning logic and potential data corruption.

Trait Implementations§

Source§

impl<'a> Clone for FeatureHistogram<'a>

Source§

fn clone(&self) -> FeatureHistogram<'a>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for FeatureHistogram<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a> Copy for FeatureHistogram<'a>

Source§

impl<'a> Send for FeatureHistogram<'a>

Source§

impl<'a> Sync for FeatureHistogram<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for FeatureHistogram<'a>

§

impl<'a> !RefUnwindSafe for FeatureHistogram<'a>

§

impl<'a> Unpin for FeatureHistogram<'a>

§

impl<'a> UnsafeUnpin for FeatureHistogram<'a>

§

impl<'a> !UnwindSafe for FeatureHistogram<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.