https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Private Member Functions | Private Attributes | List of all members
Moose::Builder Class Reference

Parses MOOSE input using HIT/WASP. More...

#include <Builder.h>

Inheritance diagram for Moose::Builder:
[legend]

Public Types

enum  SyntaxFormatterType { INPUT_FILE , YAML }
 

Public Member Functions

 Builder (MooseApp &app, ActionWarehouse &action_wh, Parser &parser)
 
virtual ~Builder ()
 
std::string getPrimaryFileName (bool stripLeadingPath=true) const
 Return the primary (first) filename that was parsed.
 
void build ()
 Parse an input file (or text string if provided) consisting of hit syntax and setup objects in the MOOSE derived application.
 
void extractParams (const hit::Node *const section_node, InputParameters &p)
 Attempt to extract values from input starting with the section in input in section_node based on the contents of the passed InputParameters p.
 
void extractParams (const std::string &prefix, InputParameters &p)
 Attempt to extract values from input starting with the section in input defined by the fullpath prefix based on the contents of the passed InputParameters p.
 
void initSyntaxFormatter (SyntaxFormatterType type, bool dump_mode)
 Creates a syntax formatter for printing.
 
void buildFullTree (const std::string &search_string)
 Use MOOSE Factories to construct a full parse tree for documentation or echoing input.
 
void buildJsonSyntaxTree (JsonSyntaxTree &tree) const
 Use MOOSE Factories to construct a parameter tree for documentation or echoing input.
 
void walk (const std::string &fullpath, const std::string &nodepath, hit::Node *n)
 
void errorCheck (const libMesh::Parallel::Communicator &comm, bool warn_unused, bool err_unused)
 
std::vector< std::string > listValidParams (std::string &section_name)
 

Static Public Member Functions

static InputParameters validParams ()
 Parameters that are processed directly by the Parser and are valid anywhere in the input.
 

Public Attributes

const ConsoleStream _console
 An instance of helper class to write streams to the Console objects.
 

Private Member Functions

bool isGlobal (const hit::Node &node) const
 
const hit::Node * queryGlobalParamsNode () const
 Get the [GlobalParams] section node if it exists.
 
void walkRaw (std::string fullpath, std::string nodepath, hit::Node *n)
 

Private Attributes

MooseApp_app
 The MooseApp this Parser is part of.
 
Factory_factory
 The Factory associated with that MooseApp.
 
ActionWarehouse_action_wh
 Action warehouse that will be filled by actions.
 
ActionFactory_action_factory
 The Factory that builds actions.
 
Syntax_syntax
 Reference to an object that defines input file syntax.
 
Parser_parser
 The front parser.
 
hit::Node & _root
 The root node from the Parser.
 
std::unique_ptr< SyntaxTree_syntax_formatter
 Object for holding the syntax parse tree.
 
std::set< std::string > _extracted_vars
 The set of all variables extracted from the input file.
 
std::vector< std::string > _secs_need_first
 The sections that we need to execute first (read during the final walk)
 
std::vector< hit::ErrorMessage > _errors
 The errors accumulated during the walk.
 
std::map< std::string, std::string > _deprecated_params
 Deprecation warnings (object type/param name) -> (message)
 
std::optional< const hit::Node * > _global_params_node
 The hit Node for the [GlobalParams] block, if any If set (could be null), it means we have searched for it.
 

Detailed Description

Parses MOOSE input using HIT/WASP.

Definition at line 56 of file Builder.h.

Member Enumeration Documentation

◆ SyntaxFormatterType

Enumerator
INPUT_FILE 
YAML 

Definition at line 59 of file Builder.h.

60 {
62 YAML
63 };

Constructor & Destructor Documentation

◆ Builder()

Moose::Builder::Builder ( MooseApp app,
ActionWarehouse action_wh,
Parser parser 
)

Definition at line 105 of file Builder.C.

107 _app(app),
108 _factory(app.getFactory()),
109 _action_wh(action_wh),
112 _parser(parser),
114 _syntax_formatter(nullptr)
115{
116}
An inteface for the _console for outputting to the Console object.
ActionFactory & getActionFactory()
Retrieve a writable reference to the ActionFactory associated with this App.
Definition MooseApp.h:412
Factory & getFactory()
Retrieve a writable reference to the Factory associated with this App.
Definition MooseApp.h:407
ActionWarehouse & _action_wh
Action warehouse that will be filled by actions.
Definition Builder.h:137
Syntax & _syntax
Reference to an object that defines input file syntax.
Definition Builder.h:141
Factory & _factory
The Factory associated with that MooseApp.
Definition Builder.h:135
ActionFactory & _action_factory
The Factory that builds actions.
Definition Builder.h:139
MooseApp & _app
The MooseApp this Parser is part of.
Definition Builder.h:133
Parser & _parser
The front parser.
Definition Builder.h:143
hit::Node & _root
The root node from the Parser.
Definition Builder.h:145
std::unique_ptr< SyntaxTree > _syntax_formatter
Object for holding the syntax parse tree.
Definition Builder.h:148
hit::Node & getRoot()
Definition Parser.C:525

◆ ~Builder()

Moose::Builder::~Builder ( )
virtual

Definition at line 118 of file Builder.C.

118{}

Member Function Documentation

◆ build()

void Moose::Builder::build ( )

Parse an input file (or text string if provided) consisting of hit syntax and setup objects in the MOOSE derived application.

Definition at line 300 of file Builder.C.

