Struct Schedule

Source
pub struct Schedule {
    pub ueffective: NaiveDateTime,
    pub utermination: NaiveDateTime,
    pub frequency: Frequency,
    pub ufront_stub: Option<NaiveDateTime>,
    pub uback_stub: Option<NaiveDateTime>,
    pub calendar: Calendar,
    pub accrual_adjuster: Adjuster,
    pub payment_adjuster: Adjuster,
    pub uschedule: Vec<NaiveDateTime>,
    pub aschedule: Vec<NaiveDateTime>,
    pub pschedule: Vec<NaiveDateTime>,
}
Expand description

A generic financial schedule with regular contiguous periods and, possibly, stubs.

§Notes

  • A regular schedule has a Frequency that perfectly divides its ueffective and utermination dates, and has no stub dates.
  • An irregular schedule has a ufront_stub and/or uback_stub dates defining periods at the boundary of the schedule which are not a standard length of time defined by the Frequency. However, a regular schedule must exist between those interior dates.

Fields§

§ueffective: NaiveDateTime

The unadjusted start date of the schedule.

§utermination: NaiveDateTime

The unadjusted end date of the schedule.

§frequency: Frequency

The scheduling Frequency for regular periods.

§ufront_stub: Option<NaiveDateTime>

The optional, unadjusted front stub date.

§uback_stub: Option<NaiveDateTime>

The optional, unadjusted back stub date.

§calendar: Calendar

The Calendar for accrual and payment date adjustment.

§accrual_adjuster: Adjuster

The Adjuster to adjust the unadjusted schedule dates to adjusted period accrual dates.

§payment_adjuster: Adjuster

The Adjuster to adjust the adjusted schedule dates to period payment dates.

§uschedule: Vec<NaiveDateTime>

The vector of unadjusted period accrual dates.

§aschedule: Vec<NaiveDateTime>

The vector of adjusted period accrual dates.

§pschedule: Vec<NaiveDateTime>

The vector of payment dates associated with the adjusted accrual dates.

Implementations§

Source§

impl Schedule

Source

pub fn try_new_defined( ueffective: NaiveDateTime, utermination: NaiveDateTime, frequency: Frequency, ufront_stub: Option<NaiveDateTime>, uback_stub: Option<NaiveDateTime>, calendar: Calendar, accrual_adjuster: Adjuster, payment_adjuster: Adjuster, ) -> Result<Self, PyErr>

Create a Schedule from well defined unadjusted dates and a Frequency.

§Notes

If provided arguments do not define a valid schedule pattern then an error is returned.

§Examples

This is a valid schedule with a long back stub and regular monthly periods.

let s = Schedule::try_new_defined(
    ndt(2024, 1, 3), ndt(2024, 4, 15),                  // ueffective, utermination
    Frequency::Months{number:1, roll: Some(RollDay::Day(3))}, // frequency
    None, Some(ndt(2024, 3, 3)),                        // ufront_stub, uback_stub
    Cal::new(vec![], vec![5,6]).into(),                 // calendar
    Adjuster::ModifiedFollowing{},                      // accrual_adjuster
    Adjuster::BusDaysLagSettle(3),                      // payment_adjuster
);
assert_eq!(s.uschedule, vec![ndt(2024, 1, 3), ndt(2024, 2, 3), ndt(2024, 3, 3), ndt(2024, 4, 15)]);
assert_eq!(s.aschedule, vec![ndt(2024, 1, 3), ndt(2024, 2, 5), ndt(2024, 3, 4), ndt(2024, 4, 15)]);
assert_eq!(s.pschedule, vec![ndt(2024, 1, 8), ndt(2024, 2, 8), ndt(2024, 3, 7), ndt(2024, 4, 18)]);

This is not a valid schedule since there are no defined stubs and the dates do not align with the RollDay.

let s = Schedule::try_new_defined(
    ndt(2024, 1, 6), ndt(2024, 4, 6),                  // ueffective, utermination
    Frequency::Months{number:1, roll: Some(RollDay::Day(3))}, // frequency
    None, None,                                         // ufront_stub, uback_stub
    Cal::new(vec![], vec![5,6]).into(),                 // calendar
    Adjuster::ModifiedFollowing{},                      // accrual_adjuster
    Adjuster::BusDaysLagSettle(3),                      // payment_adjuster
);
assert!(s.is_err());
Source

pub fn try_new_inferred( effective: NaiveDateTime, termination: NaiveDateTime, frequency: Frequency, front_stub: Option<NaiveDateTime>, back_stub: Option<NaiveDateTime>, calendar: Calendar, accrual_adjuster: Adjuster, payment_adjuster: Adjuster, eom: bool, stub_inference: Option<StubInference>, ) -> Result<Schedule, PyErr>

Create a Schedule using inference if some of the parameters are not well defined.

§Notes

If all parameters are well defined and dates are definitively known in their unadjusted forms then the try_new_defined method should be used instead.

This method provides the additional features below:

  • Unadjusted date inference: if adjusted dates are given then a neighbourhood of dates will be sub-sampled to determine any possibilities for unadjusted dates defined by the accrual_adjuster and calendar. Only the dates at either side of the regular schedule component are explored. Stub date boundaries are used as provided.
  • Frequency inference: any Frequency that contains optional elements, e.g. no RollDay, will be explored for all possible alternatives that results in the most likely schedule, guided by the eom parameter.
  • Stub date inference: one-sided stub date inference can be attempted guided by the stub_inference parameter.
