glowstick This crate makes working with tensors in Rust safe, easy, and fun by tracking their shapes in the type system! Example usage with candle: use candle :: { DType , Device } ; use glowstick :: { Shape2 , num :: { U1 , U2 } , debug_tensor } ; use glowstick_candle :: { Tensor , matmul } ; let a : Tensor < Shape2 < U2 , U1 > > = Tensor :: zeros ( DType :: F32 , & Device :: Cpu ) . expect ( "tensor A" ) ; let b : Tensor < Shape2 < U1 , U2 > > = Tensor :: zeros ( DType :: F32 , & Device :: Cpu ) . expect ( "tensor B" ) ; let c = matmul ! ( a , b ) . expect ( "matmul" ) ; //debug_tensor!(c); // Compile error: [glowstick shape]: (RANK<_2>, (DIM<_2>, DIM<_2>)) Several operations are available: use candle :: { DType , Device } ; use glowstick :: { num :: { U0 , U1 , U2 , U4 , U3 , U64 , U5 , U8 } , Shape2 , Shape4 } ; use glowstick_candle :: { Tensor , conv2d , squeeze , unsqueeze , narrow , reshape , transpose , flatten , broadcast_add } ; # [ allow ( unused ) ] use glowstick :: debug_tensor ; let my_tensor : Tensor < Shape2 < U8 , U8 > > = Tensor :: zeros ( DType :: F32 , & Device :: Cpu ) . expect ( "tensor" ) ; //debug_tensor!(my_tensor); // Compile error: [glowstick shape]: (RANK<_2>, (DIM<_8>, DIM<_8>)) let reshaped = reshape ! ( my_tensor , [ U64 ] ) . expect ( "reshape" ) ; //debug_tensor!(reshaped); // [glowstick shape]: (RANK<_1>, (DIM<_64>)) let unsqueezed = unsqueeze ! ( reshaped , U0 , U2 ) . expect ( "unsqueeze" ) ; //debug_tensor!(unsqueezed); // [glowstick shape]: (RANK<_3>, (DIM<_1>, DIM<_64>, DIM<_1>)) let squeezed = squeeze ! ( unsqueezed , U0 , U2 ) . expect ( "squeeze" ) ; //debug_tensor!(squeezed); // [glowstick shape]: (RANK<_1>, (DIM<_64>)) let narrowed = narrow ! ( squeezed , U0 : [ U8 , U5 ] ) . expect ( "narrow" ) ; //debug_tensor!(narrowed); // [glowstick shape]: (RANK<_1>, (DIM<_5>)) let expanded = broadcast_add ! ( Tensor :: < Shape4 < U2 , U5 , U2 , U1 >> :: zeros ( DType :: F32 , & Device :: Cpu ) . unwrap ( ) , narrowed ) . expect ( "a...
First seen: 2025-06-09 16:18
Last seen: 2025-06-10 01:20