From: Yohann Pipeau Date: Thu, 6 Jan 2022 10:13:16 +0000 (+0100) Subject: Bringing the integration bench catalog into compliance with pylint X-Git-Tag: merge_uncertainty_odysee_1210~123 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=2be49de8cc0ee04e993e6c2b6da48b2618eb965c;p=tools%2Feficas.git Bringing the integration bench catalog into compliance with pylint --- diff --git a/ReacteurNumerique/cata_RN_EDG_PN.py b/ReacteurNumerique/cata_RN_EDG_PN.py index fe1126a1..a9653ec3 100644 --- a/ReacteurNumerique/cata_RN_EDG_PN.py +++ b/ReacteurNumerique/cata_RN_EDG_PN.py @@ -1,40 +1,35 @@ # -*- coding: utf-8 -*- -# Copyright (C) 2008-2018 EDF R&D -# -# This file is part of SALOME ADAO module -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -import os + +"""Definition of the data model used by the integration bench. + +Warnings +-------- +EFICAS will import this file as Python module with the ``__import__`` special +function so, this module must not use relative import. +""" +# pylint: disable=too-few-public-methods + +# EFICAS from Accas import OPER, BLOC, FACT, SIMP, ASSD, JDC_CATA, VerifTypeTuple, Matrice from Extensions.i18n import tr -import types -monFichier = os.path.abspath(__file__) -JdC = JDC_CATA( - code='RN_EDG' -) +# Warning: The names of these variables are defined by EFICAS +JdC = JDC_CATA(code='RN_EDG') VERSION_CATALOGUE = 'V_0' +# Define the minimum and the maximum number of elements (reflectors and fuel +# assemblies) on the core's side +NMIN_CORE_FUEL_ELTS = 1 +NMAX_CORE_FUEL_ELTS = 18 -NMIN_ASSEMBLY = 1 -NMAX_ASSEMBLY = 18 +class Tuple: + """Organize the data into a fixed size tuple. + Warnings + -------- + This class respect the EFICAS conventions. + """ -class Tuple: def __init__(self, ntuple): self.ntuple = ntuple @@ -43,23 +38,32 @@ class Tuple: return None return valeur - def info(self): - return "Tuple de %s elements" % self.ntuple + def info(self): # pylint: disable=missing-function-docstring + return 'Tuple de %s elements' % self.ntuple class VerifPostTreatment(VerifTypeTuple): + """Validate the data comming from ``Scenario_data.post_processing``. + + Warnings + -------- + This class respect the EFICAS conventions. + """ + # pylint: disable=invalid-name + # pylint: disable=missing-function-docstring + # pylint: disable=no-self-use def __init__(self): - super(VerifPostTreatment, self).__init__(('TXM', 'TXM')) - self.cata_info = "" + super().__init__(('TXM', 'TXM')) + self.cata_info = '' self.physValeurs = ('Neutronics', 'Thermalhydraulics') self.typeValeurs = ('MED', 'SUM', 'MIN', 'MAX', 'MEAN') def info(self): - return tr(": verifie les \ntypes dans un tuple") + return tr(': vérifie les \ntypes dans un tuple') def infoErreurListe(self): - return tr("Les types entres ne sont pas permis") + return tr('Les types entres ne sont pas permis') def default(self, valeur): return valeur @@ -70,14 +74,14 @@ class VerifPostTreatment(VerifTypeTuple): def convertItem(self, valeur): if len(valeur) != len(self.typeDesTuples): raise ValueError( - tr("%s devrait etre de type %s ") % (valeur, self.typeDesTuples)) + tr('%s devrait être de type %s ') % (valeur, self.typeDesTuples)) ok = self.verifType(valeur) if ok == 0: raise ValueError( - tr("%s devrait etre de type %s (%d)") % (valeur, self.typeDesTuples, ok)) + tr('%s devrait être de type %s (%d)') % (valeur, self.typeDesTuples, ok)) if ok < 0: raise ValueError( - tr("%s devrait etre dans %s ") % (valeur[1], self.typeValeurs)) + tr('%s devrait être dans %s ') % (valeur[1], self.typeValeurs)) return valeur def verifItem(self, valeur): @@ -87,17 +91,17 @@ class VerifPostTreatment(VerifTypeTuple): ok = self.verifType(valeur) if ok != 1: return 0 - except: + except: # pylint: disable=bare-except return 0 return 1 - def verifType(self, valeur): + def verifType(self, valeur): # pylint: disable=arguments-differ ok = 0 for v in valeur: - if type(v) == bytes or type(v) == str: + if isinstance(v, (bytes, str)): ok += 1 if ok == len(self.typeDesTuples): - if valeur[1] in self.typeValeurs: # and valeur[1] in self.physValeurs: + if valeur[1] in self.typeValeurs: return 1 return -1 return 0 @@ -113,16 +117,25 @@ class VerifPostTreatment(VerifTypeTuple): class VerifNeutLib(VerifTypeTuple): + """Validate the data comming from ``Model_data.b_neutro_compo.library_map``. + + Warnings + -------- + This class respect the EFICAS conventions. + """ + # pylint: disable=invalid-name + # pylint: disable=no-self-use + # pylint: disable=missing-function-docstring def __init__(self): - super(VerifNeutLib, self).__init__((myAssembly, 'TXM')) - self.cata_info = "" + super().__init__((_Assembly, 'TXM')) + self.cata_info = '' def info(self): - return tr(": verifie les \ntypes dans un tuple") + return tr(': vérifie les \ntypes dans un tuple') def infoErreurListe(self): - return tr("Les types entres ne sont pas permis") + return tr('Les types entres ne sont pas permis') def default(self, valeur): return valeur @@ -133,11 +146,11 @@ class VerifNeutLib(VerifTypeTuple): def convertItem(self, valeur): if len(valeur) != len(self.typeDesTuples): raise ValueError( - tr("%s devrait etre de type %s ") % (valeur, self.typeDesTuples)) + tr('%s devrait être de type %s ') % (valeur, self.typeDesTuples)) ok = self.verifType(valeur) if ok == 0: raise ValueError( - tr("%s devrait etre de type %s (%d)") % (valeur, self.typeDesTuples, ok)) + tr('%s devrait être de type %s (%d)') % (valeur, self.typeDesTuples, ok)) return valeur def verifItem(self, valeur): @@ -147,16 +160,16 @@ class VerifNeutLib(VerifTypeTuple): ok = self.verifType(valeur) if ok != 1: return 0 - except: + except: # pylint: disable=bare-except return 0 return 1 - def verifType(self, valeur): + def verifType(self, valeur): # pylint: disable=arguments-differ ok = 0 a, v = valeur - if isinstance(a, myAssembly): + if isinstance(a, _Assembly): ok += 1 - if type(v) == bytes or type(v) == str: + if isinstance(v, (bytes, str)): ok += 1 if ok == len(self.typeDesTuples): return 1 @@ -172,214 +185,214 @@ class VerifNeutLib(VerifTypeTuple): return 0 -class myAssembly(ASSD): +class _Assembly(ASSD): pass -class myTechnoData(ASSD): +class _TechnoData(ASSD): pass -class myRodBank(ASSD): +class _RodBank(ASSD): pass -class myModelData(ASSD): +class _ModelData(ASSD): pass -class myScenarioData(ASSD): +class _ScenarioData(ASSD): pass -Assembly = OPER(nom='Assembly', sd_prod=myAssembly, - #assembly_name=SIMP(statut='o', typ='TXM'), - assembly_type=SIMP(statut='o', typ='TXM', into=("UOX", "MOX", "REF")), - description=BLOC(condition='assembly_type != "REF"', - assembly_width=SIMP(statut='o', typ='R'), - fuel_density=SIMP(statut='o', typ='R', defaut=0.95), - radial_description=FACT(statut='o', - clad_outer_radius=SIMP(statut='o', typ='R'), - guide_tube_outer_radius=SIMP(statut='o', typ='R'), - fuel_rod_pitch=SIMP(statut='o', typ='R'), - nfuel_rods=SIMP(statut='o', typ='I')), - axial_description=FACT(statut='o', - active_length_start=SIMP(statut='o', typ='R'), - active_length_end=SIMP(statut='o', typ='R')), - grids=FACT(statut='o', - mixing=FACT(statut='o', - positions=SIMP( - statut='f', typ='R', max="**"), - size=SIMP(statut='o', typ='R')), - non_mixing=FACT(statut='o', - positions=SIMP( - statut='f', typ='R', max='**'), - size=SIMP(statut='o', typ='R')), - ) - ) - ) - - -RodBank = OPER(nom="RodBank", sd_prod=myRodBank, - #rodbank_name=SIMP(statut='o', typ='TXM'), - rod_type=SIMP(statut='o', typ='TXM', into=("homogeneous", "heterogeneous")), - description_HOM=BLOC(condition='rod_type == "homogeneous"', - rod_composition=SIMP(statut='o', typ='TXM')), - description_HET=BLOC(condition='rod_type == "heterogeneous"', - bottom_composition=SIMP(statut='o', typ='TXM'), - splitting_heigh=SIMP(statut='o', typ='R'), - upper_composition=SIMP(statut='o', typ='TXM')), - step_height=SIMP(statut='o', typ='R'), - nsteps=SIMP(statut='o', typ='I')) - - -def add_lr_refl(ass_list): - return ["RW"] + ass_list + ["RE"] - - -def add_tb_refl(ass_list): - return ["RS"] + ass_list + ["RN"] - - -def generate_ass_map(nass_list): - xsym_list = [a for a in 'ABCDEFGHJKLNPRSTUVWXYZ'] +Assembly = OPER( + nom='Assembly', + sd_prod=_Assembly, + assembly_type=SIMP(statut='o', typ='TXM', into=('UOX', 'MOX', 'REF')), + description=BLOC( + condition='assembly_type != "REF"', + assembly_width=SIMP(statut='o', typ='R'), + fuel_density=SIMP(statut='o', typ='R', defaut=0.95), + radial_description=FACT( + statut='o', + clad_outer_radius=SIMP(statut='o', typ='R'), + guide_tube_outer_radius=SIMP(statut='o', typ='R'), + fuel_rod_pitch=SIMP(statut='o', typ='R'), + nfuel_rods=SIMP(statut='o', typ='I')), + axial_description=FACT( + statut='o', + active_length_start=SIMP(statut='o', typ='R'), + active_length_end=SIMP(statut='o', typ='R')), + grids=FACT( + statut='o', + mixing=FACT( + statut='o', + positions=SIMP(statut='f', typ='R', max='**'), + size=SIMP(statut='o', typ='R')), + non_mixing=FACT( + statut='o', + positions=SIMP(statut='f', typ='R', max='**'), + size=SIMP(statut='o', typ='R'))))) + + +RodBank = OPER( + nom='RodBank', + sd_prod=_RodBank, + rod_type=SIMP(statut='o', typ='TXM', into=('homogeneous', 'heterogeneous')), + description_HOM=BLOC( + condition='rod_type == "homogeneous"', + rod_composition=SIMP(statut='o', typ='TXM')), + description_HET=BLOC( + condition='rod_type == "heterogeneous"', + bottom_composition=SIMP(statut='o', typ='TXM'), + splitting_heigh=SIMP(statut='o', typ='R'), + upper_composition=SIMP(statut='o', typ='TXM')), + step_height=SIMP(statut='o', typ='R'), + nsteps=SIMP(statut='o', typ='I')) + + +def gen_assembly_maps(): + """Generate all the possible maps (one for each possible core size) for the + data cointained in ``Techno_data.radial_description.assembly_map``.""" + # Build the default axes names + xsym_list = list('ABCDEFGHJKLNPRSTUVWXYZ') xsym_list.reverse() - ysym_list = ["%02d" % i for i in range(NMIN_ASSEMBLY, NMAX_ASSEMBLY+1)] + ysym_list = ['%02d' % i for i in range(NMIN_CORE_FUEL_ELTS, NMAX_CORE_FUEL_ELTS + 1)] ysym_list.reverse() def_xaxis = {} def_yaxis = {} - for n in range(NMIN_ASSEMBLY, NMAX_ASSEMBLY+1): - def_xaxis[n] = add_lr_refl(xsym_list[-n:]) - def_yaxis[n] = add_tb_refl(ysym_list[-n:]) + for i in range(NMIN_CORE_FUEL_ELTS, NMAX_CORE_FUEL_ELTS + 1): + def_xaxis[i] = ['RW'] + xsym_list[-i:] + ['RE'] + def_yaxis[i] = ['RS'] + ysym_list[-i:] + ['RN'] dico = {} - for n in nass_list: - dico['assembly_map_%d' % n] = BLOC(condition="nb_assembly==%d" % n, - xaxis=SIMP(statut='o', - typ='TXM', - min=n+2, max=n+2, - defaut=def_xaxis[n]), - yaxis=SIMP(statut='o', - typ='TXM', - min=n+2, max=n+2, - defaut=def_yaxis[n]), - assembly_map=SIMP(statut="o", - typ=Matrice(nbLigs=n+2, - nbCols=n+2, - typElt=myAssembly, # ici c'est le nom de l'assemblage - listeHeaders=(('RW','S','R','P','N','L','K','J','H','G','F','E','D','C','B','A','RE',),('RS','15','14','13','12','11','10','09','08','07','06','05','04','03','02','01','RN',)), - defaut=(n+2)*[(n+2)*['.']], coloree=True), - ), - rod_map=SIMP(statut="o", - typ=Matrice(nbLigs=n+2, - nbCols=n+2, - valSup=1, - valMin=-1, - #typElt=myAssembly, # ici c'est le nom de l'assemblage - typElt='TXM', # ici c'est le nom de l'assemblage - listeHeaders=None), - defaut=(n+2)*[(n+2)*['.']]), - BU_map=SIMP(statut="o", - typ=Matrice(nbLigs=n+2, - nbCols=n+2, - valSup=90000., - valMin=0., - typElt='R', # ici c'est le BU - listeHeaders=None, - coloree=True), - defaut=(n+2)*[(n+2)*['.']])) - + for i in range(NMIN_CORE_FUEL_ELTS, NMAX_CORE_FUEL_ELTS): + dico['assembly_map_%d' % i] = BLOC( + condition='nb_assembly==%d' % i, + xaxis=SIMP(statut='o', typ='TXM', min=i + 2, max=i + 2, defaut=def_xaxis[i]), + yaxis=SIMP(statut='o', typ='TXM', min=i + 2, max=i + 2, defaut=def_yaxis[i]), + assembly_map=SIMP( + statut='o', + typ=Matrice( + nbLigs=i + 2, + nbCols=i + 2, + typElt=_Assembly, + listeHeaders=( + ('RW','S','R','P','N','L','K','J','H','G','F','E','D','C','B','A','RE',), + ('RS','15','14','13','12','11','10','09','08','07','06','05','04','03','02','01','RN',)), + defaut=(i + 2) * [(i + 2) * ['.']], + coloree=True)), + rod_map=SIMP( + statut='o', + typ=Matrice( + nbLigs=i + 2, + nbCols=i + 2, + valSup=1, + valMin=-1, + typElt='TXM', + listeHeaders=None), + defaut=(i + 2) * [(i + 2) * ['.']]), + BU_map=SIMP( + statut='o', + typ=Matrice( + nbLigs=i + 2, + nbCols=i + 2, + valSup=90000., + valMin=0., + typElt='R', + listeHeaders=None, + coloree=True), + defaut=(i + 2) * [(i + 2) * ['.']])) return dico -Techno_data = OPER(nom='Techno_data', sd_prod=myTechnoData, - assembly_list=SIMP(statut='o', typ=myAssembly, min=1, max="**"), # à resorber quand on mettra dans la Matrice - rodbank_list=SIMP(statut='o', typ=myRodBank, min=0, max="**"), # idem - radial_description=FACT(statut='o', - nb_assembly=SIMP(statut='o', typ='I', into=list(range(NMIN_ASSEMBLY, NMAX_ASSEMBLY))), - **(generate_ass_map(range(NMIN_ASSEMBLY, NMAX_ASSEMBLY))) - ), # Radial_Description - axial_description=FACT(statut='o', - lower_refl_size=SIMP(statut='o', typ='R'), - upper_refl_size=SIMP(statut='o', typ='R'), - ), - nominal_power=SIMP(statut='o', typ='R'), - Fuel_power_fraction=SIMP(statut='o', typ='R', defaut=0.974), - by_pass=SIMP(statut='o', typ='R', defaut=0.07), - core_volumic_flowrate=SIMP(statut='o', typ='R'), - ) # Techno data - -Model_data = OPER(nom='Model_data', sd_prod=myModelData, - physics=SIMP(statut='o', typ='TXM', into=( - 'Neutronics', 'Thermalhydraulics')), - scale=SIMP(statut='o', typ='TXM', into=( - 'system', 'component', 'local')), - b_neutro_compo=BLOC(condition='physics=="Neutronics" and scale=="component"', - library_map=SIMP(statut='f', typ=Tuple(2), - validators=VerifNeutLib(), - max='**'), - code=SIMP(statut='o', typ='TXM', into=('COCAGNE', 'APOLLO3')), - radial_meshing=FACT(statut='o', - flux_solver=SIMP(statut='o', typ='TXM', into=('subdivision', 'pin-by-pin')), - b_flux_subdivision=BLOC(condition='flux_solver=="subdivision"', - flux_subdivision=SIMP(statut='o', typ='I')), - feedback_solver=SIMP(statut='o', typ='TXM', into=('subdivision', 'pin-by-pin')), - b_feedback_subdivision=BLOC(condition='feedback_solver=="subdivision"', - feedback_subdivision=SIMP(statut='o', typ='I')))), - b_thermo_compo=BLOC(condition='physics=="Thermalhydraulics" and scale=="component"', - code=SIMP(statut='o', typ='TXM', into=('THYC', 'CATHARE3', 'FLICA4')), - radial_meshing=FACT(statut='o', - fluid=SIMP(statut='o', typ='TXM', into=('subdivision', 'subchannel')), - b_fluid_subdivision=BLOC(condition='fluid=="subdivision"', - fluid_subdivision=SIMP(statut='o', typ='I')), - pellet=SIMP(statut='o', typ='I'), - clad=SIMP(statut='o', typ='I')), - ), - b_scale_compo=BLOC(condition='scale=="component"', - axial_meshing=FACT(statut='o', - lower_refl=SIMP(statut='o', typ='I'), - fuel=SIMP(statut='o', typ='I'), - upper_refl=SIMP(statut='o', typ='I'))), - b_scale_local=BLOC(condition='scale=="local"', - mesh_file=SIMP(statut='o', typ='Fichier')), - ) - - -Scenario_data = OPER(nom='Scenario_data', sd_prod=myScenarioData, - initial_power=SIMP(statut='o', typ='R', val_min=0., - defaut=100.), - initial_power_unit=SIMP(statut='o', typ='TXM', - into=('% Nominal power', 'W'), - defaut='% Nominal power'), - initial_core_inlet_temperature=SIMP(statut='o', typ='R', val_min=0., - defaut=280.), - initial_boron_concentration=SIMP(statut='o', typ='R', val_min=0., - defaut=1300.), - initial_inlet_pressure=SIMP(statut='o', typ='R', defaut=160.2), - initial_outlet_pressure=SIMP(statut='o', typ='R', defaut=157.2), - initial_rod_positions=SIMP(statut='o', - typ=Tuple(2), - validators=VerifTypeTuple(['TXM', 'I']), - ang="Type@label, position (e.g. RodBank@RB, 0)", - max='**'), - scenario_type=SIMP(statut='o', - typ='TXM', - into=['RIA']), - b_ria=BLOC(condition='scenario_type=="RIA"', - ejected_rod=SIMP(statut='o', - typ='TXM'), - rod_position_program=SIMP(statut='o', - typ=Tuple(2), - validators=VerifTypeTuple(['R', 'I']), - max='**'), - SCRAM=SIMP(statut='o', typ='TXM', into=("YES", "NO")), - SCRAM_option=BLOC(condition='SCRAM == "YES"', - SCRAM_power=SIMP(statut='o', typ='R'), - complete_SCRAM_time=SIMP(statut='o', typ='R'), - ), - ), - post_processing=SIMP(statut='f', - typ=Tuple(2), - validators=VerifPostTreatment(), - max='**'), - ) +Techno_data = OPER( + nom='Techno_data', + sd_prod=_TechnoData, + assembly_list=SIMP(statut='o', typ=_Assembly, min=1, max='**'), + rodbank_list=SIMP(statut='o', typ=_RodBank, min=0, max='**'), + radial_description=FACT( + statut='o', + nb_assembly=SIMP(statut='o', typ='I', into=list(range(NMIN_CORE_FUEL_ELTS, NMAX_CORE_FUEL_ELTS))), + **(gen_assembly_maps())), + axial_description=FACT( + statut='o', + lower_refl_size=SIMP(statut='o', typ='R'), + upper_refl_size=SIMP(statut='o', typ='R')), + nominal_power=SIMP(statut='o', typ='R'), + Fuel_power_fraction=SIMP(statut='o', typ='R', defaut=0.974), + by_pass=SIMP(statut='o', typ='R', defaut=0.07), + core_volumic_flowrate=SIMP(statut='o', typ='R')) + + +Model_data = OPER( + nom='Model_data', + sd_prod=_ModelData, + physics=SIMP(statut='o', typ='TXM', into=('Neutronics', 'Thermalhydraulics')), + scale=SIMP(statut='o', typ='TXM', into=('system', 'component', 'local')), + b_neutro_compo=BLOC( + condition='physics=="Neutronics" and scale=="component"', + library_map=SIMP(statut='f', typ=Tuple(2), validators=VerifNeutLib(), max='**'), + code=SIMP(statut='o', typ='TXM', into=('COCAGNE', 'APOLLO3')), + radial_meshing=FACT( + statut='o', + flux_solver=SIMP(statut='o', typ='TXM', into=('subdivision', 'pin-by-pin')), + b_flux_subdivision=BLOC( + condition='flux_solver=="subdivision"', + flux_subdivision=SIMP(statut='o', typ='I')), + feedback_solver=SIMP(statut='o', typ='TXM', into=('subdivision', 'pin-by-pin')), + b_feedback_subdivision=BLOC( + condition='feedback_solver=="subdivision"', + feedback_subdivision=SIMP(statut='o', typ='I')))), + b_thermo_compo=BLOC( + condition='physics=="Thermalhydraulics" and scale=="component"', + code=SIMP(statut='o', typ='TXM', into=('THYC', 'CATHARE3', 'FLICA4')), + radial_meshing=FACT( + statut='o', + fluid=SIMP(statut='o', typ='TXM', into=('subdivision', 'subchannel')), + b_fluid_subdivision=BLOC( + condition='fluid=="subdivision"', + fluid_subdivision=SIMP(statut='o', typ='I')), + pellet=SIMP(statut='o', typ='I'), + clad=SIMP(statut='o', typ='I'))), + b_scale_compo=BLOC( + condition='scale=="component"', + axial_meshing=FACT( + statut='o', + lower_refl=SIMP(statut='o', typ='I'), + fuel=SIMP(statut='o', typ='I'), + upper_refl=SIMP(statut='o', typ='I'))), + b_scale_local=BLOC( + condition='scale=="local"', + mesh_file=SIMP(statut='o', typ='Fichier'))) + + +Scenario_data = OPER( + nom='Scenario_data', + sd_prod=_ScenarioData, + initial_power=SIMP(statut='o', typ='R', val_min=0., defaut=100.), + initial_power_unit=SIMP( + statut='o', typ='TXM', into=('% Nominal power', 'W'), defaut='% Nominal power'), + initial_core_inlet_temperature=SIMP(statut='o', typ='R', val_min=0., defaut=280.), + initial_boron_concentration=SIMP(statut='o', typ='R', val_min=0., defaut=1300.), + initial_inlet_pressure=SIMP(statut='o', typ='R', defaut=160.2), + initial_outlet_pressure=SIMP(statut='o', typ='R', defaut=157.2), + initial_rod_positions=SIMP( + statut='o', + typ=Tuple(2), + validators=VerifTypeTuple(('TXM', 'I')), + ang='Type@label, position (e.g. RodBank@RB, 0)', + max='**'), + scenario_type=SIMP(statut='o', typ='TXM', into=('RIA', )), + b_ria=BLOC( + condition='scenario_type=="RIA"', + ejected_rod=SIMP(statut='o', typ='TXM'), + rod_position_program=SIMP( + statut='o', typ=Tuple(2), validators=VerifTypeTuple(('R', 'I')), max='**'), + SCRAM=SIMP(statut='o', typ='TXM', into=('YES', 'NO')), + SCRAM_option=BLOC( + condition='SCRAM == "YES"', + SCRAM_power=SIMP(statut='o', typ='R'), + complete_SCRAM_time=SIMP(statut='o', typ='R'))), + post_processing=SIMP( + statut='f', typ=Tuple(2), validators=VerifPostTreatment(), max='**'))