Source code for RCAIDE.Framework.Mission.Common.Conditions

# RCAIDE/Framework/Analyses/Mission/Segments/Conditions/Conditions.py
# 
# 
# Created:  Jul 2023, M. Clarke
 
# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ----------------------------------------------------------------------------------------------------------------------
# RCAIDE imports 
from RCAIDE.Framework.Core                    import Data 

# python imports 
import numpy as np 
# ----------------------------------------------------------------------------------------------------------------------
#  Conditions
# ----------------------------------------------------------------------------------------------------------------------
[docs] class Conditions(Data): """ Conditions are the magic Data that contains the information about the vehicle in flight. At this point none of the information really exists. What is here are the methods that allow a mission to collect the information. Assumptions: None Source: None """ _size = 1
[docs] def ones_row(self,cols): """ returns a row vector of ones with given number of columns Assumptions: None Source: N/A Inputs: cols [in] Outputs: Vector Properties Used: None """ return np.ones([self._size,cols])
[docs] def ones_row_m1(self,cols): """ returns an N-1 row vector of ones with given number of columns Assumptions: None Source: N/A Inputs: cols [in] Outputs: Vector Properties Used: None """ return expanded_array(cols, 1)
[docs] def ones_row_m2(self,cols): """ returns an N-2 row vector of ones with given number of columns Assumptions: None Source: N/A Inputs: cols [int] Outputs: Vector Properties Used: None """ return expanded_array(cols, 2)
[docs] def expand_rows(self,rows,override=False): """ Makes a 1-D array the right size. Often used after a mission is initialized to size out the vectors to the right size. Will not overwrite an array if it already exists, unless override is True. Assumptions: None Source: N/A Inputs: rows [int] override [boolean] Outputs: None Properties Used: None """ # store self._size = rows # recursively initialize condition and unknown arrays # to have given row length for k,v in self.items(): try: rank = v.ndim except: rank = 0 # recursion if isinstance(v,Conditions): v.expand_rows(rows,override=override) elif isinstance(v,expanded_array): self[k] = v.resize(rows) # need arrays here elif rank == 2: #Check if it's already expanded if v.shape[0]<=1 or override: self[k] = np.resize(v,[rows,v.shape[1]]) return
[docs] class expanded_array(Data): """ This is an array that will expand later when the mission is initialized. It is called specifically by conditions Assumptions: None Source: None """ _size = 1
[docs] def __init__(self, cols, adjustment): """ Initialization that sets expansion later Assumptions: None Source: N/A Inputs: self cols - columns [int] adjustment - how much smaller [int] Outputs: N/A Properties Used: N/A """ self._adjustment = adjustment self._cols = cols self._array = np.array([[1]])
[docs] def resize(self,rows): """ This function actually completes the resizing. After this it's no longer an expanded array. That way it doesn't propogate virally. That means if one wishes to resize later the conditions need to be reset. Assumptions: None Source: N/A Inputs: self rows - rows [int] v - values (really self) [int] Outputs: np.array - properly sized [array] Properties Used: N/A """ # unpack adjustment = self._adjustment # pack self._size = rows value = self._array return np.resize(value,[rows-adjustment,value.shape[1]])
def __call__(self): """ This returns the value and shape of the array as is Assumptions: None Source: N/A Inputs: self Outputs: np.array - properly sized [array] Properties Used: N/A """ return self._array def __mul__(self,other): """ Performs multiplication and returns self Assumptions: None Source: N/A Inputs: self other - something can be multiplied [float] Outputs: self Properties Used: N/A """ self._array = np.resize(other,[1,1]) return self def __rmul__(self,other): """ Performs multiplication and returns self Assumptions: None Source: N/A Inputs: self other - something can be multiplied [float] Outputs: self Properties Used: N/A """ self._array = np.resize(other,[1,1]) return self