import os import uuid import json import yaml import random import numpy as np from collections import OrderedDict # from predict_garmentcode_picture import predict CONNECT_TAG = '__' all_text_dict={ "meta__upper": [ "meta__upper__FittedShirt", "meta__upper__Shirt", "meta__upper__None" ], "meta__wb": [ "meta__wb__StraightWB", "meta__wb__FittedWB", "meta__wb__None" ], "meta__bottom": [ "meta__bottom__SkirtCircle", "meta__bottom__AsymmSkirtCircle", "meta__bottom__GodetSkirt", "meta__bottom__Pants", "meta__bottom__Skirt2", "meta__bottom__SkirtManyPanels", "meta__bottom__PencilSkirt", "meta__bottom__SkirtLevels", "meta__bottom__None" ], "meta__connected": [ "meta__connected__True", "meta__connected__False" ], "waistband__waist": [ "waistband__waist__fitted", "waistband__waist__slightly-loose", "waistband__waist__loose" ], "waistband__width": [ "waistband__width__narrow", "waistband__width__medium", "waistband__width__wide" ], "fitted_shirt__strapless": [ "fitted_shirt__strapless__True", "fitted_shirt__strapless__False" ], "shirt__length": [ "shirt__length__super-cropped", "shirt__length__regular", "shirt__length__long" ], "shirt__width": [ "shirt__width__normal", "shirt__width__relaxed" ], "shirt__flare": [ "shirt__flare__tight", "shirt__flare__straight", "shirt__flare__flared", "shirt__flare__very-flared" ], "collar__f_collar": [ "collar__f_collar__CircleNeckHalf", "collar__f_collar__CurvyNeckHalf", "collar__f_collar__VNeckHalf", "collar__f_collar__SquareNeckHalf", "collar__f_collar__TrapezoidNeckHalf", "collar__f_collar__CircleArcNeckHalf", "collar__f_collar__Bezier2NeckHalf" ], "collar__b_collar": [ "collar__b_collar__CircleNeckHalf", "collar__b_collar__CurvyNeckHalf", "collar__b_collar__VNeckHalf", "collar__b_collar__SquareNeckHalf", "collar__b_collar__TrapezoidNeckHalf", "collar__b_collar__CircleArcNeckHalf", "collar__b_collar__Bezier2NeckHalf" ], "collar__width": [ "collar__width__very-narrow", "collar__width__medium", "collar__width__wide" ], "collar__fc_depth": [ "collar__fc_depth__shallow", "collar__fc_depth__medium", "collar__fc_depth__deep" ], "collar__bc_depth": [ "collar__bc_depth__shallow", "collar__bc_depth__medium", "collar__bc_depth__deep" ], "collar__fc_angle": [ "collar__fc_angle__acute", "collar__fc_angle__standard", "collar__fc_angle__obtuse" ], "collar__bc_angle": [ "collar__bc_angle__acute", "collar__bc_angle__standard", "collar__bc_angle__obtuse" ], "collar__f_bezier_x": [ "collar__f_bezier_x__left", "collar__f_bezier_x__center", "collar__f_bezier_x__right" ], "collar__f_bezier_y": [ "collar__f_bezier_y__top", "collar__f_bezier_y__center", "collar__f_bezier_y__bottom" ], "collar__b_bezier_x": [ "collar__b_bezier_x__left", "collar__b_bezier_x__center", "collar__b_bezier_x__right" ], "collar__b_bezier_y": [ "collar__b_bezier_y__top", "collar__b_bezier_y__center", "collar__b_bezier_y__bottom" ], "collar__f_flip_curve": [ "collar__f_flip_curve__True", "collar__f_flip_curve__False" ], "collar__b_flip_curve": [ "collar__b_flip_curve__True", "collar__b_flip_curve__False" ], "collar__component__style": [ "collar__component__style__Turtle", "collar__component__style__SimpleLapel", "collar__component__style__Hood2Panels", "collar__component__style__None" ], "collar__component__depth": [ "collar__component__depth__shallow", "collar__component__depth__medium", "collar__component__depth__deep" ], "collar__component__lapel_standing": [ "collar__component__lapel_standing__True", "collar__component__lapel_standing__False" ], "collar__component__hood_depth": [ "collar__component__hood_depth__shallow", "collar__component__hood_depth__medium", "collar__component__hood_depth__deep" ], "collar__component__hood_length": [ "collar__component__hood_length__short", "collar__component__hood_length__medium", "collar__component__hood_length__long" ], "sleeve__sleeveless": [ "sleeve__sleeveless__True", "sleeve__sleeveless__False" ], "sleeve__armhole_shape": [ "sleeve__armhole_shape__ArmholeSquare", "sleeve__armhole_shape__ArmholeAngle", "sleeve__armhole_shape__ArmholeCurve" ], "sleeve__length": [ "sleeve__length__short", "sleeve__length__half", "sleeve__length__three-quarter", "sleeve__length__long", "sleeve__length__full" ], "sleeve__connecting_width": [ "sleeve__connecting_width__narrow", "sleeve__connecting_width__medium", "sleeve__connecting_width__loose", "sleeve__connecting_width__very-loose" ], "sleeve__end_width": [ "sleeve__end_width__closing", "sleeve__end_width__straight", "sleeve__end_width__opening" ], "sleeve__sleeve_angle": [ "sleeve__sleeve_angle__small", "sleeve__sleeve_angle__medium", "sleeve__sleeve_angle__large" ], "sleeve__opening_dir_mix": [ "sleeve__opening_dir_mix__negative-twist", "sleeve__opening_dir_mix__standard", "sleeve__opening_dir_mix__positive-twist" ], "sleeve__standing_shoulder": [ "sleeve__standing_shoulder__True", "sleeve__standing_shoulder__False" ], "sleeve__standing_shoulder_len": [ "sleeve__standing_shoulder_len__short", "sleeve__standing_shoulder_len__medium", "sleeve__standing_shoulder_len__long" ], "sleeve__connect_ruffle": [ "sleeve__connect_ruffle__none", "sleeve__connect_ruffle__some", "sleeve__connect_ruffle__obvious" ], "sleeve__smoothing_coeff": [ "sleeve__smoothing_coeff__very-smooth", "sleeve__smoothing_coeff__moderate", "sleeve__smoothing_coeff__less-smooth" ], "sleeve__cuff__type": [ "sleeve__cuff__type__CuffBand", "sleeve__cuff__type__CuffSkirt", "sleeve__cuff__type__CuffBandSkirt", "sleeve__cuff__type__None" ], "sleeve__cuff__top_ruffle": [ "sleeve__cuff__top_ruffle__straight", "sleeve__cuff__top_ruffle__tapered", "sleeve__cuff__top_ruffle__very_tapered" ], "sleeve__cuff__cuff_len": [ "sleeve__cuff__cuff_len__short", "sleeve__cuff__cuff_len__medium", "sleeve__cuff__cuff_len__long" ], "sleeve__cuff__skirt_fraction": [ "sleeve__cuff__skirt_fraction__small", "sleeve__cuff__skirt_fraction__medium", "sleeve__cuff__skirt_fraction__large" ], "sleeve__cuff__skirt_flare": [ "sleeve__cuff__skirt_flare__slight", "sleeve__cuff__skirt_flare__moderate", "sleeve__cuff__skirt_flare__significant" ], "sleeve__cuff__skirt_ruffle": [ "sleeve__cuff__skirt_ruffle__none", "sleeve__cuff__skirt_ruffle__some" ], "left__enable_asym": [ "left__enable_asym__True", "left__enable_asym__False" ], "left__fitted_shirt__strapless": [ "left__fitted_shirt__strapless__True", "left__fitted_shirt__strapless__False" ], "left__shirt__width": [ "left__shirt__width__normal", "left__shirt__width__relaxed" ], "left__shirt__flare": [ "left__shirt__flare__tight", "left__shirt__flare__straight", "left__shirt__flare__flared", "left__shirt__flare__very-flared" ], "left__collar__f_collar": [ "left__collar__f_collar__CircleNeckHalf", "left__collar__f_collar__CurvyNeckHalf", "left__collar__f_collar__VNeckHalf", "left__collar__f_collar__SquareNeckHalf", "left__collar__f_collar__TrapezoidNeckHalf", "left__collar__f_collar__CircleArcNeckHalf", "left__collar__f_collar__Bezier2NeckHalf" ], "left__collar__b_collar": [ "left__collar__b_collar__CircleNeckHalf", "left__collar__b_collar__CurvyNeckHalf", "left__collar__b_collar__VNeckHalf", "left__collar__b_collar__SquareNeckHalf", "left__collar__b_collar__TrapezoidNeckHalf", "left__collar__b_collar__CircleArcNeckHalf", "left__collar__b_collar__Bezier2NeckHalf" ], "left__collar__width": [ "left__collar__width__narrow", "left__collar__width__medium", "left__collar__width__wide" ], "left__collar__fc_angle": [ "left__collar__fc_angle__acute", "left__collar__fc_angle__standard", "left__collar__fc_angle__obtuse" ], "left__collar__bc_angle": [ "left__collar__bc_angle__acute", "left__collar__bc_angle__standard", "left__collar__bc_angle__obtuse" ], "left__collar__f_bezier_x": [ "left__collar__f_bezier_x__left", "left__collar__f_bezier_x__center", "left__collar__f_bezier_x__right" ], "left__collar__f_bezier_y": [ "left__collar__f_bezier_y__top", "left__collar__f_bezier_y__center", "left__collar__f_bezier_y__bottom" ], "left__collar__b_bezier_x": [ "left__collar__b_bezier_x__left", "left__collar__b_bezier_x__center", "left__collar__b_bezier_x__right" ], "left__collar__b_bezier_y": [ "left__collar__b_bezier_y__top", "left__collar__b_bezier_y__center", "left__collar__b_bezier_y__bottom" ], "left__collar__f_flip_curve": [ "left__collar__f_flip_curve__True", "left__collar__f_flip_curve__False" ], "left__collar__b_flip_curve": [ "left__collar__b_flip_curve__True", "left__collar__b_flip_curve__False" ], "left__sleeve__sleeveless": [ "left__sleeve__sleeveless__True", "left__sleeve__sleeveless__False" ], "left__sleeve__armhole_shape": [ "left__sleeve__armhole_shape__ArmholeSquare", "left__sleeve__armhole_shape__ArmholeAngle", "left__sleeve__armhole_shape__ArmholeCurve" ], "left__sleeve__length": [ "left__sleeve__length__short", "left__sleeve__length__half", "left__sleeve__length__three-quarter", "left__sleeve__length__long", "left__sleeve__length__full" ], "left__sleeve__connecting_width": [ "left__sleeve__connecting_width__narrow", "left__sleeve__connecting_width__medium", "left__sleeve__connecting_width__loose", "left__sleeve__connecting_width__very-loose" ], "left__sleeve__end_width": [ "left__sleeve__end_width__closing", "left__sleeve__end_width__straight", "left__sleeve__end_width__opening" ], "left__sleeve__sleeve_angle": [ "left__sleeve__sleeve_angle__small", "left__sleeve__sleeve_angle__medium", "left__sleeve__sleeve_angle__large" ], "left__sleeve__opening_dir_mix": [ "left__sleeve__opening_dir_mix__negative-twist", "left__sleeve__opening_dir_mix__standard", "left__sleeve__opening_dir_mix__positive-twist" ], "left__sleeve__standing_shoulder": [ "left__sleeve__standing_shoulder__True", "left__sleeve__standing_shoulder__False" ], "left__sleeve__standing_shoulder_len": [ "left__sleeve__standing_shoulder_len__short", "left__sleeve__standing_shoulder_len__medium", "left__sleeve__standing_shoulder_len__long" ], "left__sleeve__connect_ruffle": [ "left__sleeve__connect_ruffle__none", "left__sleeve__connect_ruffle__some", "left__sleeve__connect_ruffle__obvious" ], "left__sleeve__smoothing_coeff": [ "left__sleeve__smoothing_coeff__very-smooth", "left__sleeve__smoothing_coeff__moderate", "left__sleeve__smoothing_coeff__less-smooth" ], "left__sleeve__cuff__type": [ "left__sleeve__cuff__type__CuffBand", "left__sleeve__cuff__type__CuffSkirt", "left__sleeve__cuff__type__CuffBandSkirt", "left__sleeve__cuff__type__None" ], "left__sleeve__cuff__top_ruffle": [ "left__sleeve__cuff__top_ruffle__none", "left__sleeve__cuff__top_ruffle__moderate", "left__sleeve__cuff__top_ruffle__obvious" ], "left__sleeve__cuff__cuff_len": [ "left__sleeve__cuff__cuff_len__short", "left__sleeve__cuff__cuff_len__medium", "left__sleeve__cuff__cuff_len__long" ], "left__sleeve__cuff__skirt_fraction": [ "left__sleeve__cuff__skirt_fraction__small", "left__sleeve__cuff__skirt_fraction__medium", "left__sleeve__cuff__skirt_fraction__large" ], "left__sleeve__cuff__skirt_flare": [ "left__sleeve__cuff__skirt_flare__slight", "left__sleeve__cuff__skirt_flare__moderate", "left__sleeve__cuff__skirt_flare__significant" ], "left__sleeve__cuff__skirt_ruffle": [ "left__sleeve__cuff__skirt_ruffle__none", "left__sleeve__cuff__skirt_ruffle__some" ], "skirt__length": [ "skirt__length__micro", "skirt__length__mini", "skirt__length__above-knee", "skirt__length__knee-length", "skirt__length__midi", "skirt__length__floor-length" ], "skirt__rise": [ "skirt__rise__low", "skirt__rise__mid", "skirt__rise__high" ], "skirt__ruffle": [ "skirt__ruffle__none", "skirt__ruffle__moderate", "skirt__ruffle__rich" ], "skirt__bottom_cut": [ "skirt__bottom_cut__none", "skirt__bottom_cut__shallow", "skirt__bottom_cut__deep" ], "skirt__flare": [ "skirt__flare__small", "skirt__flare__medium", "skirt__flare__large" ], "flare-skirt__length": [ "flare-skirt__length__micro", "flare-skirt__length__mini", "flare-skirt__length__above-knee", "flare-skirt__length__knee-length", "flare-skirt__length__midi", "flare-skirt__length__floor-length" ], "flare-skirt__rise": [ "flare-skirt__rise__low", "flare-skirt__rise__mid", "flare-skirt__rise__high" ], "flare-skirt__suns": [ "flare-skirt__suns__slight", "flare-skirt__suns__moderate", "flare-skirt__suns__significant" ], "flare-skirt__skirt-many-panels__n_panels": [ "flare-skirt__skirt-many-panels__n_panels__few", "flare-skirt__skirt-many-panels__n_panels__medium", "flare-skirt__skirt-many-panels__n_panels__many" ], "flare-skirt__skirt-many-panels__panel_curve": [ "flare-skirt__skirt-many-panels__panel_curve__inward", "flare-skirt__skirt-many-panels__panel_curve__straight", "flare-skirt__skirt-many-panels__panel_curve__outward" ], "flare-skirt__asymm__front_length": [ "flare-skirt__asymm__front_length__highly-asymmetric", "flare-skirt__asymm__front_length__strongly-asymmetric", "flare-skirt__asymm__front_length__moderately-asymmetric", "flare-skirt__asymm__front_length__slightly-asymmetric", "flare-skirt__asymm__front_length__symmetric" ], "flare-skirt__cut__add": [ "flare-skirt__cut__add__True", "flare-skirt__cut__add__False" ], "flare-skirt__cut__depth": [ "flare-skirt__cut__depth__shallow", "flare-skirt__cut__depth__medium", "flare-skirt__cut__depth__deep" ], "flare-skirt__cut__width": [ "flare-skirt__cut__width__narrow", "flare-skirt__cut__width__medium", "flare-skirt__cut__width__wide" ], "flare-skirt__cut__place": [ "flare-skirt__cut__place__back_left", "flare-skirt__cut__place__back_center", "flare-skirt__cut__place__back_right", "flare-skirt__cut__place__front_left", "flare-skirt__cut__place__front_center", "flare-skirt__cut__place__front_right", ], "godet-skirt__base": [ "godet-skirt__base__Skirt2", "godet-skirt__base__PencilSkirt" ], "godet-skirt__insert_w": [ "godet-skirt__insert_w__narrow", "godet-skirt__insert_w__medium", "godet-skirt__insert_w__wide" ], "godet-skirt__insert_depth": [ "godet-skirt__insert_depth__shallow", "godet-skirt__insert_depth__medium", "godet-skirt__insert_depth__deep" ], "godet-skirt__num_inserts": [ "godet-skirt__num_inserts__4", "godet-skirt__num_inserts__6", "godet-skirt__num_inserts__8", "godet-skirt__num_inserts__10", "godet-skirt__num_inserts__12" ], "godet-skirt__cuts_distance": [ "godet-skirt__cuts_distance__close", "godet-skirt__cuts_distance__medium", "godet-skirt__cuts_distance__far" ], "pencil-skirt__length": [ "pencil-skirt__length__micro", "pencil-skirt__length__mini", "pencil-skirt__length__above-knee", "pencil-skirt__length__knee-length", "pencil-skirt__length__midi", "pencil-skirt__length__floor-length" ], "pencil-skirt__rise": [ "pencil-skirt__rise__low", "pencil-skirt__rise__mid", "pencil-skirt__rise__high" ], "pencil-skirt__flare": [ "pencil-skirt__flare__tight", "pencil-skirt__flare__straight", "pencil-skirt__flare__slight-flare" ], "pencil-skirt__low_angle": [ "pencil-skirt__low_angle__inward", "pencil-skirt__low_angle__straight", "pencil-skirt__low_angle__outward" ], "pencil-skirt__front_slit": [ "pencil-skirt__front_slit__none", "pencil-skirt__front_slit__shallow", "pencil-skirt__front_slit__deep" ], "pencil-skirt__back_slit": [ "pencil-skirt__back_slit__none", "pencil-skirt__back_slit__shallow", "pencil-skirt__back_slit__deep" ], "pencil-skirt__left_slit": [ "pencil-skirt__left_slit__none", "pencil-skirt__left_slit__shallow", "pencil-skirt__left_slit__deep" ], "pencil-skirt__right_slit": [ "pencil-skirt__right_slit__none", "pencil-skirt__right_slit__shallow", "pencil-skirt__right_slit__deep" ], "pencil-skirt__style_side_cut": [ "pencil-skirt__style_side_cut__Sun", "pencil-skirt__style_side_cut__SIGGRAPH_logo", "pencil-skirt__style_side_cut__None" ], "levels-skirt__base": [ "levels-skirt__base__Skirt2", "levels-skirt__base__PencilSkirt", "levels-skirt__base__SkirtCircle", "levels-skirt__base__AsymmSkirtCircle" ], "levels-skirt__level": [ "levels-skirt__level__Skirt2", "levels-skirt__level__SkirtCircle", "levels-skirt__level__AsymmSkirtCircle" ], "levels-skirt__num_levels": [ "levels-skirt__num_levels__1", "levels-skirt__num_levels__2", "levels-skirt__num_levels__3", "levels-skirt__num_levels__4", "levels-skirt__num_levels__5" ], "levels-skirt__level_ruffle": [ "levels-skirt__level_ruffle__none", "levels-skirt__level_ruffle__moderate", "levels-skirt__level_ruffle__rich" ], "levels-skirt__length": [ "levels-skirt__length__micro", "levels-skirt__length__mini", "levels-skirt__length__above-knee", "levels-skirt__length__knee-length", "levels-skirt__length__midi", "levels-skirt__length__floor-length" ], "levels-skirt__rise": [ "levels-skirt__rise__low", "levels-skirt__rise__mid", "levels-skirt__rise__high" ], "levels-skirt__base_length_frac": [ "levels-skirt__base_length_frac__short", "levels-skirt__base_length_frac__medium", "levels-skirt__base_length_frac__long" ], "pants__length": [ "pants__length__micro", "pants__length__short", "pants__length__knee-length", "pants__length__capri", "pants__length__ankle-length", "pants__length__full-length" ], "pants__width": [ "pants__width__fitted", "pants__width__normal", "pants__width__loose" ], "pants__flare": [ "pants__flare__tapering", "pants__flare__straight", "pants__flare__slight-flare" ], "pants__rise": [ "pants__rise__low", "pants__rise__mid", "pants__rise__high" ], "pants__cuff__type": [ "pants__cuff__type__CuffBand", "pants__cuff__type__CuffSkirt", "pants__cuff__type__CuffBandSkirt", "pants__cuff__type__None" ], "pants__cuff__top_ruffle": [ "pants__cuff__top_ruffle__none", "pants__cuff__top_ruffle__moderate", "pants__cuff__top_ruffle__rich" ], "pants__cuff__cuff_len": [ "pants__cuff__cuff_len__short", "pants__cuff__cuff_len__medium", "pants__cuff__cuff_len__long" ], "pants__cuff__skirt_fraction": [ "pants__cuff__skirt_fraction__small", "pants__cuff__skirt_fraction__medium", "pants__cuff__skirt_fraction__large" ], "pants__cuff__skirt_flare": [ "pants__cuff__skirt_flare__slight", "pants__cuff__skirt_flare__moderate", "pants__cuff__skirt_flare__significant" ], "pants__cuff__skirt_ruffle": [ "pants__cuff__skirt_ruffle__none", "pants__cuff__skirt_ruffle__some" ] } def list_to_prefix_dict(strings): """ Converts the list of strings to a dictionary of Prefix -> Original String List (in the order in which it appears). A prefix refers to the part after the last '__' segment is removed. """ result = OrderedDict() for s in strings: parts = s.split(CONNECT_TAG) prefix = CONNECT_TAG.join(parts[:-1]) # Remove the last fragment if prefix not in result: result[prefix] = [] result[prefix].append(s) # Put the full string in return result def input_caption2random_default_cption(test_gpt_caption=None): '''all_text_dict: dict is the dict of the text space, and it is ordered, which can guarantee the order (because the network is trained to ensure the order) test_gpt_caption:list is the list of gpt_caption, here there is no specific order, Below, the text in the test_gpt_caption will be retained, and the others will be randomly selected, and the order will be guaranteed, and a list will be returned''' test_gpt_caption_list=list_to_prefix_dict(test_gpt_caption) random_list = [] for key ,value_list in all_text_dict.items(): # if key == 'levels-skirt__base': # print(value_list) if key not in test_gpt_caption_list: if key == 'shirt__length': random_list.append("shirt__length__super-cropped") elif key == 'pants__cuff__type': random_list.append("pants__cuff__type__None") elif key == "sleeve__cuff__type": random_list.append("sleeve__cuff__type__None") elif key == "left__sleeve__cuff__type": random_list.append("left__sleeve__cuff__type__None") elif key == 'collar__component__style': random_list.append("collar__component__style__None") elif key == "pencil-skirt__low_angle": random_list.append("pencil-skirt__low_angle__straight") elif key == "sleeve__connecting_width": random_list.append("sleeve__connecting_width__medium") elif key == "sleeve__end_width": random_list.append("sleeve__end_width__straight") elif key == "left__sleeve__connecting_width": random_list.append("left__sleeve__connecting_width__medium") elif key == "left__sleeve__end_width": random_list.append("left__sleeve__end_width__straight") elif 'False' in value_list[0] or 'True' in value_list[0]: random_list.append(value_list[1]) else: chice_num=random.randint(0,len(value_list)-1) random_list.append(value_list[chice_num]) else: if test_gpt_caption_list[key][0] in value_list: res= test_gpt_caption_list[key][0] random_list.append(res) else: chice_num = random.randint(0, len(value_list) - 1) random_list.append(value_list[chice_num]) return random_list def vec_2_pattern_yaml(yaml_data,param_vec,mask_list): yaml_file_name = None pattern_data_dict = {} pattern_vec = {} cont = 0 param_vec = np.clip(param_vec, 0, 1) def extract_new_vec_v2v(data, path=''): """ Recursively traverses the data structure and extracts all the 'v' values. :p aram data: YAML loaded data :p aram path: The path of the current field, which is used to display the hierarchy :return: No return value, print directly """ nonlocal cont nonlocal param_vec nonlocal mask_list if isinstance(data, dict): for key, value in data.items(): # If the key is 'v', the path and the corresponding value are printed if key == 'v': range = data['range'] if mask_list[cont] == 0 or data['v'] == 0: cont = cont + 1 continue elif data['type'] == 'select_null' or data['type'] == 'select': pass elif data['type'] == 'bool': pass elif data['type'] == 'int': re_normal_value = param_vec[cont] * (range[1] - range[0]) + range[0] data['v'] = int(re_normal_value) elif data['type'] == 'float': re_normal_value = param_vec[cont] * (range[1] - range[0]) + range[0] data['v'] = float(re_normal_value*mask_list[cont]) cont = cont + 1 else: # Recursively moves on to the next layer extract_new_vec_v2v(value, path + key + '.') extract_new_vec_v2v(yaml_data, path='') return yaml_data class NoAliasDumper(yaml.Dumper): def ignore_aliases(self, data): return True def save_design2yaml(design, new_yaml_path): garment_param = {'design': design} new_yaml_path_dir = os.path.dirname(new_yaml_path) os.makedirs(new_yaml_path_dir, exist_ok=True) with open(new_yaml_path, 'w') as yaml_file: yaml.dump(garment_param, yaml_file, default_flow_style=False, allow_unicode=True, sort_keys=False, Dumper=NoAliasDumper)