def caudal_volume(volumen=None, tiempo=None, type_volumen='m3', type_tiempo='s'): """Calculo de caudal en funcion del volumen desplazado y el tiempo medido volumen: volumen que se encuentra en circulacion, se tiene predefinido en m³(metros cubicos). type_volumen: unidades en que se sumistra el dato volumen. tiempo: periodo de tiempo en el que circula el volumen dada, predefinido en s(segundos). type_tiempo: Unidades en que se suministra el dato del tiempo. vector: si es True convierte el dato suministrado en un numpy array para seguir operando ejemplo: v = 5 t = 2 q = caudal(volumen=v, tiempo=t) print(q) >>>2.5 'm3/s' """ if isinstance(tiempo, (float, int)): if isinstance(volumen, (float, int)): volumen = Unidades(volumen, dtype=type_volumen) else: volumen = mecanica_fisica.distancia_euclidea(volumen) volumen = Unidades(volumen, dtype=type_volumen) tiempo = Unidades(tiempo, dtype=type_tiempo) #q = Unidades(volumen.valor/tiempo.valor, dtype=f"{volumen.dtype}/{tiempo.dtype}") return volumen/tiempo else: raise ValueError('No considero el tiempo como un vector.')
def caudal_area(area=None, velocidad=None, type_area='m2', type_velocidad='m/s2'): """Cálculo del caudal en función de la velocidad y el area transversal area: default m2 referidos al area de la seccin por la cual circula fluido. velocidad: default m/s2 referido a la velocidad medida a la cual se desplaza el fluido """ if isinstance(area, (float, int)) and isinstance(velocidad, (float, int)): area = Unidades(area, dtype=type_area) velocidad = Unidades(velocidad, type_velocidad) return area*velocidad
def test_decorador(self): @convert_live(u_s='km') def sumar(a: Unidades, b: Unidades): return a + b uno = Unidades(5, dtype='m') dos = Unidades(5, dtype='m') suma = sumar(uno, dos) self.assertEqual(suma.valor, 0.01, msg='Test decorador valor') self.assertEqual(suma.dtype, 'km', msg='Test decorador dtype')
def escalar(valor, u_s: str, u_e: str = None) -> Unidades: """Funcion para redimensionar segun las escalas preestablecidas en el documento valores.py valor: int, float, class Unidades, indiferentemente del valor de entrada la salida sera del type class Unidades u_s: Unidad a la cual se desea hacer la conversión de escala. u_e: default None, cuando el parametro 'valor' suministrado es del type Unidades se identifica automaticamente el tipo de datos de entrada, en caso contrario debe suministrarse Ejemplo 1: numero = 25 escala = escalar(numero, u_e='m', u_s='km') :return 0.025 km Ejemplo 2: numero = Unidades(25, dtype='m') escala = escalar(numero, u_s='km') :return 0.025 km """ if isinstance(valor, Unidades): dtypes = str(valor.dtype) + '-' + u_s valor.dtype = u_s return valor * escalas[dtypes] else: valor = valor * escalas[u_e + '-' + u_s] return Unidades(valor, dtype=u_s)
def test_Unidades(self): a = Unidades(valor=1, dtype='m') self.assertEqual(a.valor, 1, msg='Test unidades valor') self.assertEqual(a.dtype, 'm', msg='Test unidades dtype')
def test_escalar(self): m = Unidades(0.3048, 'm') pies = escalar(m, 'pies') self.assertEqual(pies.dtype, 'pies', msg='test_escalar dtype') self.assertEqual(round(pies.valor, 4), 1, msg='test_escalar valor')
def presion(fuerza=None, area=None, type_area='m2', type_fuerza='N'): """Calculo de la presion ejercida sobre una superficie""" if isinstance(fuerza, (float, int)) and isinstance(area, (float, int)): fuerza = Unidades(fuerza, dtype=type_fuerza) area = Unidades(area, dtype=type_area) return fuerza/area
:return 0.025 km Ejemplo 2: numero = Unidades(25, dtype='m') escala = escalar(numero, u_s='km') :return 0.025 km """ if isinstance(valor, Unidades): dtypes = str(valor.dtype) + '-' + u_s valor.dtype = u_s return valor * escalas[dtypes] else: valor = valor * escalas[u_e + '-' + u_s] return Unidades(valor, dtype=u_s) if __name__ == '__main__': numero = Unidades(25, dtype='m') escala = escalar(numero, u_s='km') print(escala, type(escala)) print(escalar(1, u_e='pies', u_s='m')) @convert_live(u_s='km') def sumar(a: Unidades, b: Unidades): return a + b uno = Unidades(5, dtype='m') dos = Unidades(5, dtype='m') F = sumar(uno, dos, 3) print(F.dtype)