All Downloads are FREE. Search and download functionalities are using the official Maven repository.

breeze.linalg.Broadcasted.scala Maven / Gradle / Ivy

The newest version!
package breeze.linalg

import breeze.linalg.support.CanSlice2

/**
 * TODO
 *
 * @author dlwh
 **/
trait Broadcasted[+T] extends NumericOps[Broadcasted[T]] {
  def underlying: T
}

trait BroadcastedLike[T, Self <: Broadcasted[T]] extends Broadcasted[T] with NumericOps[Self]


class Broadcaster

object * extends Broadcaster

object Broadcaster {
  implicit def canBroadcastSliceColumns[From, Slice1, To]
  (implicit cs2_:: : CanSlice2[From, Slice1, ::.type, To]): CanSlice2[From, Slice1, *.type, BroadcastedColumns[To]] = {
    new CanSlice2[From, Slice1, *.type, BroadcastedColumns[To]] {
      def apply(from: From, slice: Slice1, slice2: *.type): BroadcastedColumns[To] = {
        BroadcastedColumns(cs2_::(from, slice, ::))
      }
    }
  }


  implicit def canBroadcastColumns[From, Slice1]: CanSlice2[From, ::.type, *.type, BroadcastedColumns[From]] = {
    new CanSlice2[From, ::.type, *.type, BroadcastedColumns[From]] {
      def apply(from: From, slice: ::.type, slice2: *.type): BroadcastedColumns[From] = {
        BroadcastedColumns(from)
      }
    }
  }

  implicit def canBroadcastSliceRows[From, Slice1, To]
  (implicit cs2_:: : CanSlice2[From, ::.type, Slice1, To]): CanSlice2[From, *.type, Slice1, BroadcastedRows[To]] = {
    new CanSlice2[From, *.type, Slice1, BroadcastedRows[To]] {
      def apply(from: From, slice2: *.type, slice: Slice1): BroadcastedRows[To] = {
        BroadcastedRows(cs2_::(from, ::, slice))
      }
    }
  }


  implicit def canBroadcastRows[From, Slice1]: CanSlice2[From, *.type, ::.type, BroadcastedRows[From]] = {
    new CanSlice2[From, *.type, ::.type, BroadcastedRows[From]] {
      def apply(from: From,  slice2: *.type, slice: ::.type): BroadcastedRows[From] = {
        BroadcastedRows(from)
      }
    }
  }
}








© 2015 - 2025 Weber Informatics LLC | Privacy Policy