Source

pub fn is_regular(&self) -> bool

Check if a Schedule contains only regular periods, and no stub periods.

Trait Implementations§

Source§

impl Clone for Schedule

Source§

fn clone(&self) -> Schedule

Returns a copy 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 Debug for Schedule

Source§

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

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

impl<'de> Deserialize<'de> for Schedule

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<'py> IntoPyObject<'py> for Schedule

Source§

type Target = Schedule

The Python output type
Source§

type Output = Bound<'py, <Schedule as IntoPyObject<'py>>::Target>

The smart pointer type to use. Read more
Source§

type Error = PyErr

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

fn into_pyobject( self, py: Python<'py>, ) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>

Performs the conversion.
Source§

impl PartialEq for Schedule

Source§

fn eq(&self, other: &Schedule) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PyClass for Schedule

Source§

type Frozen = False

Whether the pyclass is frozen. Read more
Source§

impl PyClassImpl for Schedule

Source§

const IS_BASETYPE: bool = false

#[pyclass(subclass)]
Source§

const IS_SUBCLASS: bool = false

#[pyclass(extends=…)]
Source§

const IS_MAPPING: bool = false

#[pyclass(mapping)]
Source§

const IS_SEQUENCE: bool = false

#[pyclass(sequence)]
Source§

const IS_IMMUTABLE_TYPE: bool = false

#[pyclass(immutable_type)]
Source§

type BaseType = PyAny

Base class
Source§

type ThreadChecker = SendablePyClass<Schedule>

This handles following two situations: Read more
Source§

type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild

Immutable or mutable
Source§

type Dict = PyClassDummySlot

Specify this class has #[pyclass(dict)] or not.
Source§

type WeakRef = PyClassDummySlot

Specify this class has #[pyclass(weakref)] or not.
Source§

type BaseNativeType = PyAny

The closest native ancestor. This is PyAny by default, and when you declare #[pyclass(extends=PyDict)], it’s PyDict.
Source§

fn items_iter() -> PyClassItemsIter

Source§

fn doc(py: Python<'_>) -> PyResult<&'static CStr>

Rendered class doc
Source§

fn lazy_type_object() -> &'static LazyTypeObject<Self>

§

fn dict_offset() -> Option<isize>

§

fn weaklist_offset() -> Option<isize>

Source§

impl PyClassNewTextSignature<Schedule> for PyClassImplCollector<Schedule>

Source§

fn new_text_signature(self) -> Option<&'static str>

Source§

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a Schedule

Source§

type Holder = Option<PyRef<'py, Schedule>>

Source§

fn extract( obj: &'a Bound<'py, PyAny>, holder: &'a mut Self::Holder, ) -> PyResult<Self>

Source§

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut Schedule

Source§

type Holder = Option<PyRefMut<'py, Schedule>>

Source§

fn extract( obj: &'a Bound<'py, PyAny>, holder: &'a mut Self::Holder, ) -> PyResult<Self>

Source§

impl PyMethods<Schedule> for PyClassImplCollector<Schedule>

Source§

fn py_methods(self) -> &'static PyClassItems

Source§

impl PyTypeInfo for Schedule

Source§

const NAME: &'static str = "Schedule"

Class name.
Source§

const MODULE: Option<&'static str>

Module name, if any.
Source§

fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject

Returns the PyTypeObject instance for this type.
§

fn type_object(py: Python<'_>) -> Bound<'_, PyType>

Returns the safe abstraction over the type object.
§

fn is_type_of(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of this type or a subclass of this type.
§

fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of this type.
Source§

impl Serialize for Schedule

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl DerefToPyAny for Schedule

Source§

impl StructuralPartialEq for Schedule

Auto Trait Implementations§

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.

§

impl<T> FromPyObject<'_> for T
where T: PyClass + Clone,

§

fn extract_bound(obj: &Bound<'_, PyAny>) -> Result<T, PyErr>

Extracts Self from the bound smart pointer obj. Read more
§

impl<'py, T> FromPyObjectBound<'_, 'py> for T
where T: FromPyObject<'py>,

§

fn from_py_object_bound(ob: Borrowed<'_, 'py, PyAny>) -> Result<T, PyErr>

Extracts Self from the bound smart pointer obj. Read more
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
§

impl<'py, T> IntoPyObjectExt<'py> for T
where T: IntoPyObject<'py>,

§

fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>

Converts self into an owned Python object, dropping type information.
§

fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>

Converts self into an owned Python object, dropping type information and unbinding it from the 'py lifetime.
§

fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>

Converts self into a Python object. Read more
§

impl<T> PyErrArguments for T
where T: for<'py> IntoPyObject<'py> + Send + Sync,

§

fn arguments(self, py: Python<'_>) -> Py<PyAny>

Arguments for exception
§

impl<T> PyTypeCheck for T
where T: PyTypeInfo,

§

const NAME: &'static str = <T as PyTypeInfo>::NAME

Name of self. This is used in error messages, for example.
§

fn type_check(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of Self, which may include a subtype. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> Scalar for T
where T: 'static + Clone + PartialEq + Debug,

§

impl<T> Ungil for T
where T: Send,