301{
302 // Pull in extracted variables from the parser (fparse stuff)
304
305 // There are a few order dependent actions that have to be built first in
306 // order for the parser and application to function properly
307 const auto need_action_syntax_first = [this](const auto & action_name)
308 {
309 const auto syntax = _syntax.getSyntaxByAction(action_name);
310 mooseAssert(syntax.size(), "Empty syntax");
311 std::copy(syntax.begin(), syntax.end(), std::back_inserter(_secs_need_first));
312 };
313
314 // SetupDebugAction: This action can contain an option for monitoring the
315 // parser progress. It must be parsed first to capture all of the parsing
316 // output progress.
317 need_action_syntax_first("SetupDebugAction");
318
319 // GlobalParamsAction: This action is checked during the parameter extraction
320 // routines of all subsequent blocks. It must be parsed early since it must
321 // exist during subsequent parameter extraction.
322 need_action_syntax_first("GlobalParamsAction");
323
324 // DynamicObjectRegistration: This action must be built before any MooseObjectActions
325 // are built. This is because we retrieve valid parameters from the Factory
326 // during parse time. Objects must be registered before validParameters can be retrieved.
327 need_action_syntax_first("DynamicObjectRegistrationAction");
328
329 // Walk all the sections extracting paramters from each into InputParameters objects
330 for (const auto & sec : _secs_need_first)
331 if (auto n = _root.find(sec))
332 walkRaw(n->parent()->fullpath(), n->path(), n);
333
334 // Walk for the remainder
335 _root.walk(this, hit::NodeType::Section);
336
337 // Warn for all deprecated parameters together
338 if (_deprecated_params.size())
339 {
340 std::vector<std::string> messages;
341 for (const auto & key_message_pair : _deprecated_params)
342 messages.push_back(key_message_pair.second);
343 const auto message = MooseUtils::stringJoin(messages, "\n\n");
344
345 moose::internal::mooseDeprecatedStream(Moose::out, false, true, false, message + "\n\n");
346 }
347
348 if (_errors.size())
350}
if(!dmm->_nl) SETERRQ(PETSC_COMM_WORLD
void walkRaw(std::string fullpath, std::string nodepath, hit::Node *n)
Definition Builder.C:186
std::set< std::string > _extracted_vars
The set of all variables extracted from the input file.
Definition Builder.h:151
std::map< std::string, std::string > _deprecated_params
Deprecation warnings (object type/param name) -> (message)
Definition Builder.h:160
std::vector< hit::ErrorMessage > _errors
The errors accumulated during the walk.
Definition Builder.h:157
std::vector< std::string > _secs_need_first
The sections that we need to execute first (read during the final walk)
Definition Builder.h:154
void parseError(std::vector< hit::ErrorMessage > messages) const
Helper for throwing an error with the given messages.
Definition Parser.C:569
const std::set< std::string > & getExtractedVars() const
Definition Parser.h:220
std::vector< std::string > getSyntaxByAction(const std::string &action, const std::string &task="")
Retrieve the syntax associated with the passed in action type string.
Definition Syntax.C:211
std::string stringJoin(const std::vector< std::string > &values, const std::string &separator=" ")
Concatenates value into a single string separated by separator.
KOKKOS_INLINE_FUNCTION const T * find(const T &target, const T *const begin, const T *const end)
Find a value in an array.
Definition KokkosUtils.h:40
void mooseDeprecatedStream(S &oss, const bool expired, const bool print_title, const bool show_trace, Args &&... args)
Definition MooseError.h:252

Referenced by MooseApp::setupOptions().

◆ buildFullTree()

void Moose::Builder::buildFullTree ( const std::string &  search_string)

Use MOOSE Factories to construct a full parse tree for documentation or echoing input.

If the task is nullptr that means we need to figure out which task goes with this syntax for the purpose of building the Moose Object part of the tree. We will figure this out by asking the ActionFactory for the registration info.

We need to see if this action is inherited from MooseObjectAction. If it is, then we will loop over all the Objects in MOOSE's Factory object to print them out if they have associated bases matching the current task.

Now that we know that this is a MooseObjectAction we need to see if it has been restricted in any way by the user.

Definition at line 577 of file Builder.C.

578{
579 std::vector<std::pair<std::string, Syntax::ActionInfo>> all_names;
580
581 for (const auto & iter : _syntax.getAssociatedActions())
582 {
583 Syntax::ActionInfo act_info = iter.second;
589 if (act_info._task == "")
590 act_info._task = _action_factory.getTaskName(act_info._action);
591
592 all_names.push_back(std::pair<std::string, Syntax::ActionInfo>(iter.first, act_info));
593 }
594
595 for (const auto & act_names : all_names)
596 {
597 InputParameters action_obj_params = _action_factory.getValidParams(act_names.second._action);
598 _syntax_formatter->insertNode(
599 act_names.first, act_names.second._action, true, &action_obj_params);
600
601 const std::string & task = act_names.second._task;
602 std::string act_name = act_names.first;
603
609 if (action_obj_params.have_parameter<bool>("isObjectAction") &&
610 action_obj_params.get<bool>("isObjectAction"))
611 {
612 for (const auto & [moose_obj_name, obj] : _factory.registeredObjects())
613 {
614 auto moose_obj_params = obj->buildParameters();
619 const std::vector<std::string> & buildable_types = action_obj_params.getBuildableTypes();
620
621 // See if the current Moose Object syntax belongs under this Action's block
622 if ((buildable_types.empty() || // Not restricted
623 std::find(buildable_types.begin(), buildable_types.end(), moose_obj_name) !=
624 buildable_types.end()) && // Restricted but found
625 moose_obj_params.hasBase() && // Has a registered base
626 _syntax.verifyMooseObjectTask(moose_obj_params.getBase(),
627 task) && // and that base is associated
628 action_obj_params.mooseObjectSyntaxVisibility() // and the Action says it's visible
629 )
630 {
631 std::string name;
632 size_t pos = 0;
633 bool is_action_params = false;
634 if (act_name[act_name.size() - 1] == '*')
635 {
636 pos = act_name.size();
637
638 if (!action_obj_params.collapseSyntaxNesting())
639 name = act_name.substr(0, pos - 1) + moose_obj_name;
640 else
641 {
642 name = act_name.substr(0, pos - 1) + "/<type>/" + moose_obj_name;
643 is_action_params = true;
644 }
645 }
646 else
647 {
648 name = act_name + "/<type>/" + moose_obj_name;
649 }
650
651 moose_obj_params.set<std::string>("type") = moose_obj_name;
652
653 _syntax_formatter->insertNode(name, moose_obj_name, is_action_params, &moose_obj_params);
654 }
655 }
656 }
657 }
658
659 // Do not change to _console, we need this printed to the stdout in all cases
660 Moose::out << _syntax_formatter->print(search_string) << std::flush;
661}
std::string getTaskName(const std::string &action)
InputParameters getValidParams(const std::string &name)
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
void collapseSyntaxNesting(bool collapse)
Mutators for controlling whether or not the outermost level of syntax will be collapsed when printed.
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
Combine two vector parameters into a single vector of pairs.
bool have_parameter(std::string_view name) const
A wrapper around the Parameters base class method.
const std::vector< std::string > & getBuildableTypes() const
Returns the list of buildable types as a std::vector<std::string>
void mooseObjectSyntaxVisibility(bool visibility)
Mutators for controlling whether or not the outermost level of syntax will be collapsed when printed.
bool verifyMooseObjectTask(const std::string &base, const std::string &task) const
Returns a Boolean indicating whether a task is associated with on of the MOOSE pluggable systems (BAS...
Definition Syntax.C:335
std::string name(const ElemQuality q)
std::string _task
Definition Syntax.h:27
std::string _action
Definition Syntax.h:26

Referenced by MooseApp::setupOptions().

◆ buildJsonSyntaxTree()

void Moose::Builder::buildJsonSyntaxTree ( JsonSyntaxTree tree) const

Use MOOSE Factories to construct a parameter tree for documentation or echoing input.

If the task is nullptr that means we need to figure out which task goes with this syntax for the purpose of building the Moose Object part of the tree. We will figure this out by asking the ActionFactory for the registration info.

We need to see if this action is inherited from MooseObjectAction. If it is, then we will loop over all the Objects in MOOSE's Factory object to print them out if they have associated bases matching the current task.

Definition at line 417 of file Builder.C.

418{
419 std::vector<std::pair<std::string, Syntax::ActionInfo>> all_names;
420
421 for (const auto & iter : _syntax.getAssociatedTypes())
422 root.addSyntaxType(iter.first, iter.second);
423
424 // Build a list of all the actions appearing in the syntax
425 for (const auto & iter : _syntax.getAssociatedActions())
426 {
427 Syntax::ActionInfo act_info = iter.second;
433 if (act_info._task == "")
434 act_info._task = _action_factory.getTaskName(act_info._action);
435
436 all_names.push_back(std::make_pair(iter.first, act_info));
437 }
438
439 // Add all the actions to the JSON tree, except for ActionComponents (below)
440 for (const auto & act_names : all_names)
441 {
442 const auto & act_info = act_names.second;
443 const std::string & action = act_info._action;
444 const std::string & task = act_info._task;
445 const std::string syntax = act_names.first;
446 InputParameters action_obj_params = _action_factory.getValidParams(action);
447 bool params_added = root.addParameters("",
448 syntax,
449 false,
450 action,
451 true,
452 &action_obj_params,
453 _syntax.getLineInfo(syntax, action, ""),
454 "");
455
456 if (params_added)
457 {
458 auto tasks = _action_factory.getTasksByAction(action);
459 for (auto & t : tasks)
460 {
461 auto info = _action_factory.getLineInfo(action, t);
462 root.addActionTask(syntax, action, t, info);
463 }
464 }
465
471 if (action_obj_params.have_parameter<bool>("isObjectAction") &&
472 action_obj_params.get<bool>("isObjectAction"))
473 {
474 for (auto & [moose_obj_name, obj] : _factory.registeredObjects())
475 {
476 auto moose_obj_params = obj->buildParameters();
477 // Now that we know that this is a MooseObjectAction we need to see if it has been
478 // restricted
479 // in any way by the user.
480 const std::vector<std::string> & buildable_types = action_obj_params.getBuildableTypes();
481
482 // See if the current Moose Object syntax belongs under this Action's block
483 if ((buildable_types.empty() || // Not restricted
484 std::find(buildable_types.begin(), buildable_types.end(), moose_obj_name) !=
485 buildable_types.end()) && // Restricted but found
486 moose_obj_params.hasBase() && // Has a registered base
487 _syntax.verifyMooseObjectTask(moose_obj_params.getBase(),
488 task) && // and that base is associated
489 action_obj_params.mooseObjectSyntaxVisibility() // and the Action says it's visible
490 )
491 {
492 std::string name;
493 size_t pos = 0;
494 bool is_action_params = false;
495 bool is_type = false;
496 if (syntax[syntax.size() - 1] == '*')
497 {
498 pos = syntax.size();
499
500 if (!action_obj_params.collapseSyntaxNesting())
501 name = syntax.substr(0, pos - 1) + moose_obj_name;
502 else
503 {
504 name = syntax.substr(0, pos - 1) + "/<type>/" + moose_obj_name;
505 is_action_params = true;
506 }
507 }
508 else
509 {
510 name = syntax + "/<type>/" + moose_obj_name;
511 is_type = true;
512 }
513 moose_obj_params.set<std::string>("type") = moose_obj_name;
514
515 auto lineinfo = _factory.getLineInfo(moose_obj_name);
516 std::string classname = _factory.associatedClassName(moose_obj_name);
517 root.addParameters(syntax,
518 name,
519 is_type,
520 moose_obj_name,
521 is_action_params,
522 &moose_obj_params,
523 lineinfo,
524 classname);
525 }
526 }
527
528 // Same thing for ActionComponents, which, while they are not MooseObjects, should behave
529 // similarly syntax-wise
530 if (syntax != "ActionComponents/*")
531 continue;
532
533 auto iters = _action_factory.getActionsByTask("list_component");
534
535 for (auto it = iters.first; it != iters.second; ++it)
536 {
537 // Get the name and parameters
538 const auto component_name = it->second;
539 auto component_params = _action_factory.getValidParams(component_name);
540
541 // We currently do not have build-type restrictions on this action that adds
542 // action-components
543
544 // See if the current Moose Object syntax belongs under this Action's block
545 if (action_obj_params.mooseObjectSyntaxVisibility() // and the Action says it's visible
546 )
547 {
548 // The logic for Components is a little simpler here for now because syntax like
549 // Executioner/TimeIntegrator/type= do not exist for components
550 std::string name;
551 if (syntax[syntax.size() - 1] == '*')
552 {
553 size_t pos = syntax.size();
554 name = syntax.substr(0, pos - 1) + component_name;
555 }
556 component_params.set<std::string>("type") = component_name;
557
558 auto lineinfo = _action_factory.getLineInfo(component_name, "list_component");
559 // We add the parameters as for an object, because we want to fit them to be
560 // added to json["AddActionComponentAction"]["subblock_types"]
561 root.addParameters(syntax,
562 /*syntax_path*/ name,
563 /*is_type*/ false,
564 "AddActionComponentAction",
565 /*is_action=*/false,
566 &component_params,
567 lineinfo,
568 component_name);
569 }
570 }
571 }
572 }
573 root.addGlobal();
574}
std::set< std::string > getTasksByAction(const std::string &action) const
std::pair< std::multimap< std::string, std::string >::const_iterator, std::multimap< std::string, std::string >::const_iterator > getActionsByTask(const std::string &task) const
Returns begin and end iterators in a multimap from tasks to actions names.
FileLineInfo getLineInfo(const std::string &name, const std::string &task) const
Gets file and line information where an action was registered.
std::string associatedClassName(const std::string &name) const
Get the associated class name for an object name.
Definition Factory.C:296
FileLineInfo getLineInfo(const std::string &name) const
Gets file and line information where an object was initially registered.
Definition Factory.C:284
FileLineInfo getLineInfo(const std::string &syntax, const std::string &action, const std::string &task) const
Gets the file and line where the syntax/action/task combo was registered.
Definition Syntax.C:381
MPI_Info info

Referenced by MooseApp::setupOptions().

◆ errorCheck()

void Moose::Builder::errorCheck ( const libMesh::Parallel::Communicator comm,
bool  warn_unused,
bool  err_unused 
)

Definition at line 358 of file Builder.C.

359{
360 // Nothing to do here
361 if (!warn_unused && !err_unused)
362 return;
363
364 std::vector<hit::ErrorMessage> messages;
365
367 {
368 UnusedWalker uw(_extracted_vars, *this);
369 _parser.getCommandLineRoot().walk(&uw);
370 Parser::appendErrorMessages(messages, uw.errors);
371 }
372
373 {
374 UnusedWalker uw(_extracted_vars, *this);
375 _root.walk(&uw);
376 Parser::appendErrorMessages(messages, uw.errors);
377 }
378
379 for (const auto & arg : _app.commandLine()->unusedHitParams(comm))
380 messages.emplace_back("unused command line parameter '" + arg + "'");
381
382 if (messages.size())
383 {
384 const auto message = _parser.joinErrorMessages(messages);
385 if (warn_unused)
386 mooseUnused(message);
387 if (err_unused)
388 {
390 _parser.parseError(messages);
391 else
393 message +
394 "\n\nAppend --allow-unused (or -w) on the command line to ignore unused parameters.");
395 }
396 }
397}
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Definition MooseError.h:311
void mooseUnused(Args &&... args)
Warning message used to notify the users of unused parts of their input files Really used internally ...
Definition MooseError.h:354
static void appendErrorMessages(std::vector< hit::ErrorMessage > &to, const std::vector< hit::ErrorMessage > &from)
Helper for accumulating errors from a walker into an accumulation of errors.
Definition Parser.C:547
const hit::Node & getCommandLineRoot() const
Definition Parser.C:533
bool getThrowOnError() const
Definition Parser.h:213
const hit::Node * queryCommandLineRoot() const
Definition Parser.h:152
static std::string joinErrorMessages(const std::vector< hit::ErrorMessage > &error_messages)
Helper for combining error messages into a single, newline separated message.
Definition Parser.C:560

Referenced by MeshOnlyAction::act(), and MooseApp::errorCheck().

◆ extractParams() [1/2]

void Moose::Builder::extractParams ( const hit::Node *const  section_node,
InputParameters p 
)

Attempt to extract values from input starting with the section in input in section_node based on the contents of the passed InputParameters p.

If section_node is not provided, only the global parameters will be checked

Definition at line 664 of file Builder.C.

665{
666 if (section_node)
667 mooseAssert(section_node->type() == hit::NodeType::Section, "Node type should be a section");
668
669 for (const auto & [name, par_unique_ptr] : p)
670 {
671 if (p.shouldIgnore(name))
672 continue;
673
674 const hit::Node * param_node = nullptr;
675
676 for (const auto & param_name : p.paramAliases(name))
677 {
678 // Check for parameters under the given section, if a section
679 // node was provided
680 if (section_node)
681 {
682 if (const auto section_param_node = section_node->find(param_name);
683 section_param_node && section_param_node->type() == hit::NodeType::Field &&
684 section_param_node->parent() == section_node)
685 param_node = section_param_node;
686 }
687 // No node found within the given section, check [GlobalParams]
688 if (!param_node && queryGlobalParamsNode())
689 {
690 if (const auto global_node = queryGlobalParamsNode()->find(param_name);
691 global_node && global_node->type() == hit::NodeType::Field &&
692 global_node->parent() == queryGlobalParamsNode())
693 {
694 mooseAssert(isGlobal(*global_node), "Could not detect global-ness");
695 param_node = global_node;
696 }
697 }
698
699 // Found it
700 if (param_node)
701 {
702 const auto fullpath = param_node->fullpath();
703 p.setHitNode(param_name, *param_node, {});
704 p.set_attributes(param_name, false);
705 _extracted_vars.insert(fullpath);
706
707 const auto global = isGlobal(*param_node);
708
709 // Check for deprecated parameters if the parameter is not a global param
710 if (!global)
711 if (const auto deprecated_message = p.queryDeprecatedParamMessage(param_name))
712 {
713 std::string key = "";
714 if (const auto object_type_ptr = p.queryObjectType())
715 key += *object_type_ptr + "_";
716 key += param_name;
717 _deprecated_params.emplace(key, *deprecated_message);
718 }
719
720 // Private parameter, don't set
721 if (p.isPrivate(param_name))
722 {
723 // Error if it isn't global, just once
724 if (!global && std::find_if(_errors.begin(),
725 _errors.end(),
726 [&param_node](const auto & err)
727 { return err.node == param_node; }) == _errors.end())
728 _errors.emplace_back("parameter '" + fullpath + "' is private and cannot be set",
729 param_node);
730 continue;
731 }
732
733 // Set the value, capturing errors
734 const auto param_field = dynamic_cast<const hit::Field *>(param_node);
735 mooseAssert(param_field, "Is not a field");
736 bool set_param = false;
737 try
738 {
739 ParameterRegistry::get().set(*par_unique_ptr, *param_field);
740 set_param = true;
741 }
742 catch (hit::Error & e)
743 {
744 _errors.emplace_back(e.message, param_node);
745 }
746 catch (std::exception & e)
747 {
748 _errors.emplace_back(e.what(), param_node);
749 }
750
751 // Break if we failed here and don't perform extra checks
752 if (!set_param)
753 break;
754
755 // Special setup for vector<VariableName>
756 if (auto cast_par = dynamic_cast<InputParameters::Parameter<std::vector<VariableName>> *>(
757 par_unique_ptr.get()))
758 if (const auto error = p.setupVariableNames(cast_par->set(), *param_node, {}))
759 _errors.emplace_back(*error, param_node);
760
761 // Possibly perform a range check if this parameter has one
762 if (p.isRangeChecked(param_node->path()))
763 if (const auto error = p.parameterRangeCheck(
764 *par_unique_ptr, param_node->fullpath(), param_node->path(), true))
765 _errors.emplace_back(error->second, param_node);
766
767 // Don't check the other alises since we've found it
768 break;
769 }
770 }
771
772 // Special casing when the parameter was not found
773 if (!param_node)
774 {
775 // In the case where we have OutFileName but it wasn't actually found in the input filename,
776 // we will populate it with the actual parsed filename which is available here in the
777 // parser.
778 if (auto out_par_ptr =
779 dynamic_cast<InputParameters::Parameter<OutFileBase> *>(par_unique_ptr.get()))
780 {
781 const auto input_file_name = getPrimaryFileName();
782 mooseAssert(input_file_name.size(), "Input Filename is empty");
783 const auto pos = input_file_name.find_last_of('.');
784 mooseAssert(pos != std::string::npos, "Unable to determine suffix of input file name");
785 out_par_ptr->set() = input_file_name.substr(0, pos) + "_out";
786 p.set_attributes(name, false);
787 }
788 }
789 }
790
791 // See if there are any auto build vectors that need to be created
792 for (const auto & [param_name, base_name_num_repeat_pair] : p.getAutoBuildVectors())
793 {
794 const auto & [base_name, num_repeat] = base_name_num_repeat_pair;
795 // We'll autogenerate values iff the requested vector is not valid but both the base and
796 // number are valid
797 if (!p.isParamValid(param_name) && p.isParamValid(base_name) && p.isParamValid(num_repeat))
798 {
799 const auto vec_size = p.get<unsigned int>(num_repeat);
800 const std::string & name = p.get<std::string>(base_name);
801
802 std::vector<VariableName> variable_names(vec_size);
803 for (const auto i : index_range(variable_names))
804 {
805 std::ostringstream oss;
806 oss << name << i;
807 variable_names[i] = oss.str();
808 }
809
810 // Finally set the autogenerated vector into the InputParameters object
811 p.set<std::vector<VariableName>>(param_name) = variable_names;
812 }
813 }
814}
std::optional< std::string > setupVariableNames(std::vector< VariableName > &names, const hit::Node &node, const Moose::PassKey< Moose::Builder >)
Entrypoint for the Builder to setup a std::vector<VariableName> parameter, which will setup the defau...
std::optional< std::string > queryDeprecatedParamMessage(const std::string &name) const
bool isPrivate(const std::string &name) const
Returns a Boolean indicating whether the specified parameter is private or not.
std::optional< std::pair< bool, std::string > > parameterRangeCheck(const Parameters::Value &value, const std::string &long_name, const std::string &short_name, const bool include_param_path)
Performs a range check on the parameter (which must have a range check)
void setHitNode(const std::string &param, const hit::Node &node, const SetParamHitNodeKey)
Sets the hit node associated with the parameter param to node.
virtual void set_attributes(const std::string &name, bool inserted_only) override
Override from libMesh to set user-defined attributes on our parameter.
bool shouldIgnore(const std::string &name)
Whether to ignore the value of an input parameter set in the input file or from the command line.
T & set(const std::string &name, bool quiet_mode=false)
Returns a writable reference to the named parameters.
const std::string * queryObjectType() const
bool isRangeChecked(const std::string &param_name) const
Return whether a parameter has a range check.
bool isParamValid(const std::string &name) const
This method returns parameters that have been initialized in one fashion or another,...
std::string getPrimaryFileName(bool stripLeadingPath=true) const
Return the primary (first) filename that was parsed.
Definition Builder.C:179
const hit::Node * queryGlobalParamsNode() const
Get the [GlobalParams] section node if it exists.
Definition Builder.C:831
bool isGlobal(const hit::Node &node) const
Definition Builder.C:824
static ParameterRegistry & get()
Get the singleton registry.
void set(libMesh::Parameters::Value &value, const hit::Field &field) const
Sets a parameter value given a hit field.
auto index_range(const T &sizable)

Referenced by CreateProblemDefaultAction::act(), SetupMeshAction::act(), extractParams(), and walkRaw().

◆ extractParams() [2/2]

void Moose::Builder::extractParams ( const std::string &  prefix,
InputParameters p 
)

Attempt to extract values from input starting with the section in input defined by the fullpath prefix based on the contents of the passed InputParameters p.

Definition at line 817 of file Builder.C.

818{
819 const auto node = _root.find(prefix);
820 extractParams((node && node->type() == hit::NodeType::Section) ? node : nullptr, p);
821}
void extractParams(const hit::Node *const section_node, InputParameters &p)
Attempt to extract values from input starting with the section in input in section_node based on the ...
Definition Builder.C:664

◆ getPrimaryFileName()

std::string Moose::Builder::getPrimaryFileName ( bool  stripLeadingPath = true) const

Return the primary (first) filename that was parsed.

Definition at line 179 of file Builder.C.

180{
181 const auto path = _parser.getLastInputFilePath();
182 return (strip_leading_path ? path.filename() : std::filesystem::absolute(path)).string();
183}
std::filesystem::path getLastInputFilePath() const
Definition Parser.h:199

Referenced by MeshOnlyAction::act(), extractParams(), and MooseApp::getFileName().

◆ initSyntaxFormatter()

void Moose::Builder::initSyntaxFormatter ( SyntaxFormatterType  type,
bool  dump_mode 
)

Creates a syntax formatter for printing.

Definition at line 400 of file Builder.C.

401{
402 switch (type)
403 {
404 case INPUT_FILE:
405 _syntax_formatter = std::make_unique<InputFileFormatter>(dump_mode);
406 break;
407 case YAML:
408 _syntax_formatter = std::make_unique<YAMLFormatter>(dump_mode);
409 break;
410 default:
411 mooseError("Unrecognized Syntax Formatter requested");
412 break;
413 }
414}

Referenced by MooseApp::setupOptions().

◆ isGlobal()

bool Moose::Builder::isGlobal ( const hit::Node &  node) const
private
Returns
Whether or not the given node node exists within the [GlobalParams] block

Definition at line 824 of file Builder.C.

825{
826 const auto global_params_node = queryGlobalParamsNode();
827 return global_params_node && node.parent() == global_params_node;
828}

Referenced by extractParams().

◆ listValidParams()

std::vector< std::string > Moose::Builder::listValidParams ( std::string &  section_name)

Definition at line 142 of file Builder.C.

143{
144 bool dummy;
145 std::string registered_identifier = _syntax.isAssociated(section_name, &dummy);
146 auto iters = _syntax.getActions(registered_identifier);
147
148 std::vector<std::string> paramlist;
149 for (auto it = iters.first; it != iters.second; ++it)
150 {
151 auto params = _action_factory.getValidParams(it->second._action);
152 for (const auto & it : params)
153 paramlist.push_back(it.first);
154 }
155 return paramlist;
156}
std::pair< std::multimap< std::string, ActionInfo >::const_iterator, std::multimap< std::string, ActionInfo >::const_iterator > getActions(const std::string &syntax) const
Returns a pair of multimap iterators to all the ActionInfo objects associated with a given piece of s...
Definition Syntax.C:329
std::string isAssociated(const std::string &real_id, bool *is_parent, const std::map< std::string, std::set< std::string > > &alt_map={}) const
Method for determining whether a piece of syntax is associated with an Action an optional syntax map ...
Definition Syntax.C:252

Referenced by Moose::UnusedWalker::walk().

◆ queryGlobalParamsNode()

const hit::Node * Moose::Builder::queryGlobalParamsNode ( ) const
private

Get the [GlobalParams] section node if it exists.

We need to separate this so that we can call extractParams() before calling build()

Definition at line 831 of file Builder.C.

832{
834 {
835 const auto syntax = _syntax.getSyntaxByAction("GlobalParamsAction");
836 mooseAssert(syntax.size() == 1, "Unexpected GlobalParamsAction syntax size");
837 _global_params_node = _root.find(syntax.front());
838 }
839 return *_global_params_node;
840}
std::optional< const hit::Node * > _global_params_node
The hit Node for the [GlobalParams] block, if any If set (could be null), it means we have searched f...
Definition Builder.h:164

Referenced by extractParams(), and isGlobal().

◆ validParams()

InputParameters Moose::Builder::validParams ( )
static

Parameters that are processed directly by the Parser and are valid anywhere in the input.

Add the "active" and "inactive" parameters so that all blocks in the input file can selectively create lists of active/inactive sub-blocks.

Definition at line 121 of file Builder.C.

122{
124
129 params.addParam<std::vector<std::string>>(
130 "active",
131 std::vector<std::string>({"__all__"}),
132 "If specified only the blocks named will be visited and made active");
133 params.addParam<std::vector<std::string>>(
134 "inactive",
135 std::vector<std::string>(),
136 "If specified blocks matching these identifiers will be skipped.");
137
138 return params;
139}
InputParameters emptyInputParameters()
void addParam(const std::string &name, const S &value, const std::string &doc_string)
These methods add an optional parameter and a documentation string to the InputParameters object.

Referenced by JsonSyntaxTree::addGlobal(), MooseServer::getAllValidParameters(), and Action::validParams().

◆ walk()

void Moose::Builder::walk ( const std::string &  fullpath,
const std::string &  nodepath,
hit::Node *  n 
)

Definition at line 289 of file Builder.C.

290{
291 // skip sections that were manually processed first.
292 if (std::find(_secs_need_first.begin(), _secs_need_first.end(), nodepath) !=
293 _secs_need_first.end())
294 return;
295
296 walkRaw(fullpath, nodepath, n);
297}

◆ walkRaw()

void Moose::Builder::walkRaw ( std::string  fullpath,
std::string  nodepath,
hit::Node *  n 
)
private

Definition at line 186 of file Builder.C.

187{
188 InputParameters active_list_params = Action::validParams();
190
191 const std::string section_name = n->fullpath();
192 const std::string curr_identifier = n->fullpath();
193
194 // Before we retrieve any actions or build any objects, make sure that the section they are in
195 // is active
196 if (!isSectionActive(*n))
197 return;
198
199 // Extract the block parameters before constructing the action
200 // There may be more than one Action registered for a given section in which case we need to
201 // build them all
202 bool is_parent;
203 std::string registered_identifier = _syntax.isAssociated(section_name, &is_parent);
204
205 // Make sure at least one action is associated with the current identifier
206 if (const auto [begin, end] = _syntax.getActions(registered_identifier); begin == end)
207 {
208 _errors.emplace_back(
209 "section '[" + curr_identifier +
210 "]' does not have an associated Action; you likely misspelled the Action/section name "
211 "or the app you are running does not support this Action/syntax",
212 n);
213 return;
214 }
215
216 // The DynamicObjecRegistrationAction changes the action multimap and would invalidate the
217 // iterators returned by _syntax.getActions, that's why we have to loop in this awkward way.
218 std::set<const Syntax::ActionInfo *> processed_actions;
219 while (true)
220 {
221 // search for an unprocessed action
222 auto [begin, end] = _syntax.getActions(registered_identifier);
223 auto it = begin;
224 for (; it != end && processed_actions.count(&it->second); ++it)
225 ;
226
227 // no more unprocessed actions
228 if (it == end)
229 break;
230
231 // mark action as processed
232 processed_actions.insert(&it->second);
233
234 if (is_parent)
235 continue;
236 if (_syntax.isDeprecatedSyntax(registered_identifier))
238 hit::errormsg(n, _syntax.deprecatedActionSyntaxMessage(registered_identifier)));
239
240 params = _action_factory.getValidParams(it->second._action);
241 params.set<ActionWarehouse *>("awh") = &_action_wh;
242 params.setHitNode(*n, {});
243
244 extractParams(n, params);
245
246 // Add the parsed syntax to the parameters object for consumption by the Action
247 params.set<std::string>("task") = it->second._task;
248 params.set<std::string>("registered_identifier") = registered_identifier;
249
250 if (!(params.have_parameter<bool>("isObjectAction") && params.get<bool>("isObjectAction")))
251 params.set<std::vector<std::string>>("control_tags")
252 .push_back(MooseUtils::baseName(curr_identifier));
253
254 // Create the Action
255 std::shared_ptr<Action> action_obj =
256 _action_factory.create(it->second._action, curr_identifier, params);
257
258 {
259 // extract the MooseObject params if necessary
260 std::shared_ptr<MooseObjectAction> object_action =
261 std::dynamic_pointer_cast<MooseObjectAction>(action_obj);
262 if (object_action)
263 {
264 auto & object_params = object_action->getObjectParams();
265 object_params.setHitNode(*n, {});
266 extractParams(n, object_params);
267 object_params.set<std::vector<std::string>>("control_tags")
268 .push_back(MooseUtils::baseName(curr_identifier));
269 }
270 // extract the Component params if necessary
271 std::shared_ptr<AddActionComponentAction> component_action =
272 std::dynamic_pointer_cast<AddActionComponentAction>(action_obj);
273 if (component_action)
274 {
275 auto & component_params = component_action->getComponentParams();
276 component_params.setHitNode(*n, {});
277 extractParams(n, component_params);
278 component_params.set<std::vector<std::string>>("control_tags")
279 .push_back(MooseUtils::baseName(curr_identifier));
280 }
281 }
282
283 // add it to the warehouse
284 _action_wh.addActionBlock(action_obj);
285 }
286}
void mooseDeprecated(Args &&... args)
Emit a deprecated code/feature message with the given stringified, concatenated args.
Definition MooseError.h:363
std::shared_ptr< Action > create(const std::string &action, const std::string &action_name, InputParameters &parameters)
Storage for action instances.
void addActionBlock(std::shared_ptr< Action > blk)
This method add an Action instance to the warehouse.
static InputParameters validParams()
Definition Action.C:26
static InputParameters validParams()
Definition EmptyAction.C:19
bool isDeprecatedSyntax(const std::string &syntax) const
Returns a Boolean indicating whether the syntax has been deprecated through a call to deprecateAction...
Definition Syntax.C:205
std::string deprecatedActionSyntaxMessage(const std::string syntax)
Returns the deprecation message for a given syntax that has been deprecated by deprecateActionSyntax.
Definition Syntax.C:194
std::string baseName(const std::string &name)
Definition MooseUtils.C:629
bool isSectionActive(const hit::Node &node)
Definition Builder.C:45

