julienmalard/Tikon

View on GitHub
tikon/móds/rae/orgs/plantas/base.py

Summary

Maintainability
A
2 hrs
Test Coverage
from tikon.móds.rae.orgs.ecs.utils import ECS_CREC, ECS_DEPR, ECS_EDAD, ECS_MOV, ECS_MRTE, ECS_TRANS, ECS_REPR, \
    ECS_ESTOC

from ..organismo import Organismo
from ..etapa import Etapa


class Planta(Organismo):

    def __init__(símismo, nombre, raíz, palo, sabia, hoja, flor, fruta, semilla, variedad=None, tipo_ecs=None):
        """
        Para un cultivo, tomamos una visión un poco relajada de las etapas de un Organismo, y las empleamos para
        distinguir entre las distintas partes de la planta.

        Parameters
        ----------
        nombre
        raíz
        palo
        sabia
        hoja
        flor
        fruta
        semilla
        tipo_ecs
        """

        símismo.variedad = variedad
        tipo_ecs = tipo_ecs or {}
        etapas = []
        if raíz:
            etapas.append('raíz')  # kg
        if palo:
            etapas.append('palo')  # kg
        if sabia:
            etapas.append('sabia')  # kg
        if hoja:
            etapas.append('hoja')  # m2
        if flor:
            etapas.append('flor')  # kg
        if fruta:
            etapas.append('fruta')  # kg
        if semilla:
            etapas.append('semilla')  # kg

        ecs_base = {
            ECS_CREC: {'Tasa': 'Constante', 'Ecuación': 'Logístico'},
            ECS_DEPR: {'Ecuación': 'Nada'},
            ECS_MRTE: {'Ecuación': 'Nada'},
            ECS_EDAD: {'Ecuación': 'Nada'},
            ECS_ESTOC: {'Dist': 'Nada'},
            ECS_TRANS: {'Prob': 'Nada', 'Mult': 'Nada'},
            ECS_REPR: {'Prob': 'Nada'},
            ECS_MOV: {'Distancia': 'Nada', 'Atracción': 'Nada'}
        }

        for etp in etapas:
            if etp not in tipo_ecs:
                tipo_ecs[etp] = ecs_base

        super().__init__(nombre=nombre, etapas=etapas)
        símismo.activar_ecs(tipo_ecs)

    def fijar_dens(símismo, apriori, etapas=None):

        etapas = [e if isinstance(e, str) else e.nombre for e in símismo.resolver_etapas(etapas)]

        símismo.activar_ec(ECS_CREC, 'Tasa', 'Nada', etapas=etapas)
        símismo.activar_ec(ECS_CREC, 'Ecuación', 'Constante', etapas=etapas)

        for etp in etapas:
            símismo.espec_apriori_etp(
                etapa=etp, apriori=apriori, categ=ECS_CREC, subcateg='Ecuación', ec='Constante', prm='n',
            )

    def __str__(símismo):
        if símismo.variedad:
            return "{} {}".format(símismo.nombre, símismo.variedad)
        return símismo.nombre


class Hojas(Planta):

    def __init__(símismo, nombre):
        super().__init__(
            nombre=nombre, raíz=False, palo=False, sabia=False, hoja=True, flor=False, fruta=False, semilla=False,
        )


class HojasRaices(Planta):

    def __init__(símismo, nombre):
        super().__init__(
            nombre=nombre, raíz=True, palo=False, sabia=False, hoja=True, flor=False, fruta=False, semilla=False
        )


class Completa(Planta):

    def __init__(símismo, nombre):
        super().__init__(
            nombre,
            raíz=True, palo=True, sabia=True, hoja=True, flor=True, fruta=True, semilla=True,
        )