pub struct SpecializationRequirements { /* private fields */ }Expand description
Aggregate specialization requirements for all inputs.
§Examples
use tenferro_runtime::SpecializationRequirements;
assert_eq!(SpecializationRequirements::polymorphic(2).inputs().len(), 2);Implementations§
Source§impl SpecializationRequirements
impl SpecializationRequirements
Sourcepub fn new(inputs: impl Into<Vec<InputSpecializationRequirements>>) -> Self
pub fn new(inputs: impl Into<Vec<InputSpecializationRequirements>>) -> Self
Build aggregate requirements from validated input requirements.
§Examples
use tenferro_runtime::{InputSpecializationRequirements, SpecializationRequirements};
let input = InputSpecializationRequirements::builder().build()?;
assert_eq!(SpecializationRequirements::new(vec![input]).inputs().len(), 1);Sourcepub fn polymorphic(input_count: usize) -> Self
pub fn polymorphic(input_count: usize) -> Self
Build fully polymorphic requirements for input_count inputs.
§Examples
use tenferro_runtime::SpecializationRequirements;
assert_eq!(SpecializationRequirements::polymorphic(3).inputs().len(), 3);Sourcepub fn inputs(&self) -> &[InputSpecializationRequirements]
pub fn inputs(&self) -> &[InputSpecializationRequirements]
Return per-input requirements.
§Examples
use tenferro_runtime::SpecializationRequirements;
assert!(SpecializationRequirements::polymorphic(0).inputs().is_empty());Sourcepub fn project(
&self,
signature: &InputSignature,
) -> Result<SpecializationProjection, PrepareError>
pub fn project( &self, signature: &InputSignature, ) -> Result<SpecializationProjection, PrepareError>
Project a concrete input signature through these requirements.
§Examples
use tenferro_runtime::{InputSignature, SpecializationRequirements};
let projection = SpecializationRequirements::polymorphic(0)
.project(&InputSignature::new(Vec::new()))
?;
assert!(projection.inputs().is_empty());§Errors
Returns PrepareError::Specialization when the signature arity does
not match, a concrete axis is outside the actual rank, or a required
alignment class is unavailable.
Sourcepub fn strictly_widens(&self, other: &Self) -> bool
pub fn strictly_widens(&self, other: &Self) -> bool
Return whether self is strictly wider than other.
§Examples
use tenferro_runtime::{InputSpecializationRequirements, SpecializationRequirements};
let polymorphic = SpecializationRequirements::new(vec![
InputSpecializationRequirements::builder().build()?,
]);
let mut builder = InputSpecializationRequirements::builder();
builder.dtype(true);
let dtype = SpecializationRequirements::new(vec![builder.build()?]);
assert!(polymorphic.strictly_widens(&dtype));Trait Implementations§
Source§impl Clone for SpecializationRequirements
impl Clone for SpecializationRequirements
Source§fn clone(&self) -> SpecializationRequirements
fn clone(&self) -> SpecializationRequirements
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for SpecializationRequirements
impl Debug for SpecializationRequirements
Source§impl Hash for SpecializationRequirements
impl Hash for SpecializationRequirements
Source§impl PartialEq for SpecializationRequirements
impl PartialEq for SpecializationRequirements
Source§fn eq(&self, other: &SpecializationRequirements) -> bool
fn eq(&self, other: &SpecializationRequirements) -> bool
Tests for
self and other values to be equal, and is used by ==.impl Eq for SpecializationRequirements
impl StructuralPartialEq for SpecializationRequirements
Auto Trait Implementations§
impl Freeze for SpecializationRequirements
impl RefUnwindSafe for SpecializationRequirements
impl Send for SpecializationRequirements
impl Sync for SpecializationRequirements
impl Unpin for SpecializationRequirements
impl UnsafeUnpin for SpecializationRequirements
impl UnwindSafe for SpecializationRequirements
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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