Referenced by build(), and walk().

Member Data Documentation

◆ _action_factory

ActionFactory& Moose::Builder::_action_factory
private

The Factory that builds actions.

Definition at line 139 of file Builder.h.

Referenced by buildFullTree(), buildJsonSyntaxTree(), listValidParams(), and walkRaw().

◆ _action_wh

ActionWarehouse& Moose::Builder::_action_wh
private

Action warehouse that will be filled by actions.

Definition at line 137 of file Builder.h.

Referenced by walkRaw().

◆ _app

MooseApp& Moose::Builder::_app
private

The MooseApp this Parser is part of.

Definition at line 133 of file Builder.h.

Referenced by errorCheck().

◆ _console

const ConsoleStream ConsoleStreamInterface::_console
inherited

An instance of helper class to write streams to the Console objects.

Definition at line 31 of file ConsoleStreamInterface.h.

Referenced by IterationAdaptiveDT::acceptStep(), MaterialOutputAction::act(), MeshOnlyAction::act(), SetupDebugAction::act(), FEProblemBase::adaptMesh(), Adaptivity::adaptMesh(), PerfGraph::addToExecutionList(), SimplePredictor::apply(), SystemBase::applyScalingFactors(), MultiApp::backup(), FEProblemBase::backupMultiApps(), CoarsenedPiecewiseLinear::buildCoarsenedGrid(), DefaultSteadyStateConvergence::checkConvergence(), MeshDiagnosticsGenerator::checkElementOverlap(), MeshDiagnosticsGenerator::checkElementTypes(), MeshDiagnosticsGenerator::checkElementVolumes(), FEProblemBase::checkExceptionAndStopSolve(), SolverSystem::checkInvalidSolution(), MeshDiagnosticsGenerator::checkLocalJacobians(), MeshDiagnosticsGenerator::checkNonConformalMesh(), MeshDiagnosticsGenerator::checkNonConformalMeshFromAdaptivity(), MeshDiagnosticsGenerator::checkNonMatchingEdges(), MeshDiagnosticsGenerator::checkNonPlanarSides(), MeshDiagnosticsGenerator::checkPolygons(), FEProblemBase::checkProblemIntegrity(), ReferenceResidualConvergence::checkResidualConvergence(), MeshDiagnosticsGenerator::checkSidesetsOrientation(), MeshDiagnosticsGenerator::checkWatertightNodesets(), MeshDiagnosticsGenerator::checkWatertightSidesets(), IterationAdaptiveDT::computeAdaptiveDT(), TransientBase::computeConstrainedDT(), DefaultMultiAppFixedPointConvergence::computeCustomConvergencePostprocessor(), NonlinearSystemBase::computeDamping(), FixedPointIterationAdaptiveDT::computeDT(), IterationAdaptiveDT::computeDT(), IterationAdaptiveDT::computeFailedDT(), IterationAdaptiveDT::computeInitialDT(), IterationAdaptiveDT::computeInterpolationDT(), FEProblemBase::computeLinearSystemTags(), LinearSystem::computeLinearSystemTags(), NonlinearSystemBase::computeScaling(), Problem::console(), TimeStepper::constrainStep(), IterationAdaptiveDT::constrainStep(), MultiApp::createApp(), FEProblemBase::execMultiApps(), FEProblemBase::execMultiAppTransfers(), Eigenvalue::execute(), SteadyBase::execute(), MFEMSteady::execute(), MessageFromInput::execute(), ActionWarehouse::executeActionsWithAction(), ActionWarehouse::executeAllActions(), MeshGeneratorSystem::executeMeshGenerators(), SidesetAroundSubdomainUpdater::finalize(), ElementQualityChecker::finalize(), FEProblemBase::finishMultiAppStep(), MeshRepairGenerator::fixOverlappingNodes(), SurfaceSubdomainsDelaunayRemesher::General2DDelaunay(), CoarsenBlockGenerator::generate(), OrientSurfaceMeshGenerator::generate(), PolyLineMeshFollowingNodeSetGenerator::generate(), MeshGenerator::generateInternal(), VariableCondensationPreconditioner::getDofToCondense(), InversePowerMethod::init(), NonlinearEigen::init(), FEProblemBase::initialAdaptMesh(), DefaultMultiAppFixedPointConvergence::initialize(), SubProblem::initialSetup(), EigenExecutionerBase::inversePowerIteration(), FEProblemBase::joinAndFinalize(), TransientBase::keepGoing(), IterationAdaptiveDT::limitDTByFunction(), IterationAdaptiveDT::limitDTToPostprocessorValue(), FEProblemBase::logAdd(), EigenExecutionerBase::makeBXConsistent(), Console::meshChanged(), SurfaceDelaunayGeneratorBase::meshNormalDeviation2D(), MooseBase::mooseDeprecated(), MooseBase::mooseDeprecatedNoTrace(), MooseBase::mooseInfo(), MooseBase::mooseWarning(), MooseBase::mooseWarningNonPrefixed(), ReferenceResidualConvergence::nonlinearConvergenceSetup(), Console::output(), DOFMapOutput::output(), MaterialPropertyDebugOutput::output(), PerfGraphOutput::output(), ReporterDebugOutput::output(), SolutionInvalidityOutput::output(), VariableResidualNormsDebugOutput::output(), ControlOutput::outputActiveObjects(), ControlOutput::outputChangedControls(), ControlOutput::outputControls(), Console::outputInput(), WebServerControl::outputMessage(), Console::outputPostprocessors(), PseudoTimestep::outputPseudoTimestep(), Console::outputReporters(), DefaultMultiAppFixedPointConvergence::outputResidualNorm(), Console::outputScalarVariables(), Console::outputSystemInformation(), FEProblemBase::possiblyRebuildGeomSearchPatches(), EigenExecutionerBase::postExecute(), AB2PredictorCorrector::postSolve(), ActionWarehouse::printActionDependencySets(), BlockRestrictionDebugOutput::printBlockRestrictionGroups(), BlockRestrictionDebugOutput::printBlockRestrictionMap(), BlockRestrictionDebugOutput::printBoundaryRestrictionGroups(), SolutionInvalidity::printDebug(), EigenExecutionerBase::printEigenvalue(), PicardSolve::printFixedPointConvergenceHistory(), SecantSolve::printFixedPointConvergenceHistory(), SteffensenSolve::printFixedPointConvergenceHistory(), FixedPointSolve::printFixedPointConvergenceReason(), PerfGraphLivePrint::printLiveMessage(), MaterialPropertyDebugOutput::printMaterialMap(), PerfGraphLivePrint::printStats(), NEML2Action::printSummary(), AutomaticMortarGeneration::projectPrimaryNodesSinglePair(), AutomaticMortarGeneration::projectSecondaryNodesSinglePair(), CoarsenBlockGenerator::recursiveCoarsen(), SolutionTimeAdaptiveDT::rejectStep(), MultiApp::restore(), FEProblemBase::restoreMultiApps(), FEProblemBase::restoreSolutions(), NonlinearSystemBase::setInitialSolution(), MooseApp::setupOptions(), Checkpoint::shouldOutput(), SubProblem::showFunctorRequestors(), SubProblem::showFunctors(), FullSolveMultiApp::showStatusMessage(), FEProblemSolve::solve(), FixedPointSolve::solve(), LinearSystem::solve(), NonlinearSystem::solve(), AStableDirk4::solve(), ExplicitRK2::solve(), ExplicitTVDRK2::solve(), ImplicitMidpoint::solve(), LStableDirk2::solve(), LStableDirk3::solve(), LStableDirk4::solve(), EigenProblem::solve(), FixedPointSolve::solveStep(), TransientMultiApp::solveStep(), MeshRepairGenerator::splitNonConvexPolygons(), PerfGraphLivePrint::start(), WebServerControl::startServer(), AB2PredictorCorrector::step(), NonlinearEigen::takeStep(), TransientBase::takeStep(), MFEMTransient::takeStep(), TerminateChainControl::terminate(), SubProblem::timestepSetup(), FEProblemBase::updateMeshXFEM(), Convergence::verboseOutput(), Console::writeTimestepInformation(), Console::writeVariableNorms(), and FEProblemBase::~FEProblemBase().

