Download NAIA_random_function_core.py from baqu2213/PoemForSmallFThings: direct link, hf CLI and curl.
- Browser
- Download file 8.85 kB
-
https://huggingface.co/baqu2213/PoemForSmallFThings/resolve/54318a582fa23b60f164df2af2c867caa0ef2fdb/NAIA_random_function_core.py
- Command line
-
hf download hf://baqu2213/PoemForSmallFThings@54318a582fa23b60f164df2af2c867caa0ef2fdb/NAIA_random_function_core.py
-
curl -L -o NAIA_random_function_core.py https://huggingface.co/baqu2213/PoemForSmallFThings/resolve/54318a582fa23b60f164df2af2c867caa0ef2fdb/NAIA_random_function_core.py
8.85 kB
| import pandas as pd | |
| import numpy as np | |
| import re | |
| def parse_and_execute_commands(processed, user_input, fix, after, popped_row): | |
| commands = [cmd.strip() for cmd in user_input.split(',')] | |
| for command in commands: | |
| condition, cmd = parse_conditional_command(command) | |
| if check_condition(processed, condition, popped_row): | |
| processed = execute_command(processed, cmd, fix, after) | |
| return processed | |
| def parse_conditional_command(command): | |
| match = re.match(r"\((.*?)\)\:(.*)", command) | |
| if match: | |
| return match.groups() | |
| return '', command | |
| def check_condition(processed, condition, popped_row): | |
| if not condition: | |
| return True | |
| sub_conditions = re.split(r'\)\s*&\s*\(', condition) | |
| sub_conditions = [re.sub(r'^\(|\)$', '', cond) for cond in sub_conditions] | |
| results = [] | |
| for sub_cond in sub_conditions: | |
| if '&' in sub_cond: | |
| results.append(all(check_condition(processed, cond, popped_row) for cond in sub_cond.split('&'))) | |
| elif '|' in sub_cond: | |
| results.append(any(check_condition(processed, cond, popped_row) for cond in sub_cond.split('|'))) | |
| else: | |
| if sub_cond in ['e', 'q', 's', 'g']: | |
| results.append(sub_cond == popped_row['rating']) | |
| elif sub_cond in ['~e', '~q', '~s', '~g']: | |
| results.append(sub_cond != popped_row['rating']) | |
| # PM | |
| elif sub_cond.startswith('*'): | |
| results.append(sub_cond[1:] in processed) | |
| # NOT IN | |
| elif sub_cond.startswith('~!'): | |
| results.append(sub_cond[2:] not in processed) | |
| elif sub_cond.startswith('~'): | |
| results.append(any(sub_cond[1:] not in element for element in processed)) | |
| # CONTAIN | |
| else: | |
| results.append(any(sub_cond in element for element in processed)) | |
| return all(results) | |
| def execute_command(processed, command, fix, after): | |
| if '+=' in command: | |
| keyword, addition = command.split('+=', 1) | |
| addition = addition.replace('^', ', ') | |
| #addiction split ํด์ ํ๋กฌํํธ ์กด์ฌํ๋์ง ์ฒดํฌ ํ์ | |
| return insert_text_after_keyword(processed, keyword, addition, fix, after) | |
| elif '=' in command: | |
| keyword, replacement = command.split('=', 1) | |
| if keyword in processed: | |
| replacement = replacement.replace('^', ', ') | |
| #replacement split ํด์ ํ๋กฌํํธ ์กด์ฌํ๋์ง ์ฒดํฌ ํ์ | |
| index = processed.index(keyword) | |
| processed[index] = replacement | |
| return processed | |
| def insert_text_after_keyword(processed, user_keyword, user_additional_keyword, fix, after): | |
| if user_keyword == "prompt": | |
| processed.append(user_additional_keyword) | |
| elif user_keyword == "prefix": | |
| fix.append(user_additional_keyword) | |
| elif user_keyword == "postfix": | |
| after.append(user_additional_keyword) | |
| elif user_keyword in processed: | |
| index = processed.index(user_keyword) + 1 | |
| processed.insert(index, user_additional_keyword) | |
| return processed | |
| def find_keyword_index(general): | |
| # boys์ girls ๋ฆฌ์คํธ์ ์์๊ฐ ์๋์ง ํ์ธ ๋ฐ ์ธ๋ฑ์ค ์ ์ฅ | |
| boys = ["1boy", "2boys", "3boys", "4boys", "5boys", "6+boys"] | |
| girls = ["1girl", "2girls", "3girls", "4girls", "5girls", "6+girls"] | |
| #others = ["1other", "2others", "3others", "4others", "5others", "6+others"] | |
| boys_indices = [i for i, item in enumerate(general[:6]) if item in boys] | |
| girls_indices = [i for i, item in enumerate(general[:6]) if item in girls] | |
| # case 1๊ณผ case 2: girls ๋ฆฌ์คํธ์ ์์ ์ฐพ๊ธฐ | |
| if girls_indices: | |
| return girls_indices[0]+1 | |
| # case 3: boys ๋ฆฌ์คํธ์ ์์ ์ฐพ๊ธฐ | |
| if boys_indices: | |
| return boys_indices[0]+1 | |
| # case 4: ํด๋น ์ฌํญ ์์ | |
| # 2์ 12์ผ์ ํด๋น ๋ถ๋ถ return 2 -> return 0 ์ผ๋ก ์์ ํ์์ผ๋ฉฐ ์ด ๋ถ๋ถ ํธ๋ํน ํ์ | |
| return 0 | |
| def RFP(popped_row, fix_prompt, after_prompt, auto_hide_prompt, rm_a, rm_s, rm_c, nsfw, data, magic_word): | |
| boys = ["1boy", "2boys", "3boys", "4boys", "5boys", "6+boys"] | |
| girls = ["1girl", "2girls", "3girls", "4girls", "5girls", "6+girls"] | |
| general = [item.strip() for item in popped_row['general'].split(',')] | |
| special_word_check = fix_prompt+', '+after_prompt | |
| special_word_check = [item.strip() for item in special_word_check.split(',')] | |
| special_word_check = [item for item in special_word_check if item.startswith('*')] | |
| exc = [] | |
| for keyword in general: | |
| if keyword == '!' or keyword == '!?' or keyword == '!!': | |
| exc.append(keyword) | |
| if exc: | |
| for keyword in exc: | |
| general.remove(keyword) | |
| general[3:3] = exc | |
| if nsfw == 1: | |
| nsfw_word = [] | |
| for keyword in general: | |
| if keyword in data.qe_word or keyword in data.bag_of_tags or "horns" in keyword or "(" in keyword or keyword in boys or keyword in girls: | |
| nsfw_word.append(keyword) | |
| general = nsfw_word | |
| if rm_c == 1: | |
| temp_general = [] | |
| for keyword in general: | |
| if keyword in data.bag_of_tags: | |
| temp_general.append(keyword) | |
| for keyword in temp_general: | |
| general.remove(keyword) | |
| fix = [item.strip() for item in fix_prompt.split(',')] | |
| at_first = [] | |
| for fp in fix: | |
| if fp.startswith('*'): | |
| at_first.append(fp[1:]) | |
| if at_first: | |
| for af in at_first: | |
| if '*'+af in fix: | |
| fix.remove('*'+af) | |
| if rm_a == 0: | |
| if popped_row['artist']: | |
| artists = [item.strip() for item in popped_row['artist'].split(',')] | |
| artist = ["artist:" + _artist for _artist in artists] | |
| fix = fix + artist | |
| if rm_s == 0: | |
| if popped_row['copyright']: | |
| series = [item.strip() for item in popped_row['copyright'].split(',')] | |
| else: | |
| series = [] | |
| fix = fix + series | |
| after = [item.strip() for item in after_prompt[:-1].split(',')] | |
| auto_hide = [item.strip() for item in auto_hide_prompt[:-1].split(',')] + ["| |", ":|", "\||/", "<|> <|>", "|| ||", ";|"] | |
| fix_index = find_keyword_index(general) | |
| processed = general.copy() | |
| temp_hide_prompt = [] | |
| for keyword in processed: | |
| if keyword in auto_hide: | |
| temp_hide_prompt.append(keyword) | |
| for keyword in temp_hide_prompt: | |
| processed.remove(keyword) | |
| #์ฌ๊ธฐ์์ ๋ฌธ์ ์ magic word ์ฒ๋ฆฌ | |
| if "cond" in magic_word and magic_word["cond"]: | |
| user_input = magic_word["cond"] | |
| processed = parse_and_execute_commands(processed, user_input, fix, after, popped_row) | |
| processed[fix_index:fix_index] = fix | |
| processed += after | |
| if rm_c == 0 and '*(remove character name)' not in special_word_check and '*(set character name after prefix)' not in special_word_check and '*(set character name before prefix)' not in special_word_check: | |
| if popped_row['character']: | |
| character = [item.strip() for item in popped_row['character'].split(',')] | |
| processed[fix_index:fix_index] = character | |
| fix_index+=len(character) | |
| elif rm_c == 0 and '*(set character name after prefix)' in special_word_check: | |
| if popped_row['character']: | |
| character = [item.strip() for item in popped_row['character'].split(',')] | |
| processed[fix_index+len(fix):fix_index+len(fix)] = character | |
| #fix_index+=len(character) | |
| elif rm_c == 0 and '*(set character name before prefix)' in special_word_check: | |
| if popped_row['character']: | |
| character = [item.strip() for item in popped_row['character'].split(',')] | |
| processed[fix_index+1:fix_index+1] = character | |
| fix_index+=len(character) | |
| if magic_word["random_artist"] == True: | |
| processed.insert(fix_index, magic_word["random_artist_name"]) | |
| boy_in_processed = girl_in_processed = None | |
| for boy in boys: | |
| if boy in processed: | |
| boy_in_processed = boy | |
| break | |
| for girl in girls: | |
| if girl in processed: | |
| girl_in_processed = girl | |
| break | |
| if boy_in_processed and girl_in_processed: | |
| boy_index = processed.index(boy_in_processed) | |
| girl_index = processed.index(girl_in_processed) | |
| if boy_index > girl_index: | |
| processed.pop(boy_index) | |
| processed.insert(girl_index, boy_in_processed) | |
| s_word = ['*(remove character name)', '*(set character name after prefix)', '*(set character name before prefix)'] | |
| for keyword in s_word: | |
| if keyword in processed: | |
| processed.remove(keyword) | |
| if at_first: | |
| processed = at_first + processed | |
| return ', '.join(processed), popped_row['rating'] |