summaryrefslogtreecommitdiff
path: root/candle-core/src/variable.rs
diff options
context:
space:
mode:
Diffstat (limited to 'candle-core/src/variable.rs')
-rw-r--r--candle-core/src/variable.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/candle-core/src/variable.rs b/candle-core/src/variable.rs
new file mode 100644
index 00000000..67675765
--- /dev/null
+++ b/candle-core/src/variable.rs
@@ -0,0 +1,30 @@
+// Variables are wrappers around tensors that can be modified, they are typically used for holding
+// weights and being modified by gradient descent.
+// They are not cloneable by default to avoid having too many potential writers on the data.
+// We also do not expose a public way to create variables as this would break the invariant that
+// the tensor within a variable is actually with `is_variable` set to `true`.
+use crate::Tensor;
+
+/// A variable is a wrapper around a tensor, however variables can have their content modified
+/// whereas tensors are immutable.
+#[derive(Debug)]
+pub struct Variable(Tensor);
+
+impl std::ops::Deref for Variable {
+ type Target = Tensor;
+
+ fn deref(&self) -> &Self::Target {
+ self.0.as_ref()
+ }
+}
+
+impl Variable {
+ pub fn as_tensor(&self) -> &Tensor {
+ &self.0
+ }
+
+ /// Consumes this `Variable` and return the underlying tensor.
+ pub fn into_inner(self) -> Tensor {
+ self.0
+ }
+}