◆ _deprecated_params

std::map<std::string, std::string> Moose::Builder::_deprecated_params
private

Deprecation warnings (object type/param name) -> (message)

Definition at line 160 of file Builder.h.

Referenced by build(), and extractParams().

◆ _errors

std::vector<hit::ErrorMessage> Moose::Builder::_errors
private

The errors accumulated during the walk.

Definition at line 157 of file Builder.h.

Referenced by build(), extractParams(), and walkRaw().

◆ _extracted_vars

std::set<std::string> Moose::Builder::_extracted_vars
private

The set of all variables extracted from the input file.

Definition at line 151 of file Builder.h.

Referenced by build(), errorCheck(), and extractParams().

◆ _factory

Factory& Moose::Builder::_factory
private

The Factory associated with that MooseApp.

Definition at line 135 of file Builder.h.

Referenced by buildFullTree(), and buildJsonSyntaxTree().

◆ _global_params_node

std::optional<const hit::Node *> Moose::Builder::_global_params_node
mutableprivate

The hit Node for the [GlobalParams] block, if any If set (could be null), it means we have searched for it.

Definition at line 164 of file Builder.h.

Referenced by queryGlobalParamsNode().

◆ _parser

Parser& Moose::Builder::_parser
private

The front parser.

Definition at line 143 of file Builder.h.

Referenced by build(), errorCheck(), and getPrimaryFileName().

◆ _root

hit::Node& Moose::Builder::_root
private

The root node from the Parser.

Definition at line 145 of file Builder.h.

Referenced by build(), errorCheck(), extractParams(), and queryGlobalParamsNode().

◆ _secs_need_first

std::vector<std::string> Moose::Builder::_secs_need_first
private

The sections that we need to execute first (read during the final walk)

Definition at line 154 of file Builder.h.

Referenced by build(), and walk().

◆ _syntax

Syntax& Moose::Builder::_syntax
private

Reference to an object that defines input file syntax.

Definition at line 141 of file Builder.h.

Referenced by build(), buildFullTree(), buildJsonSyntaxTree(), listValidParams(), queryGlobalParamsNode(), and walkRaw().

◆ _syntax_formatter

std::unique_ptr<SyntaxTree> Moose::Builder::_syntax_formatter
private

Object for holding the syntax parse tree.

Definition at line 148 of file Builder.h.

Referenced by buildFullTree(), and initSyntaxFormatter().


The documentation for this class was generated from the following files: