+ def _create_vnf_id_maps(self, nsd):
+ """
+ map identifier for 'member-vnf-index' in nsd to syntax that is safe for mzn
+
+ return tuples with mappings {<adjusted id>: <original id>} and {<original id>: <adjusted id>}
+ """
+ next_idx = itertools.count()
+ member_vnf_index2mzn = {e['member-vnf-index']: 'VNF' + str(next(next_idx)) for e in
+ nsd['constituent-vnfd']}
+
+ # reverse the name map dictionary, used when the placement result is remapped
+ mzn_name2member_vnf_index = {v: k for k, v in member_vnf_index2mzn.items()}
+
+ return member_vnf_index2mzn, mzn_name2member_vnf_index
+