Welcome to KADMOS’s documentation!¶
See sidebar on the right for the table of contents.
Documentation for the Code¶
Below the simplified class diagram of the KADMOS package is shown (not all methods are included for clarity). The UML can als be downloaded as PDF here
.

Example scripts for using KADMOS are available in the examples/scripts folder. The following scripts are available there:
Sellar Problem
: Small two-disciplinary analytical MDO problem based on MDO literature.Super-sonic Business Jet
: The jet design is decribed at http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19980234657.pdf and was implemented in Python for OpenMDAO by Sylvain Dubreuil and Remi Lafage of ONERA, the French Aerospace Lab.TU Delft Wing Design
: The wing design case described here was developed at TU Delft and takes a variety of different disciplines into account.
Graph¶
Below the KADMOS KadmosGraph class and its subclasses are listed.
KadmosGraph¶
-
class
kadmos.graph.graph_kadmos.
KadmosGraph
(*args, **kwargs)¶ -
add_contact
(name, email, uid, company=None, department=None, function=None, address=None, telephone=None, country=None, roles=None)¶ Method to add a contact to the graph organization.
Parameters: - name (str) – name of the contact
- email (str) – email address of the contact
- uid (str) – uid of the contact
- company (str) – company of which the contact is an employee, optional
- department (str) – department of company that the contact works at, optional
- function (str) – the function of the contact, optional
- address (str) – company address, optional
- telephone (int) – telephone number of the contact, optional
- country (str) – country of company, optional
- roles – organizational role(s) of contact within the project, optional
Type: str, list
Optional organizational contact roles:
- ‘architect’
- ‘integrator’
- ‘collaborativeEngineer’
- ‘toolSpecialist’
- ‘customer’
Adding a contact with one organizational role:
>>> add_contact('Maaike de Wit', 'M.D.deWit@student.tudelft.nl', 'mddewit', company='TU Delft', >>> roles='integrator')
Adding a contact with two (or more) organizational roles:
>>> roles = ['integrator', 'architect'] >>> add_contact('Maaike de Wit', 'M.D.deWit@student.tudelft.nl', 'mddewit', company='TU Delft', roles=roles)
Note
In case the contact uid already exists the old contact attributes are conserved and only new roles are added to the roles already present for that contact. To change old contact information, this has to be adjusted in the XML-file from which the old contact information is loaded.
Hint
To add (more) roles to the existing contact, it is recommended to use the method: add_contact_roles()
-
add_contact_roles
(uid, roles)¶ Method to add roles to existing contacts
Parameters: - uid (str) – uid of the contact
- roles (str, list) – organizational role(s) to be added to the existing contact
Optional organizational contact roles:
- ‘architect’
- ‘integrator’
- ‘collaborativeEngineer’
- ‘toolSpecialist’
- ‘customer’
Adding an organizational role to an existing contact:
>>> graph.add_contact('mddewit', roles='integrator')
Adding two (or more) organizational roles to an existing contact:
>>> roles = ['integrator', 'architect'] >>> graph.add_contact('mddewit', company='TU Delft', roles=roles)
Hint
This method only works for existing contacts. To add a contact use the method: add_contact()
-
add_dc_execution_details
(dc_uid, operating_system=None, integration_platform=None, command=None, description=None, software_requirements=None, hardware_requirements=None, replace_for=None)¶ Method to add execution details information to a design competence
Parameters: - dc_uid (str) – uid of the design competence
- operating_system (str) – Operating system the tool is running on (e.g. Linux, Windows, MAC OS), optional
- integration_platform (str) – Specification of the integration platform (e.g. RCE, Optimus), optional
- command (str) – Execution command (e.g. runTool.exe), optional
- description (str) – Additional infos of the execution, optional
- software_requirements (str) – Requirements on the software side, optional
- hardware_requirements (int) – Requirements on the hardware side, optional
- replace_for – Index of execution details to be replaced
-
add_dc_general_info
(dc_uid, description, status=None, creation_date=None, owner_uid=None, creator_uid=None, operator_uid=None, model_definition=None)¶ Method to add general info to a design competence
Parameters: - dc_uid (str) – uid of the design competence
- description (str) – description of the design competence
- status (str) – status of the design competence, optional
- creation_date (date) – creation date of the design competence, optional
- owner_uid (str) – uid of the owner of the design competence, optional
- creator_uid (str) – uid of the creator of the design competence, optional
- operator_uid (str) – uid of the operator of the design competence, optional
- model_definition (str) – model definition of the design competence, optional
-
add_dc_licensing
(dc_uid, license_type=None, license_specification=None, license_info=None)¶ Method to add licensing information to a design competence
Parameters: - dc_uid (str) – uid of the design competence
- license_type (str) – type of the license, optional
- license_specification (str) – specification of the license, optional
- license_info (str) – additional info about the license, optional
-
add_dc_performance_info
(dc_uid, precision=None, fidelity_level=None, run_time=None, verification=None)¶ Method to add performance information to a design competence
Parameters: - dc_uid (str) – uid of the design competence
- precision (float) – precision of the design competence, optional
- fidelity_level (int) – the level of fidelity of the design competence, optional
- run_time (float) – the run time of the design competence, optional
- verification (dict) – verification method of the design competence, optional
At least one of the optional elements for the performance information has to be defined.
Adding performance info with a verification:
>>> verification = {'method': 'dummy_method', 'verifier': contact_uid, 'result': 'dummy_result', >>> 'date': dateTime, 'version': dummy_version} >>> graph.add_dc_performance_info(dc_uid, verification=verification)
-
add_dc_remote_component_info
(dc_uid, single_or_multi_execution, job_name, remote_engineer, notification_message, data_exchange_dict=None)¶ Method to add execution information to a design competence
Parameters: - dc_uid (str) – uid of the design competence
- single_or_multi_execution (str) – execution type. Choose from ‘single’ or ‘multiple’.
- job_name (str) – job name of the design competence
- remote_engineer (str) – contact uid of remote engineering of the design competence
- notification_message (str) – message to notify remote_engineer
- data_exchange_dict (str) – data exchange settings of the design competence
Example use:
>>> single_or_multi = "single" >>> job_name = 'job_{}'.format(fpg.nodes[node]['label'].replace(' ', '')) >>> notification_message = 'Hi, could you please run this tool {} for me for my {} AGILE workflow ' >>> 'execution. Thanks.'.format(fpg.nodes[node]['label'].replace(' ', ''), architecture) >>> fpg.add_dc_remote_component_info(node, single_or_multi, job_name, 'ivangent', notification_message, >>> data_exchange_dict={'urlsite': 'some_url', >>> 'folder': 'some_folder'})
-
add_dc_sources
(dc_uid, repository_link=None, download_link=None, references=None)¶ Method to add source information to a design competence
Parameters: - dc_uid (str) – uid of the design competence
- repository_link (str) – link to the dc’s repository, optional
- download_link (str) – link to download the dc, optional
- references (list) – additional references, optional
-
add_default_description
()¶ Method to add a default description attribute to a graph
Returns: graph with default attribute description Return type: KadmosGraph
-
add_default_name
()¶ Method to add a default name attribute to a graph
Returns: graph with default attribute name Return type: KadmosGraph
-
add_edge
(u, v, attr_dict=None, **attr)¶ Add an edge between u and v.
Parameters: - u (can be, for example, strings or numbers. Nodes must be hashable (and not None) Python objects.) – node
- v (see u) – node
- attr_dict (str) – keyword arguments
- attr (str) – edge data (or labels or objects) can be assigned using keyword arguments.
The nodes u and v will be automatically added if they are not already in the graph.
Adding an existing edge results in an update of the edge data.
Edge attributes can be specified with keywords or by directly accessing the edge’s attribute dictionary. See examples below.
The following examples both add the edge e=(1,2) to graph G:
>>> G = nx.Graph() # or DiGraph, MultiGraph, MultiDiGraph, etc >>> e = (1, 2) >>> G.add_edge(1, 2) # explicit two-node form >>> G.add_edge(*e) # single edge as tuple of two nodes
Many NetworkX algorithms designed for weighted graphs use an edge attribute (by default ‘weight’) to hold a numerical value. Associate date to edge using keywords:
>>> G.add_edge(1, 2, weight=3) >>> G.add_edge(1, 3, weight=7, capacity=15, length=342.7)
For non-string attribute keys, use subscript notation.
>>> G.add_edge(1, 2) >>> G[1][2}.update({0: 5}) >>> G.edges[1, 2].update({0: 5})
-
add_fnode
(function_id, **attr_dict)¶ Add a function node
-
add_fnodes
(*function_ids)¶ Add multiple function nodes at once
-
add_function_instance
(node, serves, instance=None)¶ Method to change the instance of a node
Parameters: - node (str) – node to change the instance of
- serves (list) – list of nodes for which the new instances should provide inputs
- instance (int) – new instance, optional (default=None)
In case the default is used the instance added is the highest current instance + 1.
-
add_instance
(node, instance=None)¶ Method to change the instance of a node
Parameters: - node (str) – node to change the instance of
- instance (int) – new instance, optional (default=None)
In case the default is used the instance added is the highest current instance + 1.
-
add_instance_of
(file_path, node)¶ Method to duplicate a function with a higher instance
Parameters: - file_path (str) – path to CMDOWS file
- node (str) – node to get instance of
Returns: new node
Return type: str
-
add_node
(n, attr_dict=None, **attr)¶ Add a single node and update node attributes.
Parameters: - n (A node can be any hashable Python object except None.) – node
- attr_dict (dict) – dictionary of attribute keyword arguments.
- attr (str, dict) – Set or change node attributes using attr_dict.
Examples:
>>> G = nx.Graph() # or DiGraph, MultiGraph, MultiDiGraph, etc >>> G.add_node(1) >>> G.add_node('Hello') >>> K3 = nx.Graph([(0, 1), (1, 2), (2, 0)]) >>> G.add_node(K3) >>> G.number_of_nodes()
Use keywords set/change node attributes:
>>> G.add_node(1, size=10) >>> G.add_node(3, weight=0.4, UTM=('13S', 382871, 3972649))
Note
A hashable object is one that can be used as a key in a Python dictionary. This includes strings, numbers, tuples of strings and numbers, etc.
Note
On many platforms hashable items also include mutables such as NetworkX Graphs, though one should be careful that the hash doesn’t change on mutables.
-
add_objective_function_by_nodes
(*args, **kwargs)¶ This function adds objective functions to the graph using lists of variable nodes.
Parameters: - args (list) – list of nodes (list elements must be strings)
- kwargs (list) – list of nodes (list elements must be strings)
Returns: list of Objective Functions added to Graph
Return type: list
Each list produces a separate objective function node in the graph. If the list if passed as a keyword argument, the keyword is taken as the name of the objective function node. Otherwise, a standard name will be given to the node. Each objective function node has one output variable, and takes the nodes given in the argument list as input nodes.
If the provided nodes do not exist in the graph, a warning is given to the user on whether to continue the addition of the objective function to the graph using valid nodes.
Example:
>>> unnamed_function = list(>>list of graph nodes<<) >>> named_obj_fcn = list(>>list of graph nodes<<) >>> MyGraph.add_objective_function_by_nodes(unnamed_function, My_obj_fcn_name = named_obj_fcn)
The added objective function nodes can be queried by the attribute:
>>> Graph.nodes[node]["name"] == "Objective"
-
change_graph_class
(graph_class)¶ Method to adjust the class of a graph.
Returns: newly classed graph. Return type: graph_class
-
check
(raise_error=False)¶ Method to check the graph for validity and completeness.
Parameters: raise_error (bool) – determines if an error should be raised in case of an invalid graph Returns: result of the check Return type: bool Note
Several checks are performed. However the method does not guarantee the validity of the graph.
The checks are split into several categories and the methods _check_category_a, _check_category_b and _check_category_c are used to determine the overall validity and completeness. These sub methods are generally defined below and are then further refined in child classes.
-
check_cmdows_integrity
(convention=True, mpg=None)¶ Method to check the integrity of the CMDOWS file that can be created with the save method.
Parameters: - convention (bool) – option for applying a UID convention
- mpg (MdaoProcessGraph) – MPG to be saved together with graph
Returns: check result
Return type: bool
The integrity check is graph specific and thus needs to be executed for every graph before saving as CMDOWS if one wants to be sure that the CMDOWS file is integer. Due to its relative long runtime this check is however not performed automatically when using the save method.
-
check_for_coupling
(function_order, only_feedback=False, raise_error_if_true=False)¶ Function to check for the presence of coupling in a graph for a list of analyses in a given analysis order.
Parameters: - function_order (list) – list with node names of functions
- only_feedback (bool) – Boolean on whether to check for feedback coupling only (this is useful for Gauss-Seidel)
- raise_error_if_true (bool) – Boolean on whether to raise an error if coupling exists
Returns: Boolean value on whether coupling exists
Return type: bool
Note
only the functions in the function_order list are checked for feedback.
-
copy_as
(graph_class, as_view=False)¶ Method to make a copy of a graph and make it into another KADMOS graph class.
Returns: copy of the graph Return type: KadmosGraph
-
copy_edge
(old_edge, new_edge)¶ Method to copy an edge so that attributes of the old edge are maintained.
Parameters: - old_edge (tuple) – edge to be copied
- new_edge (tuple) – edge to be created
Returns: created edge
Return type: tuple
-
copy_node_with_suffix
(node, suffix, label_extension, attr_dict=None, **kwargs)¶ Method to simply copy a node and its attributes by creating a new node with a suffix.
Parameters: - node (str) – node to be copied
- suffix (str) – suffix to be added to the node ID
- label_extension (str) – extension for labels
- kwargs (dict, int) – keyword arguments will be added as node attributes
Returns: new node and enriched graph
Return type: str
-
count_function_nodes
()¶ This function counts the amount function nodes that are present in the graph.
Returns: amount of function nodes counted in graph Return type: int
-
create_dsm
(file_name, destination_folder=None, open_pdf=False, mpg=None, include_system_vars=True, summarize_vars=False, function_order=None, keep_tex_file=False, abbreviate_keywords=False, compile_pdf=True, colors_based_on='function_roles', pdflatex_path=None)¶ Method to create a (X)DSM PDF file
Parameters: - file_name (str) – name of the file to be saved
- destination_folder (str) – destination folder for the file to be saved
- open_pdf (bool) – option for opening the created file directly
- mpg (MdaoProcessGraph) – optional MPG graph to be saved with MDG as XDSM (if None a DSM is created)
- include_system_vars (bool) – option for including system variables (only applicable for DSMs)
- summarize_vars (bool) – option for summarizing label
- function_order (list) – optional function order for the diagonal of the graph (only applicable for DSMs)
- keep_tex_file (bool) – optional argument to keep the tex file of the PDF
- abbreviate_keywords (bool) – optional argument to keep make keywords shorter (input -> inp., output -> outp.)
- colors_based_on (str or None) – option to base the colors either on the problem role or the partitions
- pdflatex_path – option to add full path to pdflatex command if pdflatex is not part of the system commands
-
deepcopy
()¶ Method to make a deep copy of a graph.
Returns: deepcopy of the graph Return type: KadmosGraph
-
deepcopy_as
(graph_class)¶ Method to make a deep copy of a graph and make it into another KADMOS graph class.
Returns: deepcopy of the graph Return type: KadmosGraph
-
disconnect_problematic_variables_from
(function, disconnect_collided_targets=True, disconnect_shared_sources=True, ignore_list=[])¶ Method to automatically disconnect certain problematic variables with respect to a given function.
Parameters: - function (str) – function around which problematic variables are disconnected
- disconnect_collided_targets (bool) – setting to disconnect collided targets
- disconnect_shared_sources (bool) – setting to disconnect shared sources
- ignore_list (list) – setting to ignore certain nodes
If given as setting (disconnect_collided_targets=True) then the collided targets will be disconnected from this function. Also, if given as setting (disconnect_shared_sources=True), shared sources are also disconnected.
-
find_all_nodes
(category='all', subcategory='all', attr_cond=None, attr_include=None, attr_exclude=None, xpath_include=None, xpath_exclude=None, print_in_log=False, print_attributes='all')¶ Advanced search function to get nodes and their properties.
Parameters: - category (str) – category of the node (you can specify multiple in a list), see note for allowed values.
- subcategory (str) – subcategory of the node (you can specify multiple in a list), see note for allowed values.
- attr_cond (list) – conditional on the node attribute value (e.g. [‘execution time’,’>’,200])
- attr_include (list) – attributes to exclusively include in search
- attr_exclude (list) – attributes to exclude from search
- xpath_include (list) – xpaths to exclusively include in search
- xpath_exclude (list) – xpaths to exclude from search
- print_in_log (bool) – parameter to set printing in log on or off
- print_attributes (str or list) – attributes that should be printed in the log
Returns: list of all nodes that meet the search criteria
Return type: list
Note
The following categories are allowed:
- all
- variable
- variable group
- function
- architecture element
- RCE component
Note
The following subcategories are allowed:
GROUPS:
- all
- all variables
- all inputs
- all outputs
- all couplings
- all circular variables
- all PSG blocks
- all iterative blocks
- all design variables
VARIABLES:
- hole
- supplied input
- supplied shared input
- output
- collision
- coupling
- pure circular coupling
- shared coupling
- shared circular coupling
- collided coupling
- collided circular coupling
- collided shared coupling
- collided shared circular coupling
FUNCTIONS:
- independent
- source
- sink
- complete
ARCHITECTURE ELEMENTS:
Action blocks:
- optimizer
- MDA
- optimizer function
- MDA analysis
- independent output function
Parameters:
- initial guess design variable
- final design variable
- final output variable
- MDA coupling variable
- initial guess MDA coupling variable
- final MDA coupling variable
- consistency constraint variable
RCE COMPONENTS:
- Input Provider
- XML Merger
- XML PyMerger
- CPACS Tool
- Converger
- Optimizer
- Consistency constraint function
Example usage: Just get all nodes of a graph in a list:
>>> all_nodes = self.find_all_nodes()
Get all input nodes in a list and print them in the log as well:
>>> all_nodes = self.find_all_nodes(category='all', subcategory='all inputs', print_in_log=True)
Get all input nodes with a certain attribute value:
>>> all_nodes = self.find_all_nodes(category='all', subcategory='all inputs', >>> attr_cond=['execution time', '>', 5], print_in_log=True)
Get all nodes with any of the listed attribute values:
>>> all_nodes = self.find_all_nodes(category='all', subcategory='all', >>> attr_include=[['problem_role', ['constraint', 'objective']], >>> ['instance', 0]])
-
function_nodes
¶ Get list with all function nodes.
-
get_adjacency_matrix
(print_in_log=True)¶ Function to determine the adjacency matrix of a graph.
Parameters: print_in_log (bool) – option for printing the results Returns: different methods of storing the same adjacency matrix in one dictionary Return type: dict
-
get_architecture_node_ids
(mdao_architecture, number_of_groups=None)¶ Method to get the IDs of architecture nodes specific for a certain MDAO architecture.
Parameters: - mdao_architecture (str) – specified architecture (CO, BLISS-2000, etc)
- number_of_groups (int, None) – number of subgroups in distributed architectures
Returns: node IDs
Return type: tuple
-
get_architecture_node_labels
(mdao_architecture, number_of_groups=None)¶ Method to get the labels of architecture nodes specific for a certain MDAO architecture.
Parameters: - mdao_architecture (str) – specified architecture (CO, BLISS-2000, etc)
- number_of_groups (int, None) – number of subgroups in distributed architectures
Returns: node labels
Return type: tuple
-
get_categorized_nodes
(print_in_log=False)¶ Function that returns a dictionary with graph nodes grouped according to category and subcategory.
Parameters: print_in_log (bool) – option for printing the categories Returns: dictionary with analysis results Return type: dict
-
get_contracted_graph
(contraction_level)¶ This function contracts the nodes of a graph to the provided contraction level.
Parameters: contraction_level (int) – from 0 (highest level) to X (lowest level existing in XML schema) Returns: contracted_graph: graph with contracted nodes The contraction level refers to the xpath-level, which represents the position of the descendant with respect to its predecessors. The example below represents a level 3 node, with “cpacs” being at level zero.
/cpacs/aircraft/wings/wing
–cpacs
—-aircraft
——–wings
————wing
Note
All nodes above the contraction level are removed from the graph and replaced by a “variable group” node, which groups the removed nodes in a node at contraction level. This allows for a “de-cluttering” of the graph, with the graph connections still being represented.
-
get_direct_coupling_nodes
(*args, **kwargs)¶ This method returns the direct couplings between two nodes in a graph.
Parameters: - args (str, list) – nodes to be checked for couplings; at least two must be provided
- kwargs (direction: str) – print_couplings: option for printing all couplings with coupling direction and node (optional)
- kwargs – direction: set only coupling in certain direction (optional)
Returns: couplings: list of tuples containing the coupled nodes and the coupling node
Return type: list
This method is specifically written (and tested) with function nodes in mind. Direct coupling is defined as coupling with between two nodes through a third node.
In this function, each combination between the provided arguments is tested for couplings (in pairs). First, the two nodes in each pair are checked for common neighbors. If they do, the edges of the common neighbors are iterated to determine whether the node-pair is connected to each other, or only the neighbor. The direction of the coupling is also checked.
Example:
- The connection: F1 => N1 => F2
- Leads to: [(F1, F2, N1)]
-
get_first_node_instance
(node)¶ Method to obtain the first instance of a node
Parameters: node (str) – node to find first instance of Returns: node of first instance Return type: str
-
get_function_graph
(keep_objective_variables=False)¶ Method for replacing variable nodes by function connections.
Param: keep_objective_variables: if given the objective variables will remain in graph Type: keep_objective_variables: bool Returns: new graph without variable nodes Note
This function removes all variable nodes from the graph and replaces the variable connections of each function with function connections, such that if N(i) is a variable node, and F(i) a function node:
F(1) => N(1) => F(2) => N(2) => F(3)
becomes: F(1) => F(2) => F(3)
-
get_function_metadata
(node)¶ Function to get the node metadata in a list (used in the dynamic visualization package).
Parameters: node (str) – function node to collect the metadata for. Returns: list with metadata Return type: list
-
get_graph_properties
(*args)¶ This function retrieves the properties of a graph.
Param: args: specific properties to be retrieved (optional) Returns: dictionary containing the properties of the graph Return type: dict If no argument is given, the standard list of properties GRAPH_PROPERTIES is analyzed and their values are returned in a dict. If arguments are given, only this list will be used as standard list of properties.
-
get_node_attributes
(node, attr_list, print_in_log=False)¶ Function to get and print certain attributes of a node from the graph.
Parameters: - node (str) – node name
- attr_list (list) – list with attributes to be pulled
- print_in_log (bool) – option for printing to log
Returns: dictionary with node attributes
Return type: dict
-
get_node_subcategory
(node)¶ Method to analyse a node and to update the subcategory attribute of the node.
Parameters: node (str) – node in the graph Returns: subcategory of the node Return type: str The following table illustrates how the subcategory is determined based on the category, indegree and outdegree:
NODE CATEGORY SUBCATEGORY INDEGREE OUTDEGREE variable hole 0 0 supplied input 0 1 supplied shared input 0 >1 output 1 0 collision >1 0 coupling or pure circular coupling 1 1 shared coupling or shared circular coupling 1 >1 collided coupling or collided circular coupling >1 1 collided shared coupling or collided shared circular coupling >1 >1 function independent 0 0 source 0 >0 sink >0 0 complete >0 >0
-
get_nodes_based_on_strings
(*args, **kwargs)¶ This function enables the user to search graph nodes for specific strings.
Parameters: - args (str) – strings that graph nodes being searched for
- kwargs (include_all: bool) – include_all: If include_all is set to True, all matching nodes are added to returned list
Returns: matching nodes that user selected (all if include_all is True)
Each provided string will be searched for, and if multiple node are found for each string, the user will be able to select the ones desired. The other matched nodes are disregarded.
-
get_nodes_indegree
()¶ Function to get the indegree of all the graph nodes and store them in a dictionary.
Returns: dictionary with node name key and indegree integer value. Return type: dict
-
get_nodes_outdegree
()¶ Function to get the outdegree of all the graph nodes and store them in a dictionary.
Returns: dictionary with node name key and outdegree integer value. Return type: dict
-
get_nodes_subcategory
()¶ Method to analyse all nodes and to update the subcategory attributes of the nodes.
-
get_number_of_couplings
(node)¶ This function returns the number of couplings of a node in the graph.
Parameters: node – input node Returns: number of couplings for the input node Return type: int
-
get_same_graph_class
(graph, copy_type='deep')¶ Method to reinstantiate a given graph according to the same graph class as the self.
Parameters: - graph (DiGraph) – graph object to be reinstantiated
- copy_type (str) – setting to have a deep or shallow copy of the graph
Returns: reinstantiated graph
Return type:
-
get_source
(node)¶ Function to determine the single source of a given node. Throws error if node has multiple sources.
Parameters: node (str) – node for which source should be found Returns: source Return type: str
-
get_sources
(node)¶ Function to determine the sources of a given node.
Parameters: node (str) – node for which sources should be found Returns: list with sources Return type: list
-
get_subgraph_by_function_nodes
(*args, **kwargs)¶ This function retrieves a subgraph from the original graph only containing the argument nodes.
Parameters: - args (list, str) – arbitrary amount of graph nodes
- kwargs (copy_type: str) – copy_type: type of copy (clean or deep)
Returns: sub-graph only containing nodes provided as arguments, and their edges
Note
All arguments must be found in the graph.
-
get_system_inputs
(*args, **kwargs)¶ This method checks whether there are system inputs in the graph using the function nodes provided.
Parameters: - args – function nodes
- kwargs –
Returns: system input nodes dictionary
Return type: dict
Note
The function nodes should be provided in the args. If system inputs exist they are returned.
-
get_target
(node)¶ Function to determine the single target of a given node. Throws error if node has multiple targets.
Parameters: node (str) – node for which target should be found Returns: target Return type: str
-
get_targets
(node)¶ Function to determine the targets of a given node.
Parameters: node (str) – node for which targets should be found Returns: list with targets Return type: list
-
graph_has_nested_attributes
(*attrbs)¶ Method to test if graph has nested attributes
Parameters: attrbs (str) – attributes to check for nesting in graph Returns: presence of nested attribute Return type: bool
-
has_nodes
(nodes)¶ Function that checks whether all nodes given in a list are present in the graph.
Parameters: nodes (list) – list of nodes to be checked Returns: boolean whether all nodes have been found Return type: bool
-
inspect
()¶ Method to print an overview of the graph.
Returns: printed overview of the graph Return type: str
-
inspect_node
(node)¶ Method to print a node with details.
Parameters: node (str) – node Returns: printed node details Return type: str
-
inspect_nodes
(list_of_nodes)¶ Method to inspect/print a list of nodes with details.
Parameters: list_of_nodes (list) – node list Returns: printed details of nodes Return type: str
-
load_cmdows
(cmdows, check_list, ignore_modes=False, keep_running=False)¶ Method to load the graph from a CMDOWS file
Parameters: - cmdows (str) – CMDOWS file path
- check_list (list) – checks to be performed. See below.
- ignore_modes (bool) – for determining if modes are taken into account
- keep_running (bool) – for determining if errors should be raised
Returns: mpg
Return type: Note
check_list options:
- ‘consistent_root’: check if all in-/output files have the same root element
- ‘invalid_leaf_elements’: check for leaf elements that still have child elements in other in-/output files
- ‘schemas’: check if the in-/output files are consistent with the schema.
To perform all of the checks without stopping if an error is found by the checks:
>>> check_list = ['consistent_root', 'invalid_leaf_elements', 'schemas'] >>> graph.load_cmdows(cmdows, check_list, keep_running=True)
-
make_all_variables_valid
()¶ Method to analyze all variables in a graph and make any problematic variables valid.
Returns: graph with problematic variables removed. Problematic variable are holes and splittables. Splittable variables are split and holes will simply be removed.
-
merge_function_modes
(*args, **kwargs)¶ Function to contract certain modes of the same function.
Parameters: - args (str) – function (first arg) and then followed by modes to be contracted.
- kwargs (dict or str) – new_label to specify new node label manually (optional)
Returns: contracted graph
Return type:
-
merge_function_nodes_based_on_modes
(merge_funcs=None)¶ This class method merges all execution modes of the same function into a single node.
Parameters: merge_funcs (list, tuple) – List of tuple of functions to merge. If empty (default), all functions are merged. Returns: merged graph Mainly used for illustration purposes since information on the execution modes gets lost. Functions must be present in graph.
-
merge_functions
(*args, **kwargs)¶ Function to merge a collection of functions.
Parameters: - args (node_ids) – functions to be merged
- kwargs (dict) – new_label to specify new node label manually (optional)
Returns: graph with merged function
Return type:
-
merge_parallel_functions
(*args, **kwargs)¶ Function to merge a list of functions
Parameters: - args (node_ids) – functions to be merged
- kwargs (dict) – new_label to specify new node label manually (optional)
Returns: graph with merged functions
Return type:
-
merge_sequential_functions
(*args, **kwargs)¶ Function to merge a collection of functions.
Parameters: - args (node_ids) – functions to be merged in the given sequence
- kwargs (str) – new_label to specify new node label manually (optional)
Returns: graph with merged functions
Return type: Attention
It is assumed that the merged functions are actually executed in the sequence in which they are given to this function.
-
node_is_function
(node)¶ Function that checks whether a node is a function node or not.
Parameters: node (str) – node in graph Returns: check result Return type: bool
-
node_is_hole
(node)¶ Function that checks whether a node is a hole (unconnected).
Parameters: node (str) – node in graph Returns: check result Return type: bool
-
node_is_objective_function
(node)¶ This function checks whether the provided node is a objective function.
Parameters: node (str) – graph node to be tested Returns: check result Return type: bool - This function checks whether the provided node:
- exists in graph
- has name-attribute “Objective”
- has an out-degree of 1
- has an outgoing node with an out-degree of zero
Note
Only if all checks are satisfied, is the node a valid objective function node.
-
node_is_output
(node)¶ Function that checks whether a node is a system output.
Parameters: node (str) – node in graph Returns: check result Return type: bool
-
node_is_variable
(node)¶ Function that checks whether a node is a variable node or not.
Parameters: node (str) – node in graph Returns: check result Return type: bool
-
plot_adjacency_matrix
(fig_num=1, fig_size=(7, 7), show_now=True)¶ Draw the adjacency matrix in a plot window.
Parameters: - fig_num – figure number
- fig_size – figure size
- show_now – Boolean whether to plot directly (pausing the execution until the plot is closed), or not.
-
plot_graph
(fig_num=1, color_setting='default', positioning='circular', save_as=None, show_now=True, title=None, edge_label=False)¶ Function to plot a graph.
Parameters: - fig_num (int) – figure number
- color_setting (str) – choose from ‘default’, ‘sinks’, ‘categories’, ‘partitions’
- positioning (str) – choose from ‘circular’, ‘spring’
- save_as (bool) – save plot as figure file
- show_now (bool) – Boolean whether to plot directly (pausing the execution until the plot is closed), or not.
- title (str) – title of the graph
- edge_label (str) – edge attribute that will be shown for each edge in graph
Returns: window with plot
Hint
if the plot window is not showing, you need to add matplotlib.pyplot.show() at the end of your code
-
print_graph
(use_pretty_print=False)¶ Function to print the full graph.
Parameters: use_pretty_print (bool) – Boolean on whether to use pretty print for node and edge attributes
-
relabel_function_nodes
(mapping=None)¶ Method to relabel all function nodes so that they meet the minimum CMDOWS convention
Parameters: mapping (None, bool) – application of mapping required, optional (default=None) Returns: relabeled graph CMDOWS convention:
- Minimum information: ID
- Maximum information: ID[modeID][instanceID][version]
Note
modeID, instanceID and version are only provided if there is a function with the same ID that requires this specification to differentiate between the functions.
Example:
Design competences (full information):
- Aerodynamics[A][1][v1]
- Aerodynamics[A][2][v1]
- Aerodynamics[B][1][v1]
- Structures[A][1][v1]
- Structures[A}[1][v2]
- Propulsion[A][1][v2]
Design competences relabeled:
- Aerodynamics[A][1]
- Aerodynamics[A][2]
- Aerodynamics[B][1]
- Structure[v1]
- Structure[v2]
- Propulsion
-
remove_function_nodes
(*args)¶ Function that removes a function node
Parameters: args (str, list) – function node id(s) Returns: graph with nodes removed Return type: KadmosGraph Attention
Also the input and output variables that only have links to this specific function node are deleted. A simple remove_node of a function node might lead to unconnected variables in the graph.
-
save
(file_name, file_type='kdms', graph_check_critical=True, destination_folder=None, mpg=None, description='', creator='', version='1.0', timestamp=datetime.datetime(2021, 2, 9, 18, 0, 53, 815000), keep_empty_elements=False, pretty_print=False, convention=True, integrity=False)¶ Method to save the graph.
Parameters: - file_name (str) – name of the file to be saved
- file_type (str) – file_type
- graph_check_critical (bool) – option for raising errors in case of an invalid graph
- destination_folder (str) – destination folder for the file to be saved
- mpg (MdaoProcessGraph) – optional MPG graph to be saved with MDG
- description (str) – description of the file (only applicable for the cmdows file type)
- creator (str) – name of the creator of the file (only applicable for the cmdows file type)
- version (str, float, int) – version of the file (only applicable for the cmdows file type)
- timestamp (datetime) – timestamp to be saved in the file (only applicable for the cmdows file type)
- keep_empty_elements (bool) – option for keeping empty XML elements (only applicable for the cmdows file type)
- pretty_print (bool) – option for pretty XML printing (only applicable for the cmdows file type)
- convention (bool) – option for applying a UID convention (only applicable for the cmdows file type)
- integrity (bool) – option for doing an integrity file check (only applicable for the cmdows file type)
Note
Different output file types are implemented for saving graphs. They are listed below:
- kdms: the most simple file type which makes use of pickling
- cmdows: the most versatile file type especially suited for file exchange with other tools
- graphml: another file type especially suited for file exchange with other tools based on graphs
-
select_objectives_from_graph
(*args)¶ This functions lets the user select one or more objective functions from the graph.
Parameters: args (str) – objective functions to choose from Returns: list of objective functions Return type: list Note
Only functions can be selected as objectives. If no arguments are provided, user is prompted to select an objective from all functions in graph.
-
split_variables
(*args, **kwargs)¶ Method to split a problematic variable node into multiple separate valid nodes.
Parameters: - args (str, list) – problematic node in the graph
- kwargs –
Returns: graph with split variables
Return type: The following variables are considered problematic and will be handled by this function:
- pure circular coupling
- shared circular coupling
- collided coupling
- collision
- collided circular coupling
- collided shared coupling
- collided shared circular coupling
The following table shows an example situation for each of the different problematic variables:
PROBLEMATIC VARIABLE SITUATION FUNCTION ORDER RESOLVED AS pure circular coupling x1 <=> F1 n.a. x1/variableInstance1 => F1 => x1/variableInstance2 shared circular coupling F1 <=> x1 => F2, F3 n.a. - x1/variableInstance1 => F1 =>
- x1/variableInstance2 => F2, F3, etc.
collided (shared) coupling F1, F3 => x1 => F2, F4 F1, F2, F3, F4 F1 => x1/variableInstance1 => F2 F3 => x1/variableInstance2 => F4 collision F1, F2 => x1 F1, F2 F1 => x1/variableInstance1 F2 => x1/variableInstance2 collided circular coupling F1 <=> x1 <= F2, F3 n.a. x1/variableInstance1 => F1 => x1/variableInstance2 F2 => x1/variableInstance3 F3 => x1/variableInstance4 collided shared circular coupling F3, F5 <=> x1 <= F2 x1 => F1, F4, F6 F1, F2, F3, F4, F5, F6 x1/variableInstance1 => F2 => (..) x1/variableInstance2 => F1, F3 => (..) x1/variableInstance3 => F4, F5 => (..) x1/variableInstance4 => F6
-
DataGraph¶
-
class
kadmos.graph.graph_data.
DataGraph
(*args, **kwargs)¶ -
add_variable_default_values
(xml_file)¶ Method to add the default value of the variables based on a reference XML file containing those values.
Parameters: xml_file (file) – path (absolute or local) to the XML file containing the default values Returns: enriched graph with default values of the variables stored as attributes Return type: self
-
add_vnode
(node_id, **attr_dict)¶ Method to add a variable node
-
connect_function
(fnode, input_vars=(), output_vars=())¶ Connect a function’s inputs and/or outputs
-
connect_variable
(vnode, input_of=(), output_of=())¶ Connect a variable as input and/or output of multiple functions
-
get_coupling_dictionary
()¶ Function to get a coupling dictionary.
Returns: coupling dictionary Return type: dict For each function node, the dictionary indicates from which function nodes it gets its input and the number of variables it gets.
- F2 ==> x1, x2 ==> F1
- F3 ==> x3 ==> F1
Will give: {F1: {F2: 2, F3: 1}}
-
get_coupling_matrix
(function_order_method='manual', node_selection=None)¶ Function to determine the role of the different functions in the FPG.
Parameters: - function_order_method (str) – algorithm to be used for the order in which the functions are executed.
- node_selection (list) – selection of nodes for which the coupling matrix will be calculated only
Returns: graph with enriched function node attributes and function problem role dictionary
Return type:
-
get_feedback_info
(function_order, coupling_dict=None, use_runtime_info=False)¶ Function to determine the number of feedback loops and a runtime estimation for a given function order
Parameters: - function_order (list) – function order of the nodes
- coupling_dict (dict) – coupling dictionary indicating the input/output relations between the nodes
- use_runtime_info (bool) – option to take the runtime of the functions into account, else the default is set to 1
:return number of feedback loops :rtype int
-
get_highest_instance
(node)¶ Method to get the highest instance of a node.
Parameters: node (str) – node Returns: highest instance of the node Return type: int
-
get_possible_function_order
(method='auto', multi_start=None, check_graph=False, coupling_dict=None, node_selection=None, rcb=1.0, use_runtime_info=False)¶ Method to find a possible function order, in the order: pre-coupling, coupled, post-coupling functions. If partitions have already been set, the partitions will be taken into account and the function order in each partition will be determined as well.
Parameters: - method (str) – algorithm which will be used to minimize the feedback loops
- multi_start (int) – start the algorithm from multiple starting points
- check_graph (bool) – check whether graph has problematic variables
- coupling_dict (dict) – coupling dictionary of the graph
- node_selection (list) – option to get the order of only a selection of nodes instead of the entire graph
- rcb (float) – runtime-coupling balance, relative importance between feedback and runtime while optimizing function order. 1: min feedback, 0: min runtime
- use_runtime_info (bool) – option to use the runtime of the disciplines while determining the function order
:return Possible function order :rtype list
-
get_runtime_sequence
(sequence, use_runtime_info=False, coupling_dict=None, get_time_line=False)¶ Function to get the runtime of a sequence of nodes. Each node starts running as soon as all its required input data is available.
Parameters: - sequence (list) – sequence of nodes
- use_runtime_info (bool) – option to use the runtime of the nodes, if False the runtime for each node is set to 1
- coupling_dict (dict) – coupling dictionary of the graph
- get_time_line – option to return a time line which indicates at each time step which nodes are waiting
for input, which nodes are running and which nodes are finished
-
mark_as_constraint
(node, operator, reference_value, remove_unused_outputs=False)¶ Method to mark a node as a constraint.
Parameters: - node (str) – node to be marked (on the left side of the operator
- operator (str or string list) – constraint operator or list of constraint operators
- reference_value (numbers.Number or list) – value on the right side of the operator or list of values corresponding to the list of operators
- remove_unused_outputs (bool) – option to remove unused outputs
Returns: graph with enriched constraint node
-
mark_as_constraints
(nodes, operators, reference_values, remove_unused_outputs=False)¶ Method to mark multiple nodes as constraints.
Parameters: - nodes (list) – nodes to be marked.
- operators (str, list) – operators to be implemented (as list per node or as single operator for all)
- reference_values (float, list) – reference values to be used (as list of values per node or as single value for all)
- remove_unused_outputs (bool) – option to remove unused outputs
Returns: graph with enriched constraint nodes
Operators: ‘==’, ‘>’, ‘<’, ‘>=’ and ‘<=’
-
mark_as_design_variable
(node, lower_bound=None, upper_bound=None, samples=None, nominal_value=None, global_lb=None, global_ub=None, ignore_outdegree=False)¶ Method to mark a single node as a design variable and add the required metadata for its definition.
Parameters: - node (str) – node
- lower_bound (float) – lower bound of design variable
- upper_bound (float) – upper bound of design variable
- samples (list) – samples of design variable
- nominal_value (float) – nominal value of design variable
- global_lb (float) – global lower bound to be used when bounds are changed.
- global_ub (float) – global lower bound to be used when bounds are changed.
- ignore_outdegree (bool) – option to ignore the outdegree required
Returns: graph with enriched design variable node
-
mark_as_design_variables
(nodes, lower_bounds=None, upper_bounds=None, samples=None, nominal_values=None)¶ Method to mark a list of nodes as design variable and add metadata.
Parameters: - nodes (list or str) – list of nodes present in the graph
- lower_bounds (list, numbers.Number) – list of lower bound values
- upper_bounds (list, numbers.Number) – list of upper bounds
- samples (list) – nested list of kadmos values
- nominal_values (list, numbers.Number) – list of nominal values
Returns: graph with enriched design variable nodes
-
mark_as_objective
(node, remove_unused_outputs=False)¶ Method to mark a single node as objective.
Parameters: - node (str) – variable node
- remove_unused_outputs (bool) – option to remove unused outputs
Returns: graph enriched with objective node
-
mark_as_qoi
(node)¶ Function to mark a list of nodes as quantity of interest.
Parameters: - nodes (list) – list of nodes present in the graph
- remove_unused_outputs (bool) – option to remove unused outputs
-
mark_as_qois
(nodes, remove_unused_outputs=False)¶ Function to mark a list of nodes as quantity of interest.
Parameters: - nodes (list) – list of nodes present in the graph
- remove_unused_outputs (bool) – option to remove unused outputs
-
minimize_feedback
(nodes, method='auto', multi_start=None, get_evaluations=False, coupling_dict=None, rcb=1, use_runtime_info=False)¶ Function to find the function order with minimum feedback or minimum runtime
Parameters: - nodes (list) – nodes for which the feedback needs to be minimized
- method (str) – algorithm used to find optimal function order
- multi_start (int) – start the algorithm from multiple starting points
- get_evaluations (bool) – option to get the number of evaluations needed by the algorithm as output
- coupling_dict (dict) – coupling dictionary of the graph
- rcb (float) – runtime-coupling balance, relative importance between feedback and runtime while optimizing function order. 1: min feedback, 0: min runtime
- use_runtime_info (bool) – option to use the runtime of the disciplines while determining the function order
:return function order :rtype list :return number of evaluations (optional) :rtype int
-
remove_problematic_functions
()¶ Remove functions that are independent or sinks
-
remove_unused_nodes
()¶ Iteratively remove output nodes that do not have a problem role and then remove functions that have become sinks or independent.
Returns: the nodes that were removed Return type: list
-
remove_unused_outputs
()¶ Function to remove output nodes from an FPG which do not have a problem role.
Returns: the nodes that were removed Return type: list
-
sort_nodes_for_process
(nodes, coupling_dict=None)¶ Method to sort function nodes such that the correct process order is obtained. In case this function is used before the MDG is created, the number of feedback loops and runtime may change.
Parameters: - nodes (list) – function nodes to sort
- coupling_dict (dict) – coupling dictionary of the graph
Returns: nodes in sorted order
Return type: list
-
unmark_variable
(node)¶ Function to unmark any marked variable.
Parameters: node (str) – variable node to be unmarked Returns: graph with unmarked node
-
variable_nodes
¶ Get list with all variable nodes.
-
RepositoryConnectivityGraph¶
-
class
kadmos.graph.graph_data.
RepositoryConnectivityGraph
(*args, **kwargs)¶ -
create_mathematical_problem
(n_disciplines, coupling_density=None, n_clusters=1, cluster_strength=1, **kwargs)¶ Function to get a mathematical problem according to the variable complexity problem as described in: Zhang D., Song B., Wang P. and He Y. ‘Performance Evaluation of MDO Architectures within a Variable Complexity Problem’, Mathematical Problems in Engineering, 2017.
Parameters: - n_disciplines (int) – Number of disciplines
- coupling_density (float) – percentage of couplings, 0 no couplings, 1 all possible couplings
- n_clusters (int) – Number of clusters within the mathematical problem
- cluster_strength – Indicates the strength of the clustering. 0 means that a completely random problem is
generated with no bias towards clustering at all. 1 means a complete bias towards clustering, so all couplings are placed within the clusters. If more couplings are required then the amount available within the clusters, couplings outside the clusters are made as well. :type cluster_strength: float :return enriched rcg with the mathematical problem :return dictionary containing the properties of the mathematical problem
-
get_fpg_based_on_function_nodes
(*args, **kwargs)¶ Function to get the Fundamental Problem Graph based on a list of (or a single) function.
Parameters: - args (str) – node names of functions of interest
- kwargs (name: str) – name: name of the graph to be generated
Returns: Fundamental Problem Graph object
Return type:
-
get_fpg_based_on_list_functions
(list_of_functions, name='FPG')¶ Function to get a Fundamental Problem Graph based on a list of functions.
Parameters: - list_of_functions (list) – list with strings that specify the desired functions
- name (str) – name of the graph to be generated
Returns: Fundamental Problem Graph object
Return type:
-
get_fpg_based_on_sinks
(list_of_sinks, name='FPG')¶ Function to get the a Fundamental Problem Graph based on a list of sinks/required output variables.
Parameters: - list_of_sinks (list) – list with strings that specify the desired output
- name (str) – name of the graph to be generated
Returns: Fundamental Problem Graph object
Return type:
-
get_fpg_by_function_nodes
(*args)¶ This function creates a new (FPG)-graph based on the selected function nodes.
Parameters: args (list, str) – arbitrary amount of graph nodes Returns: new fpg graph Return type: FundamentalProblemGraph
-
get_function_paths_by_objective
(*args, **kwargs)¶ This function takes an arbitrary amount of objective nodes as graph sinks and returns all path combinations of tools.
Parameters: - args (list, str) – arbitrary amount of objective nodes
- kwargs (bool, str) – filter options to limit possible path combinations
Returns: all possible FPG path combinations for the provided objective nodes
If no arguments are given, user is prompted to select objectives from the graph.
Hint
The tool combinations are found using the function itertools.product() and can lead to significant computation times for large graphs. If this is the case, the user is prompted whether to continue or not.
A variety of filters can be applied to the search of possible tools combinations, some of which reduce the computation time.
Note
kwargs:
- obj_vars_covered - ensures that all objective variables are used in tool configurations
- ignore_funcs - ignores functions for the config
- source - source node; if provided, must be in config
-
get_path_combinations
(*args, **kwargs)¶ This function takes lists of subsets and generates all possible combinations between them.
Parameters: - args (list) – lists of subsets that will be used to find configurations
- kwargs (int) – see optional arguments
Returns: set of all unique path combinations
This is done by using the itertools.product() function. If the amount of expected evaluations exceeds a pre-set minimum, the user will be asked if to continue or not; because the process can take a long time and use up many resources.
Note
Optional arguments:
- min_func: minimum amount of functions in each configuration
- max_func: maximum amount of functions in each configuration
-
select_function_combination_from
(*args, **kwargs)¶ This function takes all provided workflow configurations and lists them according to their characteristics.
Parameters: - args (list) – workflow configurations
- kwargs (bool, str, int) – see optional arguments
Returns: sorted list of workflow configurations
Return type: list
Note
Optional arguments:
- ‘print_combos’ - option to print the combinations in a table
- ‘n_limit’ - amount of combinations that will be printed in the table
- ‘sort_by’ - characteristic to sort workflow configurations by
- ‘sort_by ascending’ - option to sort workflow configurations by ascension
- ‘plot_combos’ - option to plot the combinations in a graph
The user can choose the workflow configuration from the list.
A warning is given to the user if the amount of total configurations exceeds n = 1e4. Print limit is set to [0-20] by default.
Note
sort_by must be one of [“couplings”, “system_inputs”, “edges”, “nodes”].
-
FundamentalProblemGraph¶
-
class
kadmos.graph.graph_data.
FundamentalProblemGraph
(*args, **kwargs)¶ -
add_function_problem_roles
()¶ Method to determine the function problem roles of the functions in an FPG.
Returns: Return type:
-
add_problem_formulation
(mdao_definition, function_order, doe_settings=None)¶ Method to add the problem formulation.
Parameters: - mdao_definition (str) – MDF-GS, MDF-J, IDF, CO, BLIS-2000
- function_order (list) – order or functions to be included in graph
- doe_settings (dict) – doe settings of the graph
Returns: graph enriched with problem formulation
Return type: Fundamental ProblemGraph
-
change_settings_distributed_convergence
()¶ Function to change the settings when the distributed convergence is set as architecture.
Options: - Add or remove a local converger for each partition - Set the convergence method within each partition (Gauss-Seidel (default) or Jacobi) - Let partitions run in sequence instead of parallel
-
check_and_get_coupled_functions_groups
(coupled_functions_groups=None)¶ Method to obtain the coupled functions and check them if provided
Parameters: coupling_functions_groups (list) – (optional) coupled function groups Returns: coupled function groups Return type: list Checks whether the function is a node of the graph with the problem role ‘coupled’
-
check_and_get_design_variables
(des_vars=None)¶ Method to obtain the design variable nodes and check them if provided
Parameters: des_vars (list) – (optional) design variable nodes Returns: design variable nodes Return type: list Checks whether the function is a node of the graph with the problem role ‘design variable’
-
check_and_get_post_coupling_functions
(post_coupling_functions=None)¶ Method to obtain the post-coupled functions and check them if provided
Parameters: post_coupling_functions (list) – (optional) post-coupled function nodes Returns: post-coupled function nodes Return type: list Checks whether the function is a node of the graph with the problem role ‘post-coupled’
-
check_and_get_pre_coupling_functions
(pre_coupling_functions=None)¶ Method to obtain the pre-coupled functions and check them if provided
Parameters: pre_coupling_functions (list) – (optional) pre-coupled function nodes Returns: pre-coupled function nodes Return type: list Checks whether the function is a node of the graph with the problem role ‘pre-coupled’
-
create_mdg
(mg_function_ordering, name='MDG')¶ Function to automatically create an MDG based on an FPG.
Parameters: - mg_function_ordering (dict) – dictionary with MDAO graph function ordering
- name (str) – name for the MDG graph
Returns: baseline MDG (only added additional action blocks, no changed connections)
Return type: MdaoDataGraph
-
create_mpg
(mg_function_ordering, name='MPG')¶ Function to automatically create a MPG based on a FPG.
Parameters: - mg_function_ordering (dict) – dictionary with MDAO graph function ordering
- name (str) – name for the MPG graph
Returns: unconnected FPG (only action blocks and their diagonal position)
Return type:
-
determine_scope_constraint_functions
(cnstrnt_vars=None, coupled_functions_groups=None, post_coupling_functions=None, pre_coupling_functions=None)¶ Method to determine the scope (global, local) of the constraint functions based on the constraint variables and to determine on which coupled function groups the constraint function depends.
Parameters: - cnstrnt_vars (list) – (optional) constraint variables to be determined
- coupled_functions_groups (list) – (optional) list of lists with coupled functions groups
- post_coupling_functions (list) – (optional) list with post-coupling functions
Returns: global constraint variables and functions, local constraint variables and functions, groups indices per constraint function
Return type: tuple
-
determine_scope_design_variables
(des_vars=None, coupled_functions_groups=None, pre_coupling_functions=None, post_coupling_functions=None)¶ Method to determine the scope (global, local) of the design variables and to determine to which coupled function groups the design variable belongs.
Parameters: - des_vars (list) – list of design variables (if not given, it is taken from the graph)
- coupled_functions_groups (list) – list with list of coupled function groups
- pre_coupling_functions (list) – list with list of pre-coupled function groups
Returns: list of global design variables, list of local design variables, dictionary with dependencies
Return type: tuple
-
get_group_couplings
(coupled_functions_groups=None)¶ Method to obtain group couplings and their indices.
Parameters: coupled_functions_groups (list) – (optional) list of coupled function groups Returns: group couplings present Return type: list Returns: index of coupled groups Return type: dict
-
get_mdg
(name='MDG', **kwargs)¶ Create the MDAO data graph for a given FPG.
Parameters: name (str) – name of the new graph Returns: MDAO data graph Return type: MdaoDataGraph
-
get_mg_function_ordering
()¶ Method to determine the function ordering for MDAO graphs (FPG and MDG) based on an FPG.
Returns: function ordering dictionary Return type: dict
-
get_objective_node
()¶ Method to get the single (or non-existent) objective node from a graph.
Returns: objective node or None if no objective node is present Return type: str, None
-
get_partition_info
(partitions, coupling_dict=None, use_runtime_info=False, local_convergers=False)¶ Function to get information about the partitions. The functions returns:
- Total number of connections to converge, divided in:
- Number of feedback connections in each partition
- Total number of cut edges due to the partitioning
- Estimation of the runtime for each partition
Parameters: - partitions (list) – list which indicates which nodes are in which partition
- coupling_dict (dict) – coupling dictionary indicating the input/output relations between the nodes
- use_runtime_info – option to take the runtime information of the nodes into account when determining the
partitions :type use_runtime_info: bool :param local_convergers: option to add local convergers to the partitions if feedback within the partition exist :param local_convergers: bool :return total_connections: total number of connections to converge :return partition_variables: number of feedback connections in each partition :return system_variables: total number of cut edges due to the partitioning :return run_time_partitions: runtime estimation for each partition
..note:: If a converger is present in a partition, the iterations are not taken into account in the runtime estimation
-
get_sub_level_functions
(local_objective_function, local_cnstrnt_funcs, coupled_functions_group, mg_function_ordering=None, add_system_functions_to_subsystems=True)¶ Method to obtain subsystem level functions.
Parameters: - local_objective_function (str) – local objective function
- local_cnstrnt_funcs (list) – local constraint function(s)
- coupled_functions_group (list) – coupled functions
- mg_function_ordering (dict) – (optional) MdaoGraph function ordering
Returns: subsystem level functions
Return type: dict
-
get_sys_post_couplings
(sys_level_post_coupled, coupled_functions_groups=None)¶ Method to obtain the system-level post-couplings functions.
Parameters: - sys_level_post_coupled (list) – nodes with attributed problem role ‘post-coupling’
- coupled_functions_groups (list) – (optional) list of coupled function groups
Returns: system-level post-coupling functions
Return type: list
Returns: indices ot system-level post-coupling functions
Return type: dict
-
get_system_level_functions
(global_objective_function, global_cnstrnt_functions, mg_function_ordering=None, add_system_functions_to_subsystems=True)¶ Method to obtain system level functions
Parameters: - global_objective_function (str) – global objective function
- global_cnstrnt_functions (list) – global constraint function(s)
- mg_function_ordering (dict) – MdaoGraph function ordering
Returns: system level functions
Return type: dict
-
impose_mdao_architecture
()¶ Method to directly get both the MDG and MPG of an FPG.
Returns: MdaoDataGraph and MdaoProcessGraph Return type: tuple
-
partition_graph
(n_parts, node_selection=None, use_runtime_info=False, local_convergers=False, rcb_partitioning=0.0, rcb_order=1.0, coupling_dict=None, tpwgts=None)¶ Partition a graph using the Metis algorithm (http://glaros.dtc.umn.edu/gkhome/metis/metis/overview).
Parameters: n_parts – number of partitions requested (algorithm might provide less if the number of partitions is close to the number of nodes) :type n_parts: int :param node_selection: option to give the nodes that need to be included in the partitions. If none are given, the nodes in the partitions are selected based on the mdao architecture :type node_selection: list :param use_runtime_info: option to take the runtime information of the nodes into account when determining the partitions :type use_runtime_info: bool :param local_convergers: option to add local convergers to the partitions if feedback within the partition exist :type local_convergers: bool :param rcb_partitioning: runtime-coupling balance for partitioning, relative importance between cut edges and runtime while making the partitions. 1: min cut edges, 0: min runtime :type rcb_partitioning: float :param rcb_order: runtime-coupling balance for sequencing, relative importance between feedback and runtime while determining the function order within the partitions. 1: min feedback, 0: min runtime :type rcb_order: float :param coupling_dict: coupling dictionary indicating the input/output relations between the nodes :type coupling_dict: dict :param tpwgts: list of target partition weights :type tpwgts: list
Note
partitioning can only be performed on undirected graphs. Therefore every graph input is translated into an undirected graph.
-
select_number_of_partitions
(partition_range='pareto', node_selection=None, use_runtime_info=False, local_convergers=False, rcb_partitioning=0.0, rcb_order=1.0, coupling_dict=None, plot_solutions=False)¶ Function to evaluate the properties of different number of partitions and to select the best one.
Parameters: partition_range – range of number of partitions that need to be evaluated. If set to ‘pareto’, a pareto front will be calculated. :type partition_range: list or str :param node_selection: option to give the nodes that need to be included in the partitions. If none are given, the nodes in the partitions are selected based on the mdao architecture :type node_selection: list :param use_runtime_info: option to take the runtime information of the nodes into account when determining the partitions :type use_runtime_info: bool :param local_convergers: option to add local convergers to the partitions if feedback within the partition exist :type local_convergers: bool :param rcb_partitioning: runtime-coupling balance for partitioning, relative importance between cut edges and runtime while making the partitions. 1: min cut edges, 0: min runtime :type rcb_partitioning: float :param rcb_order: runtime-coupling balance for sequencing, relative importance between feedback and runtime while determining the function order within the partitions. 1: min feedback, 0: min runtime :type rcb_order: float :param coupling_dict: coupling dictionary indicating the input/output relations between the nodes :type coupling_dict: dict :param plot_solutions: option to plot the characteristics of different number of partitions :type plot_solutions: bool
-
MdaoProcessGraph¶
-
class
kadmos.graph.graph_process.
MdaoProcessGraph
(*args, **kwargs)¶ -
add_process
(sequence, start_step, mdg, end_in_iterative_node=None)¶ Method to add a process to a list of functions.
The sequence is assumed to be the order of the functions in the input list. The sequence is considered simple, since it is not analyzed for the possibility to run functions in parallel.
Parameters: - sequence (list) – list of functions in the required sequence
- start_step (int) – process step number for the first element in the sequence
- mdg (MdaoDataGraph) – data graph to be used for execution dependencies
- end_in_iterative_node (basestring) – (optional) iterative node to which the last function should go
-
add_process_partitions
(previous_sequence, partitions, next_sequence, start_step, mdg, end_in_iterative_node=None)¶ Function to add the process in the partitions
Parameters: - previous_sequence (list) – previous list of functions in the required sequence
- partitions (dict) – process partitions to be added
- next_sequence (list) – next list of functions in the required sequence
- start_step (int) – process step number for the first element in the sequence
- mdg (MdaoDataGraph) – data graph to be used for execution dependencies
- end_in_iterative_node (basestring) – (optional) iterative node to which the last function should go
Returns: graph enriched with process partitioning
Return type:
-
connect_nested_iterators
(master, slave, direction='slave->master')¶ Method to connect a slave iterator to a master iterator in a nested configuration.
Parameters: - master (basestring) – upper iterator node in the nested configuration
- slave (basestring) – lower iterator node in the nested configuration
Returns: graph enriched with nested iterators
Return type: An example is if a converger inside an optimizer in MDF needs to be linked back.
-
get_process_hierarchy
()¶ Method to assess the hierarchy of the process based on the process lines in a ProcessGraph.
Returns: nested list with process hierarchy, e.g. [COOR, A, [OPT, [CONV, D1, D2], F1, G1, G2]] Return type: list
-
get_process_list_iteratively
(cycle_node, cycles)¶ Method to obtain the process list of a collection of cycles given an iterative cycle_node. The process is iterative, since for every subcycle found the method is called again.
Parameters: - cycle_node (str) – the node that is starting and closing the cycle (e.g. coordinator, optimizer, etc.)
- cycles (list) – collection of cycles found in the graph
Returns: the process list
Return type: list
Note
Example of a process list: [COOR, A, [OPT, [CONV, D1, D2], F1, G1, G2]]
-
get_process_order
(only_executable_block=True)¶ Method to receive a list with the right order of the process based on process step numbers.
-
MdaoMixin¶
-
class
kadmos.graph.mixin_mdao.
MdaoMixin
¶ -
insert_node_on_diagonal
(node, diagonal_pos, attr_dict=None)¶ Function to insert a node on the diagonal with functions.
Parameters: - node (str) – node identifier
- diagonal_pos (int) – integer with diagonal position (>= 0)
- attr_dict (dict) – dictionary with node attributes
Returns: graph with inserted node on diagonal
Return type:
-
EquationMixin¶
-
class
kadmos.graph.mixin_equation.
EquationMixin
¶ -
add_equation
(edge_or_node, equation, language='Python')¶ Method to add an equation to an output edge.
Parameters: - edge_or_node (list, str) – graph edge or node under consideration.
- equation (str) – equation to be added
- language (str) – equation language used for the equation
Returns: equation
Return type: str
-
add_equation_label
(edge, labeling_method='node_label', language='Python')¶ Method to add an equation label to a edge that can (safely) be used as reference in an equation.
Parameters: - edge (str) – graph edge under consideration
- labeling_method (str) – select method for automatic label string determination (node_id or node_label)
- language (str) – equation language used for the equation label
Returns: label
Return type: str
-
add_equation_labels
(nodes, language='Python', labeling_method='node_id')¶ Method to add equation labels automatically to all input edges connected to the specified list of nodes
Parameters: - nodes (list) – list of nodes
- language (str) – equation language used for the equation label
- labeling_method (str) – select method for automatic label string determination (node_id or node_label)
Returns: labels
Return type: str
-
add_mathematical_function
(input_nodes, function_node, output_nodes, function_type='regular')¶ Method to add mathematical function to graph
Parameters: - input_nodes (str, list) – input nodes of the mathematical function
- function_node (str) – function node of the mathematical function
- output_nodes (str, list) – output nodes of the mathematical function
- function_type ('regular', 'consistency' or 'balance') – type of function, optional (default=’regular’)
Returns: mathematical function
Return type: str
-
VistomsMixin¶
-
class
kadmos.graph.mixin_vistoms.
VistomsMixin
¶ -
vistoms_add
(vistoms_dir, mpg=None, function_order=None, reference_file=None, compress=False, remove_after_compress=True, graph_id=None, replacement_id=None, xml_file=None, file_refs_repl=None)¶ Function to add a graph to a existing VISTOMS instance.
Parameters: - vistoms_dir (str) – directory of the VISTOMS directory to be used for addition
- mpg (MdaoProcessGraph) – optional MPG graph to be saved with MDG as XDSM (if None a DSM is created)
- function_order (list) – optional function order for the diagonal of the graph (only applicable for DSMs)
- reference_file (str) – file from which reference values are extracted (either full path or file in same folder)
- compress (bool) – setting whether to compress the final VISTOMS instance folder to a zip file
- remove_after_compress (bool) – setting whether to remove the original folder after compression
- graph_id (str) – indentifier of the new graph
- replacement_id (str) – indentifier of the graph to be replaced
- xml_file (dict) – Name of the CMDOWS xml-file
- file_refs_repl – Replacement of existing file references in the original HTML
Returns: enriched vistoms instance
Return type: Hint
In one VISTOMS instance different graphs can be shown. For example it is possible to include different architectures for the same problem in one VISTOMS instance.
-
vistoms_add_json
(mpg=None, function_order=None, graph_id=None)¶ Function to add a graph to a existing VISTOMS instance.
In one VISTOMS instance different graphs can be shown. For example it is possible to include different architectures for the same problem in one VISTOMS instance.
Parameters: - mpg (MdaoProcessGraph) – optional MPG graph to be saved with MDG as XDSM (if None a DSM is created)
- function_order (list) – optional function order for the diagonal of the graph (only applicable for DSMs)
-
vistoms_create
(vistoms_dir, vistoms_version=None, mpg=None, function_order=None, reference_file=None, compress=False, remove_after_compress=True, graph_id=None, use_png_figs=False, file_refs=None, xml_file=None)¶ Function to create a new VISTOMS instance from a graph.
Parameters: - vistoms_dir (str) – directory of the VISTOMS directory to be created
- vistoms_version – version of the VISTOMS instance to be used (as stored in the package itself)
- vistoms_version – str
- mpg (MdaoProcessGraph) – optional MPG graph to be saved with MDG as XDSM (if None a DSM is created)
- function_order (list) – optional function order for the diagonal of the graph (only applicable for DSMs)
- reference_file (str) – file from which reference values are extracted (either full path or file in same folder)
- compress (bool) – setting whether to compress the final VISTOMS instance folder to a zip file
- remove_after_compress (bool) – setting whether to remove the original folder after compression
- graph_id (str) – identifier of the new graph
- use_png_figs (bool) – setting whether to use the PNG figures instead of the SVG figures for local execution
- file_refs (dict) – setting to provide file references manually (to use VISTOMS on a server)
- xml_file (file) – Name of the CMDOWS xml file
Returns: vistoms instance
Return type:
-
vistoms_start
(file_dir=None, mpg=None)¶ Function to open an interactive VISTOMS based on the data graph and (optionally) the MPG. If file_dir is not provided then the files are stored in a temp directory.
Parameters: - file_dir (path) – folder name or path where the graphs used in the interactive VISTOMS will be stored.
- mpg (MdaoProcessGraph) – MDAO process graph to be used in combination with the data graph.
Returns: interactive VISTOMS
Return type: file
-
CMDOWS¶
Below the CMDOWS file operations library is listed.
-
class
kadmos.cmdows.cmdows.
CMDOWS
(file_path=None, element=None)¶ Class for with various methods for checking and manipulating CMDOWS files
-
add_actor
(contact_uid, role)¶ Method to add a role element to the organization branch.
Parameters: - contact_uid (str) – uID of the contact
- role (str) – contact role
Returns: enriched organizational branch
Return type: XMLSchema
Note
Role options are:
- ‘architect’
- ‘integrator’
- ‘collaborative_engineer’
- ‘tool_specialist’
- ‘customer’
-
add_contact
(name, email, uid, company=None, department=None, function=None, address=None, telephone=None, country=None, roles=None)¶ Method to add a contact element to the organization branch.
Parameters: - name (str) – contact name
- email (str) – contact email
- uid (str) – contact uID
- company (str) – (optional) contact company
- department (str) – (optional) company department
- function (str) – (optional) contact function
- address (str) – (optional) contact address
- telephone (str) – (optional) contact telephone number
- country (str) – (optional) contact country
- roles (list, str) – contact roles in project
Returns: XML with contact
Return type: XMLSchema
Note
Role options are:
- ‘architect’
- ‘integrator’
- ‘collaborative_engineer’
- ‘tool_specialist’
- ‘customer’
-
add_dc
(uid, id, mode_id, instance_id, version, label)¶ Method to add a designCompetence element to the designCompetences branch.
Parameters: - uid (str) – designCompetence uID
- id (str) – designCompetence ID
- mode_id (str) – designCompetence mode
- instance_id (int) – designCompetence instance
- version (str) – designCompetence instance
- label (str) – designCompetence label
Returns: XML with designCompetence
Return type: XMLSchema
-
add_dc_execution_details
(dc_uid, operating_system=None, integration_platform=None, command=None, description=None, software_requirements=None, hardware_requirements=None)¶ Method to add a local execution info element to a dc branch.
-
add_dc_general_info
(dc_uid, description, status=None, creation_date=None, owner_uid=None, creator_uid=None, operator_uid=None, model_definition=None)¶ Method to add a general info element to a DC branch.
Parameters: - dc_uid (str) – designCompetence uID
- description (str) – designCompetence description
- status (str) – (optional) designCompetence status
- creation_date (datetime) – (optional) designCompetence creation date
- owner_uid (str) – (optional) designCompetence owner uID
- creator_uid (str) – (optional) designCompetence creator uID
- operator_uid (str) – (optional) designCompetence operator uID
- model_definition (str) – (optional) designCompetence model definition
Returns: XML with general info
Return type: XMLSchema
-
add_dc_inputs_element
(dc_uid, inputs_element)¶ Method to add a input element to a DC element.
Parameters: - dc_uid (str) – designCompetence uID
- inputs_element (str) – input element to be added
Returns: XML with input element
Return type: XMLSchema
-
add_dc_licensing
(dc_uid, license_type=None, license_specification=None, license_info=None)¶ Method to add a licensing element to the generalInfo element of a DC branch.
Parameters: - dc_uid (str) – designCompetence uID
- license_type (str) – type of license (open-source, commercial, etc)
- license_specification (str) – precise license specification (e.g. Apache License 2.0)
- license_info (str) – additional info or full license description
Returns: XML with license info
Return type: ExtendedElement
-
add_dc_outputs_element
(dc_uid, outputs_element)¶ Method to add a output element to a DC element.
Parameters: - dc_uid (str) – designCompetence uID
- outputs_element (str) – output element to be added
Returns: XML with output element
Return type: XMLSchema
-
add_dc_performance_info
(dc_uid, precision=None, fidelity_level=None, run_time=None, verification=None)¶ Method to add a performance info element to a DC branch.
Parameters: - dc_uid (str) – designCompetence uID
- precision (float) – (optional) designCompetence precision
- fidelity_level (int) – (optional) designCompetence fidelity level
- run_time (float) – (optional) designCompetence run time
- verification (dict) – designCompetence verification method
Returns: XML with performance info
Return type: XMLSchema
Note
the verification dict should contain the following keys:
- ‘method’ (string_types)
- ‘verifier’ (uid)
- ‘result’ (string_types)
- ‘date’ (datetime)
- ‘version’ (string_types)
-
add_dc_remote_component_info
(dc_uid, single_or_multi_execution, job_name, remote_engineer, notification_message, data_exchange_dict=None)¶ Method to add a remote execution info element to a dc branch.
-
add_dc_sources
(dc_uid, repository_link=None, download_link=None, references=None)¶ Method to add a sources element to the generalInfo element of a DC branch.
Parameters: - dc_uid (str) – designCompetence uID
- repository_link (str) – weblink to repository containing the design competence
- download_link (str) – weblink for downloading the design competence
- references (list) – list of references about the design competence (papers, websites, etc.)
Returns: XML with license info
Return type: ExtendedElement
-
add_dc_verification
(dc_uid, method, verifier, result, date, version)¶ Method to add a verification to a DC branch.
Parameters: - dc_uid (str) – designCompetence uID
- method (str) – verification method
- verifier (str) – verifier uID
- result (str) – verification result
- date (datetime) – verification date
- version – designCompetence uID that was verified
Returns: XML with verification added to DC
Return type: XMLSchema
-
add_header
(creator, description, timestamp=None, fileVersion='0.0', cmdowsVersion='0.8')¶ Method to add a header to a CMDOWS file.
Parameters: - creator (str) – name of creator
- description (str) – description of file content
- timestamp (str) – (optional) date and time of creation
- fileVersion (str) – version of the file
- cmdowsVersion (str) – version of the xsd schema
Returns: XML with header
Return type: XMLSchema
-
add_new_parameters_from_element
(parameters_element)¶ Method to add the new parameters based on a parameters element.
Parameters: parameters_element (element) – new parameters Returns: enriched parameters branch Return type: XMLSchema
-
add_subelement
(element, subelement_xpath_tag)¶ Method to add a subelement to an existing element.
Parameters: - element (element) – element to be added to
- subelement_xpath_tag (xpath/tag) – subelement to be added.
Returns: enriched element branch
Return type: XMLSchema
-
add_valid_ranges
(elem_or_uid, minimum=None, maximum=None, list_range=None)¶ Method to add the list ranges element to an existing element.
Parameters: - elem_or_uid (str or ExtendedElement) – element or the UID of an element
- minimum (float) – minimum value for valid range
- maximum (float) – maximum value for valid range
- list_range (list) – list of optional values
-
append_element_to_uid_element
(uid, element_to_add, expected_tag_uid_el=None, expected_tag_new_el=None)¶ Generic method to add a subelement to an element with a certain UID.
Parameters: - uid (str) – uID of element to be added to
- element_to_add (str) – subelement to be added
- expected_tag_uid_el (str) – expected tag of element
- expected_tag_new_el (str) – expected tag of subelement
Returns: XML with subelement
Return type: XMLSchema
-
append_element_to_xpath_element
(xpath, element_tag, attrib=None)¶ Method to append a new element at an XPath location.
Parameters: - xpath (str) – unique XPath location where the element should be appended
- element_tag (str) – name of the new element to be appended
Returns: appended element
Return type: ExtendedElement
-
static
assert_element_tag
(el, expected_tag)¶ Method to assert that the tag of an element is as expected.
Parameters: - el – element
- expected_tag (str) – expected tag
Rtype el: str
-
check
()¶ Method to execute all checks and remove unused contacts
Returns: overall check result Return type: bool
-
check_references
()¶ Method to check if references are actually pointing to a uID in a CMDOWS file
Returns: result of reference check Return type: bool
-
check_schema
()¶ Method to check if a CMDOWS file adheres to its schema
Returns: result of schema check Return type: bool
-
check_uids
()¶ Method to check if all uIDs are actually unique in a CMDOWS file
Returns: result of unique uID check Return type: bool
-
ensure_abs_xpath
(xpath)¶ Method to ensure that the elements given by an absolute XPath exist.
Parameters: xpath (str) – XPath to be checked Returns: checked XPath Return type: str
-
get_design_competences_uids
()¶ Method to get a list of all the design competences UIDs present in the file.
Returns: design competence uIDs Return type: list
-
get_element_of_uid
(uid, expected_tag=None)¶ Method to get the element based on a UID value.
Parameters: - uid (str) – uID of element
- expected_tag (str) – (optional) expected tag
Returns: element
Return type: str
-
get_executable_blocks_uids
()¶ Method to get a list of all the executable block UIDs present in the file.
Returns: executable blocks uIDs Return type: list
-
get_inputs_uids
(exblock_uid)¶ Method to collect the inputs of a CMDOWS file executableBlock entry
Parameters: exblock_uid (str) – uid of the executableBlock entry Returns: path to input Return type: xpath
-
get_mathematical_functions_uids
()¶ Method to get a list of all the mathematical functions UIDs present in the file.
Returns: mathematical functions uIDs Return type: list
-
get_outputs_uids
(exblock_uid)¶ Method to collect the outputs of a CMDOWS file executableBlock entry
Parameters: exblock_uid (str) – executableBlock entry Returns: path to output Return type: xpath
-
get_parameters_uids
()¶ Method to get a list of all the parameter UIDs present in the file.
Returns: parameter uIDs Return type: list
-
get_used_parameter_uids
()¶ Method to get a list of all the parameter UIDs used in the file.
Returns: parameter uIDs Return type: list
-
get_xpath_of_uid
(uid, expected_tag=None)¶ Method to get the xpath based on a UID value.
Parameters: - uid (str) – uID of xpath
- expected_tag (str) – (optional) expected_tag
Returns: xpath of element
Return type: xpath
-
refresh_element_xpath
(xpath)¶ Method to refresh an element based on an XPath. This means the element is removed if it exist and a new element is created and returned.
Parameters: xpath (str) – XPath of the element to be refreshed. Returns: refreshed element Return type: ExtendedElement
-
remove_actor
(role, uid)¶ Method to remove a role from the organization for a certain contact.
Parameters: - role (str) – role to be removed from contact
- uid (str) – uID of contact
Returns: Organization branch without contact role
Return type: XMLSchema
Note
Role options are:
- ‘architect’
- ‘integrator’
- ‘collaborativeEngineer’
- ‘toolSpecialist’
- ‘customer’
-
remove_children_of_uid
(uid, children_to_remove='__all__', children_to_keep='__none__')¶ Method to remove the children of a CMDOWS file element based on a uID.
Parameters: - uid (str) – uID of the element to remove the children of
- children_to_remove (element) – (optional) list of children to be removed (default: remove all)
- children_to_keep (element) – (optional) list of children to be kept (default: keep none)
Returns: element with (certain) children removed
Return type: XMLSchema
Attention
make sure the child elements contained in the two lists do not overlap.
-
remove_children_of_xpath
(xpath, children_to_remove='__all__', children_to_keep='__none__')¶ Method to remove the children of a CMDOWS file element based on an XPath.
Parameters: - xpath (str) – XPath of the element to remove the children of
- children_to_remove (element) – (optional) list of children to be removed (default: remove all)
- children_to_keep (element) – (optional) list of children to be kept (default: keep none)
Returns: element with (certain) children removed
Return type: XMLSchema
Attention
make sure the child elements contained in the two lists do not overlap.
-
remove_contact
(contact_uid)¶ Method to remove a contact based on its uID.
Parameters: contact_uid (str) – uID of the contact to be removed Returns: Schema without contact Return type: XMLSchema
-
remove_data_graph_element
()¶ Method to remove a dataGraph element from a CMDOWS file.
Returns: Schema without dataGraph Return type: XMLSchema
-
remove_element_based_on_uid
(uid, expected_tag=None)¶ Method to remove an element based on its uID.
Parameters: - uid (str) – uID of element to be removed
- expected_tag (str) – (optional) the expected tag of the element
Returns: Schema without element
Return type: XMLSchema
-
remove_element_based_on_xpath
(xpath, expected_amount=None, expected_text=None, higher_level_removal=None)¶ Method to remove an element based on its XPath.
Parameters: - xpath (str) – XPath of element to be removed
- expected_amount (int) – (optional) the expected amount of elements with this path
- expected_text (str) – (optional) the expected text of the element
- higher_level_removal (int) – (optional) the amount of higher levels to be removed
Returns: Schema without element
Return type: XMLSchema
-
remove_in_and_outputs
(exblock_uid)¶ Method to remove the in- and outputs of a CMDOWS file executableBlock entry.
Parameters: exblock_uid (str) – executableBlock to remove the in- and outputs from Returns: executableBlock without in- and outputs Return type: XMLSchema
-
remove_inputs
(exblock_uid)¶ Method to remove the inputs of a CMDOWS file executableBlock entry.
Parameters: exblock_uid (str) – executableBlock to remove the inputs from Returns: executableBlock without inputs Return type: XMLSchema
-
remove_outputs
(exblock_uid)¶ Method to remove the outputs of a CMDOWS file executableBlock entry.
Parameters: exblock_uid (str) – executableBlock to remove the outputs from Returns: executableBlock without outputs Return type: XMLSchema
-
remove_parameter
(param_uid)¶ Method to remove a parameter based on its uID.
Parameters: param_uid (str) – uID of parameter to be removed Returns: Schema without parameter Return type: XMLSchema
-
remove_parameters
(params_uids)¶ Method to remove a list of parameters based on their uID.
Parameters: params_uid – uIDs of parameters to be removed Returns: Schema without parameters listed Return type: XMLSchema
-
remove_parameters_element
()¶ Method to remove a parameters element from a CMDOWS file.
Returns: Schema without parameters Return type: XMLSchema
-
remove_process_graph_element
()¶ Method to remove a processGraph element from a CMDOWS file.
Returns: Schema without processGraph Return type: XMLSchema
-
remove_unused_contacts
()¶ Method to check if there are uID in CMDOWS file which are not referred to and remove them
Returns: XML without unused uID’s Return type: XMLSchema
-
remove_workflow_element
()¶ Method to remove a workflow element from a CMDOWS file.
Returns: Schema without workflow Return type: XMLSchema
-
resolve_uids
()¶ Method to rename duplicate uIDs in a CMDOWS file.
Returns: renamed duplicate uIDs Return type: XMLSchema
-
save
(file_path=None, pretty_print=False, method='xml', xml_declaration=True, encoding='UTF-8')¶ Method to save a manipulated CMDOWS file.
Parameters: - file_path (str) – file path of the CMDOWS
- pretty_print (bool) – (optional)
- method (str) – (optional) output method (see options below, default: “xml”)
- xml_declaration (bool) – (optional) addition of XML declaration to file
- encoding (str) – (optional) output encoding (see options below, default: “UTF-8”)
Note
Output method options:
- “xml”
- “html”
- “text”
- “c14n”
Note
Output encoding options:
- “UTF-8”
- “US-ASCII”
-
schema
()¶ Method to retrieve a schema either belonging to the CMDOWS file
Returns: schema Return type: XMLSchema
-
simplify
()¶ Method to simplify everything
-
simplify_equations
()¶ Method to replace duplicate equations elements by a single equations element and refs to this element
Returns: XML with simplified equation Return type: XMLSchema
-
version
()¶ Method to retrieve the version of the CMDOWS file
Returns: version Return type: str
-
Utilities¶
Below the utilities used by KADMOS are listed.
General¶
-
kadmos.utilities.general.
assert_dict_keys
(dic, expected_keys, all_keys_required=False)¶ Method to assert that a dictionary has the expected keys and (optionally) to check if is has all the keys.
Parameters: - dic (dict) – dictionary to checked
- expected_keys (list) – keys expected in dictionary
- all_keys_required (bool) – (optional) to check if all keys are in the dictionary
Returns: check results
-
kadmos.utilities.general.
color_list
()¶ A list of distinguisable colors.
Returns: list with HTML Hex colors
-
kadmos.utilities.general.
convert_bytes
(num)¶ Function to convert bytes to KB, MB, GB, TB.
Parameters: num (int) – number of bytes Returns: converted number Return type: str
-
kadmos.utilities.general.
dict_to_ord_dict
(dic, key_order)¶ Method to transform a Python dictionary into a Python ordered dictionary.
Parameters: - dic (dict) – dictionary
- key_order (list) – order of the keys
Returns: ordered dictionary
Return type: OrderedDict
Note
the key_order list can have items that are not present in the given dictionary. All keys of the dictionary should be in the order though.
-
kadmos.utilities.general.
export_as_json
(data, filename, indent=None, sort_keys=True, cwd=None)¶ Function to export a data object to a json file.
Parameters: - data (dict or list) – object with the data to be exported
- filename (str) – name of the json file
- indent (int) – number of spaces for one indentation
- sort_keys (bool) – option for sorting keys
- cwd (None, str) – current working directory
Returns: json file
Return type: file
-
kadmos.utilities.general.
file_size
(file_path)¶ Function to return the file size.
Parameters: file_path (str) – file path Returns: file size Return type: str
-
kadmos.utilities.general.
file_size_MB
(file_path)¶ Function to return the file size in MB.
Parameters: file_path (str) – file path Returns: file size in MB Return type: float
-
kadmos.utilities.general.
filter_group_vars
(group_dict, current_group_idx, filter_setting)¶ Method to get the variables of a local/external group.
Parameters: - group_dict (dict) – local/external group
- current_group_idx (int) – index of the current group
- filter_setting (list, string) – filter on ‘local’ or ‘external’ groups
Returns: group variables
Return type: list
-
kadmos.utilities.general.
format_string_for_latex
(string, prefix='', suffix='')¶ Function to format a string such that it can be used in LaTeX.
Parameters: - string (str) – string to be formatted
- prefix (str) – prefix to be placed in front of the string
- suffix (str) – suffix to be appended to the string
Returns: formatted string
Return type: str
-
kadmos.utilities.general.
format_string_for_vistoms
(string, prefix='', suffix='')¶ Function to format a string such that it can be used in VISTOMS.
Parameters: - string (str) – string to be formatted
- prefix (str) – prefix to be placed in front of the string
- suffix (str) – suffix to be appended to the string
Returns: formatted string
Return type: str
-
kadmos.utilities.general.
format_string_for_vistoms_new
(string, prefix='', suffix='')¶ Function to format a string such that it can be used in VISTOMS.
Parameters: - string (str) – string to be formatted
- prefix (str) – prefix to be placed in front of the string
- suffix (str) – suffix to be appended to the string
Returns: formatted string
Return type: str
-
kadmos.utilities.general.
get_element_dict
(xpath, var_value=None, var_dim=None, include_reference_data=False)¶ Function to create a D3.js-type dictionary for a nested tree based on an xpath.
Parameters: - xpath (str) – xpath for the element
- var_value (float) – value of the element in a reference file
- var_dim (int) – dimension of the element in a reference file
- include_reference_data (bool) – setting on whether reference data should be include in the path
Returns: nested dictionary
Return type: dict
-
kadmos.utilities.general.
get_friendly_id
(uid_length)¶ Create a recognisable ID string.
Parameters: uid_length (int) – length of the ID Returns: new ID Return type: str
-
kadmos.utilities.general.
get_group_vars
(sa, current_group_idx)¶ Method to get the variables with respect to the subgroup.
Parameters: - sa (dict) – system analysis dictionary
- current_group_idx (int) – index of the subgroup
Returns: multiple lists with variables
Return type: tuple
-
kadmos.utilities.general.
get_list_entries
(*args)¶ Utility to return only certain values of a given list based on the indices.
Parameters: args (list and int) – list and indices Returns: list with requested values at indices Return type: list
-
kadmos.utilities.general.
get_mdao_setup
(mdao_setup)¶ Simple function to specify the MDAO architecture and convergence type based on a single string.
Parameters: mdao_setup (str) – MDF-GS, MDF-J, IDF Returns: mdo_architecture, mda_type, allow_unconverged_couplings Return type: str
-
kadmos.utilities.general.
get_sublist
(list, idxs)¶ Get items of a list based on a collection of indices.
Parameters: - list (list) – list from which items are taken
- idxs (list) – list with indices to be collected
Returns: new list based on idxs
Return type: list
-
kadmos.utilities.general.
get_uid
(preference, uids)¶ Simple function to determine a valid uid which is not part of the uids list
Parameters: - preference (str) – preferred name for the uid
- uids (list) – list of existing uids
Returns: a valid uid which
Return type: str
-
kadmos.utilities.general.
get_unique_friendly_id
(used_ids, uid_length)¶ Return an ID that is not in our list of already used IDs.
Parameters: - used_ids (list) – already used IDs
- uid_length (int) – length of the ID
Returns: new unique ID
Return type: str
-
kadmos.utilities.general.
hex_to_rgb
(value)¶ Function to translate a hex color string to an RGB color tuple.
Parameters: value (str) – HTML hex color Returns: RGB colors Return type: tuple
-
kadmos.utilities.general.
make_camel_case
(string, make_plural_option=False)¶ Function to make a string camelCase.
Parameters: - string (str) – non-camelcase string
- make_plural_option (bool) – pluralize camelcase string
Returns: camelcase string
Return type: str
-
kadmos.utilities.general.
make_plural
(string)¶ Function to convert a string to its plural form.
Parameters: string (str) – initial string Returns: plural string Return type: str
-
kadmos.utilities.general.
make_singular
(string)¶ Function to convert a string to its singular form.
Parameters: string (str) – initial string Returns: singular string Return type: str
-
kadmos.utilities.general.
open_file
(filename)¶ Utility to open a file cross-platform.
Parameters: filename (str) – Filename including extension and path, e.g. ‘sampledir/samplefile.pdf’ Returns: An opened file
-
kadmos.utilities.general.
remove_if_exists
(input_list, entries_to_remove)¶ Utility to remove certain values from a list.
Parameters: - input_list (list) – initial list
- entries_to_remove (list) – values to remove
Returns: list with removed entries
Return type: list
-
kadmos.utilities.general.
test_attr_cond
(attr_value, operator, test_value)¶ Function to check a given conditional statement and return True or False.
Parameters: - attr_value (str, float, int) – value of the actual attribute
- operator (str) – conditional operator to be used (‘<’,’<=’,’==’,’!=’,’>=’,’>’, ‘in’)
- test_value (str, float, int) – value to which the attribute value should be compared.
Returns: result of the conditional statement.
Return type: bool
-
kadmos.utilities.general.
transform_data_into_strings
(data, keys_to_be_removed=[])¶ Utility function to transform certain data types in a dictionary into strings.
Parameters: - data (dict) – dictionary with data
- keys_to_be_removed (list) – list of keys that have to be removed from the dict
Returns: adjusted dictionary
Return type: dict
-
kadmos.utilities.general.
transform_string_into_format
(data, keys_to_be_removed=[])¶ Utility function to transform certain strings back into their original data format (NoneType, list, etc.).
Parameters: - data (dict) – dictionary with data
- keys_to_be_removed (list) – list of keys that have to be removed from the dict
Returns: adjusted dictionary
Return type: dict
-
kadmos.utilities.general.
translate_dict_keys
(dictionary, translations)¶ Utility to (recursively) translate all keys in a dictionary with a translation dictionary.
Parameters: - dictionary (dict) – dictionary to be translated
- translations (dict) – dictionary used for the translation
Returns: translated dictionary
Return type: dict
-
kadmos.utilities.general.
translate_list
(l, dictionary)¶ Utility to quickly translate all elements in a list with a dictionary.
Parameters: - l (list) – list to be translated
- dictionary (dict) – dictionary used for the translation
Returns: translated list
Return type: list
-
kadmos.utilities.general.
unmake_camel_case
(string, separator='_')¶ Function to make camelCase a string with separator (e.g. underscores).
Parameters: - string (str) – camelCase string
- separator (str) – symbol/symbols used as separator
Returns: string with separator
Return type: str
-
kadmos.utilities.general.
zip_file
(file_to_zip, destination_archive=None, name_of_zipped_file=None)¶ Method to zip a single file as an archive.
Parameters: - file_to_zip (str) – path to the file to be zipped
- destination_archive (str) – path to the archive to be created
- name_of_zipped_file (str) – name of the file inside the archive
Returns: path to the ZIP-file
Return type: str
XML¶
Strings¶
-
kadmos.utilities.strings.
find_between
(s, first, last)¶ Function to find a target string that is located between two particular strings.
Parameters: - s (basestring) – string to search
- first (basestring) – the string in front of the target string
- last (basestring) – the string behind the target string
Returns: the target string
Return type: basestring
-
kadmos.utilities.strings.
find_until
(s, until)¶ Function to find a target string that is located before a particular string.
Parameters: - s (basestring) – string to search
- until (basestring) – the string signifying the end of the target string
Returns: target string
Return type: basestring
-
kadmos.utilities.strings.
get_correctly_extended_latex_label
(label, label_extension)¶ Function to obtain a correctly extended latex label.
Parameters: - label (str) – label to be extended
- label_extension (str) – extensions of the label
Returns: extended latex label
Return type: str
Printing¶
-
kadmos.utilities.printing.
print_in_table
(print_container, **kwargs)¶ This function prints a table using the provided data and the headers. The “tabulate” library is used.
Parameters: - print_container (iterable) – container for iterables –> [[row1], [row2], …]
- kwargs (str, bool) – keyword arguments for printing
Note
Kwargs options:
- ‘header’ (string_types)
- ‘message’ (string_types)
- ‘print_indeces’ (bool)
-
kadmos.utilities.printing.
print_indexed_list
(*args, **kwargs)¶ This function prints an indexed column of the given arguments in the console. The provided message is printed above the indexed column. Can be used in combination with user_prompt_select_options().
Parameters: - kwargs – message: Message printed above indexed column
- kwargs – index_bracket: Type of bracket used for indeces in list (“round” or “squared”), default is round
- args – Arguments listed in column by index
Returns: printed indexed column of arguments in console
Example use:
>>> print_indexed_list(message="These are the tools: ", index_bracket="round", *list_of_tools)