aliceblue11 commited on
Commit
bdb403f
·
verified ·
1 Parent(s): a67e862

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +373 -253
app.py CHANGED
@@ -1,8 +1,9 @@
1
  import gradio as gr
2
  import datetime
3
  import re
 
4
 
5
- class AdvancedSajuCalculator:
6
  def __init__(self):
7
  # 천간 (하늘줄기)
8
  self.heavenly_stems = ['갑', '을', '병', '정', '무', '기', '경', '신', '임', '계']
@@ -19,93 +20,71 @@ class AdvancedSajuCalculator:
19
  '술': '토', '해': '수'
20
  }
21
 
22
- # 오행별 음양
23
- self.element_yin_yang = {
24
- '': '', '': '', '': '', '': '', '': '',
25
- '': '', '': '', '': '', '': '', '': '',
26
- '': '', '': '', '': '', '': '', '': '',
27
- '': '', '': '', '': '', '': '', '': '',
28
- '': '', '': ''
29
  }
30
 
31
- # 십신 ( 정확한 계산)
32
- self.ten_gods = {
33
- ('', ''): '비견', ('', ''): '겁재', ('갑', '병'): '식신', ('', ''): '상관',
34
- ('', '무'): '편재', ('', ''): '정재', ('', '경'): '편관', ('', ''): '정관',
35
- ('', '임'): '편인', ('', ''): '정인',
36
- ('을', '갑'): '겁재', ('을', '을'): '비견', ('을', '병'): '상관', ('을', '정'): '식신',
37
- ('을', '무'): '정재', ('을', '기'): '편재', ('을', '경'): '정관', ('을', '신'): '편관',
38
- ('을', '임'): '정인', ('을', '계'): '편인'
39
  }
40
 
41
- # 24절기 (양력 기준 근사값)
42
- self.solar_terms = [
43
- (2, 4, '입춘'), (2, 19, '우수'), (3, 6, '경칩'), (3, 21, '춘분'),
44
- (4, 5, '청명'), (4, 20, '곡우'), (5, 6, '입하'), (5, 21, '소만'),
45
- (6, 6, '망종'), (6, 21, '하지'), (7, 7, '소서'), (7, 23, '대서'),
46
- (8, 8, '입추'), (8, 23, '처서'), (9, 8, '백로'), (9, 23, '추분'),
47
- (10, 8, '한로'), (10, 23, '상강'), (11, 7, '입동'), (11, 22, '소설'),
48
- (12, 7, '대설'), (12, 22, '동지'), (1, 6, '소한'), (1, 20, '대한')
49
- ]
 
 
 
 
 
 
 
 
 
50
 
51
  # 지역별 시간 보정 (서울 기준 분 단위)
52
  self.location_offsets = {
53
- '서울': 0, '서울특별시': 0, '경기': 0, '경기도': 0, '인천': 0,
54
- '강원': +12, '강원도': +12, '춘천': +12, '강릉': +20, '원주': +8,
55
  '충북': -8, '충청북도': -8, '청주': -8, '충주': 0,
56
- '충남': -16, '충청남도': -16, '대전': -12, '천안': -12,
57
  '전북': -20, '전라북도': -20, '전주': -20, '군산': -24,
58
- '전남': -24, '전라남도': -24, '광주': -20, '목포': -32, '여수': -16,
59
- '경북': +8, '경상북도': +8, '대구': +4, '포항': +20, '경주': +16,
60
- '경남': -4, '경상남도': -4, '부산': +12, '울산': +16, '���원': +4, '진주': -8,
61
  '제주': -20, '제주도': -20, '제주시': -20, '서귀포': -20
62
  }
63
 
64
  def get_location_offset(self, location):
65
- """출생지별 시간 보정"""
66
  if not location:
67
  return 0
 
68
  location = location.strip()
 
 
 
 
 
 
69
  for key, offset in self.location_offsets.items():
70
  if key in location or location in key:
71
  return offset
72
- return 0
73
-
74
- def get_solar_term_month(self, year, month, day):
75
- """절기를 고려한 정확한 월주 계산"""
76
- # 입춘 기준으로 년도 결정
77
- if month == 1 or month == 2:
78
- # 입춘(2/4) 이전이면 전년도
79
- lichun_date = datetime.date(year, 2, 4)
80
- current_date = datetime.date(year, month, day)
81
- if current_date < lichun_date:
82
- year -= 1
83
-
84
- # 절기 기준 월 계산
85
- month_mapping = {
86
- (2, 4): 1, # 입춘~경칩 = 정월
87
- (3, 6): 2, # 경칩~청명 = 2월
88
- (4, 5): 3, # 청명~입하 = 3월
89
- (5, 6): 4, # 입하~망종 = 4월
90
- (6, 6): 5, # 망종~소서 = 5월
91
- (7, 7): 6, # 소서~입추 = 6월
92
- (8, 8): 7, # 입추~백로 = 7월
93
- (9, 8): 8, # 백로~한로 = 8월
94
- (10, 8): 9, # 한로~입동 = 9월
95
- (11, 7): 10, # 입동~대설 = 10월
96
- (12, 7): 11, # 대설~소한 = 11월
97
- (1, 6): 12 # 소한~입춘 = 12월
98
- }
99
-
100
- # 현재 날짜가 어느 절기 구간에 속하는지 확인
101
- current_date = datetime.date(year if month >= 2 else year + 1, month, day)
102
 
103
- for (term_month, term_day), lunar_month in month_mapping.items():
104
- term_date = datetime.date(year if term_month >= 2 else year + 1, term_month, term_day)
105
- if current_date >= term_date:
106
- solar_month = lunar_month
107
-
108
- return year, solar_month
109
 
110
  def parse_date(self, date_str):
111
  """날짜 파싱"""
@@ -167,29 +146,43 @@ class AdvancedSajuCalculator:
167
  hour = hour % 24
168
  return hour, minute
169
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  def get_ganzhi(self, year, month, day, hour):
171
- """정확한 간지 계산 (절기 고려)"""
172
- # 절기 기준 연도와 월 계산
173
- adjusted_year, solar_month = self.get_solar_term_month(year, month, day)
174
 
175
- # 기준일: 1900년 1월 1일 (경자년 정축월 갑인일)
176
- base_date = datetime.date(1900, 1, 1)
177
- target_date = datetime.date(year, month, day)
178
  days_diff = (target_date - base_date).days
179
 
180
- # 연주 계산 (절기 기준)
181
- year_cycle = (adjusted_year - 1900) % 60
182
- year_stem_index = year_cycle % 10
183
- year_branch_index = year_cycle % 12
184
 
185
- # 월주 계산 (절기 기준)
186
- month_stem_index = (year_stem_index * 2 + solar_month - 1) % 10
187
- month_branch_index = (solar_month + 1) % 12
 
188
 
189
  # 일주 계산
190
- day_cycle = (days_diff + 10) % 60 # 1900.1.1이 갑인일
191
- day_stem_index = day_cycle % 10
192
- day_branch_index = day_cycle % 12
193
 
194
  # 시주 계산
195
  hour_branch_index = ((hour + 1) // 2) % 12
@@ -203,240 +196,367 @@ class AdvancedSajuCalculator:
203
  }
204
 
205
  def analyze_elements(self, ganzhi):
206
- """오행 분석"""
207
- elements = []
 
 
208
  for pillar in ganzhi.values():
209
  stem_element = self.five_elements[pillar[0]]
 
 
 
 
210
  branch_element = self.five_elements[pillar[1]]
211
- elements.extend([stem_element, branch_element])
212
 
213
- element_count = {}
214
- for element in ['목', '화', '토', '금', '수']:
215
- element_count[element] = elements.count(element)
 
 
 
216
 
217
  return element_count
218
 
219
  def get_ten_gods_analysis(self, ganzhi):
220
- """십신 분석 (정확한 계산)"""
221
  day_stem = ganzhi['day'][0]
 
222
 
223
  analysis = {}
224
  for pillar_name, pillar in ganzhi.items():
225
- stem = pillar[0]
226
- branch = pillar[1]
227
 
228
- # 천간 십신
229
- if (day_stem, stem) in self.ten_gods:
230
- stem_relation = self.ten_gods[(day_stem, stem)]
231
- else:
232
- # 기본 오행 관계로 계산
233
- day_element = self.five_elements[day_stem]
234
- stem_element = self.five_elements[stem]
235
- stem_relation = self.get_basic_relation(day_element, stem_element)
236
 
237
- # 지지 십신 (지지의 본기로 계산)
238
- branch_element = self.five_elements[branch]
239
- day_element = self.five_elements[day_stem]
240
- branch_relation = self.get_basic_relation(day_element, branch_element)
 
 
241
 
242
  analysis[pillar_name] = {
243
  'stem_relation': stem_relation,
244
- 'branch_relation': branch_relation
 
245
  }
246
 
247
  return analysis
248
 
249
- def get_basic_relation(self, day_element, target_element):
250
- """기본 오행 관계 계산"""
251
- relations = {
252
- '목': {'목': '비견', '화': '식신', '토': '편재', '금': '편관', '수': '편인'},
253
- '화': {'목': '편인', '화': '비견', '토': '식신', '금': '편재', '수': '편관'},
254
- '토': {'목': '편관', '화': '편인', '토': '비견', '금': '식신', '수': '편재'},
255
- '금': {'목': '편재', '화': '편관', '토': '편인', '금': '비견', '수': '식신'},
256
- '수': {'목': '식신', '화': '편재', '토': '편관', '금': '편인', '수': '비견'}
257
- }
258
- return relations[day_element][target_element]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
259
 
260
  def format_saju_result(calculator, ganzhi, elements, ten_gods, birth_info):
261
- """사주 결과 포맷팅 - 전문적인 표 형태"""
262
 
263
- # 오행별 색상 및 이모지
264
- element_info = {
265
- '목': {'color': '#28a745', 'emoji': '🌳', 'name': '목(木)'},
266
- '화': {'color': '#dc3545', 'emoji': '🔥', 'name': '화(火)'},
267
- '토': {'color': '#ffc107', 'emoji': '🏔️', 'name': '토(土)'},
268
- '금': {'color': '#6c757d', 'emoji': '⚔️', 'name': '금(金)'},
269
- '수': {'color': '#007bff', 'emoji': '💧', 'name': '수(水)'}
270
  }
271
 
272
- def get_colored_char(char, element):
273
- info = element_info[element]
274
- return f'<span style="color: {info["color"]}; font-weight: bold; font-size: 18px;">{char}</span>'
275
 
276
- def get_element_strength(count):
277
- if count >= 3:
278
- return '<span style="color: #dc3545;">**강함**</span>'
279
- elif count == 2:
280
- return '<span style="color: #ffc107;">**보통**</span>'
281
- else:
282
- return '<span style="color: #6c757d;">**약함**</span>'
283
 
284
  # 시간 보정 정보
285
- time_info = ""
286
  if birth_info['location_offset'] != 0:
287
  sign = "+" if birth_info['location_offset'] > 0 else ""
288
- time_info = f"""
289
  ### ⏰ 출생지 시간 보정
290
  - **입력 시간**: {birth_info['original_time']}
291
- - **보정 시간**: {birth_info['corrected_time']}
292
- - **보정값**: {birth_info['birth_place']} 기준 {sign}{birth_info['location_offset']}분
293
  """
294
 
295
- # 사주 표 생성
296
- year_stem = get_colored_char(ganzhi['year'][0], calculator.five_elements[ganzhi['year'][0]])
297
- year_branch = get_colored_char(ganzhi['year'][1], calculator.five_elements[ganzhi['year'][1]])
298
- month_stem = get_colored_char(ganzhi['month'][0], calculator.five_elements[ganzhi['month'][0]])
299
- month_branch = get_colored_char(ganzhi['month'][1], calculator.five_elements[ganzhi['month'][1]])
300
- day_stem = get_colored_char(ganzhi['day'][0], calculator.five_elements[ganzhi['day'][0]])
301
- day_branch = get_colored_char(ganzhi['day'][1], calculator.five_elements[ganzhi['day'][1]])
302
- hour_stem = get_colored_char(ganzhi['hour'][0], calculator.five_elements[ganzhi['hour'][0]])
303
- hour_branch = get_colored_char(ganzhi['hour'][1], calculator.five_elements[ganzhi['hour'][1]])
304
 
305
  result = f"""
306
- # 🔮 사주명리 만세력 완전분석
307
 
308
- ## 📋 출생 정보
309
- - **생년월일**: {birth_info['birth_datetime'].strftime('%Y년 %m월 %d일')} (양력)
310
- - **출생시간**: {birth_info['corrected_time']}
311
- - **성별**: {birth_info['gender']}
312
- - **출생지**: {birth_info['birth_place']}
313
- {time_info}
314
 
315
- ## 🏛️ 사주(四柱) 만세력 【절기 기준 정확 계산】
316
 
317
- <div style="background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); padding: 20px; border-radius: 10px; margin: 20px 0;">
318
 
319
- | **구분** | **시주(時柱)** | **일주(日柱)** | **월주(月柱)** | **연주(年柱)** |
320
- |:--------:|:-------------:|:-------------:|:-------------:|:-------------:|
321
- | **천간** | {hour_stem} | {day_stem} | {month_stem} | {year_stem} |
322
- | **지지** | {hour_branch} | {day_branch} | {month_branch} | {year_branch} |
323
- | **간지** | **{ganzhi['hour'][0]}{ganzhi['hour'][1]}** | **{ganzhi['day'][0]}{ganzhi['day'][1]}** | **{ganzhi['month'][0]}{ganzhi['month'][1]}** | **{ganzhi['year'][0]}{ganzhi['year'][1]}** |
324
- | **의미** | 자식·말년 | 본인·배우자 | 부모·청년 | 조상·유년 |
325
- | **오행** | {element_info[calculator.five_elements[ganzhi['hour'][0]]]['name']} / {element_info[calculator.five_elements[ganzhi['hour'][1]]]['name']} | {element_info[calculator.five_elements[ganzhi['day'][0]]]['name']} / {element_info[calculator.five_elements[ganzhi['day'][1]]]['name']} | {element_info[calculator.five_elements[ganzhi['month'][0]]]['name']} / {element_info[calculator.five_elements[ganzhi['month'][1]]]['name']} | {element_info[calculator.five_elements[ganzhi['year'][0]]]['name']} / {element_info[calculator.five_elements[ganzhi['year'][1]]]['name']} |
 
326
 
327
  </div>
328
 
329
- > **일간**: {get_colored_char(ganzhi['day'][0], calculator.five_elements[ganzhi['day'][0]])} - 당신의 본성을 나타내는 핵심 요소
 
 
330
 
331
- ## 🌟 오행(五行) 균형 분석
332
 
333
- <div style="background: #f8f9fa; padding: 15px; border-radius: 8px; margin: 15px 0;">
334
 
335
- | **오행** | **개수** | **비율** | **강약** | **특성** |
336
- |:--------:|:--------:|:--------:|:--------:|:--------:|
337
- | {element_info['목']['emoji']} **목(木)** | **{elements['목']}개** | {(elements['목']/8*100):.1f}% | {get_element_strength(elements['목'])} | 성장·창조·유연성 |
338
- | {element_info['화']['emoji']} **화(火)** | **{elements['화']}개** | {(elements['화']/8*100):.1f}% | {get_element_strength(elements['화'])} | 열정·활동·표현력 |
339
- | {element_info['토']['emoji']} **토(土)** | **{elements['토']}개** | {(elements['토']/8*100):.1f}% | {get_element_strength(elements['토'])} | 안정·신뢰·포용력 |
340
- | {element_info['금']['emoji']} **금(金)** | **{elements['금']}개** | {(elements['금']/8*100):.1f}% | {get_element_strength(elements['금'])} | 정의·결단·리더십 |
341
- | {element_info['수']['emoji']} **수(水)** | **{elements['수']}개** | {(elements['수']/8*100):.1f}% | {get_element_strength(elements['수'])} | 지혜·적응·사고력 |
342
 
343
  </div>
344
 
345
- ## 🎭 십신(十神) 관계 분석
 
 
 
 
 
 
 
346
 
347
- <div style="background: #fff3cd; padding: 15px; border-radius: 8px; margin: 15px 0;">
 
348
 
349
- | **주(柱)** | **천간 십신** | **지지 십신** | **의미** |
350
- |:----------:|:------------:|:------------:|:--------:|
351
- | **시주** | {ten_gods['hour']['stem_relation']} | {ten_gods['hour']['branch_relation']} | 자식운·말년운 |
352
- | **일주** | {ten_gods['day']['stem_relation']} | {ten_gods['day']['branch_relation']} | 본인·결혼운 |
353
- | **월주** | {ten_gods['month']['stem_relation']} | {ten_gods['month']['branch_relation']} | 부모운·사회운 |
354
- | **연주** | {ten_gods['year']['stem_relation']} | {ten_gods['year']['branch_relation']} | 조상운·초년운 |
355
 
356
- </div>
 
357
 
358
- ## 💡 종합 운세 해석
 
 
 
359
 
360
- ### 🎯 일간 분석 (핵심 성격)
361
- 일간 **{get_colored_char(ganzhi['day'][0], calculator.five_elements[ganzhi['day'][0]])}**({element_info[calculator.five_elements[ganzhi['day'][0]]]['name']})의 특성:
362
 
363
- {get_detailed_personality(calculator.five_elements[ganzhi['day'][0]])}
364
 
365
- ### ⚖️ 오행 균형 진단
366
- {get_advanced_balance_advice(elements)}
 
367
 
368
- ### 🔮 운세 포인트
369
- {get_fortune_points(ganzhi, elements, calculator)}
370
 
371
- ---
 
 
 
 
372
 
373
- ### 📌 분석 기준
374
- - ✅ **절기 기준 계산**: 입춘을 기준으로 정확한 연주·월주 산정
375
- - ✅ **출생지 시간 보정**: 지역별 경도차 반영
376
- - ✅ **전통 명리학**: 정통 사주명리학 이론 적용
377
 
378
- ### ⚠️ 유의사항
379
- 본 분석은 전통 사주명리학을 기반으로 기본 해석입니다. 더 정확하고 개인화된 분석을 위해서는 전문가 상담을 권장드립니다.
 
 
380
 
381
- ---
382
- *분석 완료: {datetime.datetime.now().strftime('%Y년 %m월 %d일 %H시 %M분')}*
383
  """
384
 
385
  return result
386
 
387
- def get_detailed_personality(element):
388
- """상세한 성격 분석"""
389
- personalities = {
390
- '목': """
391
- - **성격**: 따뜻하고 인정 많으며, 성장과 발전을 추구하는 성향
392
- - **장점**: 창의적, 유연한 사고, 협력적, 포용력이 강함
393
- - **특징**: 새로운 것을 배우고 성장하려는 의욕이 강하며, 타인을 도우려는 마음이 큼
394
- - **주의점**: 때로는 우유부단하거나 결정을 미루는 경향""",
395
-
396
- '화': """
397
- - **성격**: 밝고 활발하며, 열정적이고 사교적인 성향
398
- - **장점**: 리더십, 표현력, 긍정적 에너지, 추진력이 강함
399
- - **특징**: 사람들과 어울리기를 좋아하며, 새로운 도전을 즐김
400
- - **주의점**: 때로는 성급하거나 감정적인 판단을 할 수 있음""",
401
-
402
- '토': """
403
- - **성격**: 차분하고 신중하며, 안정을 추구하는 성향
404
- - **장점**: 책임감, 인내력, 신뢰성, 포용력이 뛰어남
405
- - **특징**: 꾸준하고 성실하며, 다른 사람들의 중재자 역할을 잘함
406
- - **주의점**: 때로는 변화에 적응이 늦거나 고집이 셀 수 있음""",
407
-
408
- '금': """
409
- - **성격**: 원칙적이고 정의로우며, 강한 의지력을 가진 성향
410
- - **장점**: 결단력, 리더십, 정직함, 목표 지향적
411
- - **특징**: 옳고 그름이 분명하며, 자신의 신념을 관철시키려 함
412
- - **주의점**: 때로는 융통성이 부족하거나 타인에게 엄격할 수 있음""",
413
-
414
- '수': """
415
- - **성격**: 지혜롭고 사려 깊으며, 깊이 있는 사고를 하는 성향
416
- - **장점**: 통찰력, 적응력, 학습능력, 직관력이 뛰어남
417
- - **특징**: 상황을 정확히 파악하고 현명한 판단을 내리는 능력
418
- - **주의점**: 때로는 지나치게 신중하거나 소극적일 수 있음"""
419
- }
420
- return personalities.get(element, "균형 잡힌 성격을 가지고 있습니다.")
421
-
422
- def get_advanced_balance_advice(elements):
423
- """고급 오행 균형 조언"""
424
- max_element = max(elements, key=elements.get)
425
- min_element = min(elements, key=elements.get)
426
- max_count = elements[max_element]
427
- min_count = elements[min_element]
428
 
429
- advice = f"""
430
- **🔸 강한 오행**: {max_element} ({max_count}개) - 이 기운이 강하게 나타남
431
- **🔸 약한 오행**: {min_element} ({min_count}개) - 이 기운을 보강하면 좋음
432
-
433
- **💫 균형 조절 방법**:
434
- """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
435
 
436
- if max_count - min_count > 2:
437
- advice += f"- {min_element}를 보강하는 색상, 방향, 직업을 선택\n"
438
- advice += f"- {max_element}의 과도한 기운을 조절하는 것이 필요\n"
439
- advice += "- 전체적인 조화를 위한 노력이 중요"
440
- else:
441
- advice += "- 현재 오행이 비교적 균형잡혀 있는 상태\n"
442
- advice += "- 기존의 균형을 유지하면서 발전시키는 것이
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
  import datetime
3
  import re
4
+ from calendar import monthrange
5
 
6
+ class SajuCalculator:
7
  def __init__(self):
8
  # 천간 (하늘줄기)
9
  self.heavenly_stems = ['갑', '을', '병', '정', '무', '기', '경', '신', '임', '계']
 
20
  '술': '토', '해': '수'
21
  }
22
 
23
+ # 십신
24
+ self.ten_gods = {
25
+ '': {'': '비견', '': '식신', '': '편재', '': '편관', '': '편인'},
26
+ '': {'': '편인', '': '비견', '': '식신', '': '편재', '': '편관'},
27
+ '': {'': '편관', '': '편인', '': '비견', '': '식신', '': '편재'},
28
+ '': {'': '편재', '': '편관', '': '편인', '': '비견', '': '식신'},
29
+ '': {'': '식신', '': '편재', '토': '편관', '금': '편인', '수': '비견'}
30
  }
31
 
32
+ # 지장간 (지지 안에 숨어있는 천간들)
33
+ self.hidden_stems = {
34
+ '': ['계'], '': ['', '', ''], '': ['갑', '병', ''], '': [''],
35
+ '': ['무', '', ''], '': ['', '', '경'], '오': ['', ''], '': ['', '정', '을'],
36
+ '': ['경', '임', '무'], '유': [''], '': ['무', '', '정'], '해': ['', '갑']
 
 
 
37
  }
38
 
39
+ # 12운성
40
+ self.twelve_phases = ['장생', '목욕', '관대', '건록', '제왕', '쇠', '병', '사', '묘', '절', '태', '양']
41
+
42
+ # 절기 정보 (월별 대략적인 날짜 - 실제로는 년도별로 다름)
43
+ self.seasonal_divisions = {
44
+ 1: {'소한': 6, '대한': 21},
45
+ 2: {'입춘': 4, '우수': 19},
46
+ 3: {'경칩': 6, '춘분': 21},
47
+ 4: {'청명': 5, '곡우': 20},
48
+ 5: {'입하': 6, '소만': 21},
49
+ 6: {'망종': 6, '하지': 21},
50
+ 7: {'소서': 7, '대서': 23},
51
+ 8: {'입추': 8, '처서': 23},
52
+ 9: {'백로': 8, '추분': 23},
53
+ 10: {'한로': 8, '상강': 24},
54
+ 11: {'입동': 7, '소설': 22},
55
+ 12: {'대설': 7, '동지': 22}
56
+ }
57
 
58
  # 지역별 시간 보정 (서울 기준 분 단위)
59
  self.location_offsets = {
60
+ '서울': 0, '서울특별시': 0, '경기': 0, '경기도': 0, '인천': 0, '인천광역시': 0,
61
+ '강원': +12, '강원도': +12, '춘천': +12, '원주': +8, '강릉': +20,
62
  '충북': -8, '충청북도': -8, '청주': -8, '충주': 0,
63
+ '충남': -16, '충청남도': -16, '대전': -12, '대전광역시': -12, '천안': -12,
64
  '전북': -20, '전라북도': -20, '전주': -20, '군산': -24,
65
+ '전남': -24, '전라남도': -24, '광주': -20, '광주광역시': -20, '목포': -32, '여수': -16,
66
+ '경북': +8, '경상북도': +8, '대구': +4, '대구광역시': +4, '포항': +20, '경주': +16,
67
+ '경남': -4, '경상남도': -4, '부산': +12, '부산광역시': +12, '울산': +16, '울산광역시': +16, '창원': +4, '마산': +4, '진주': -8,
68
  '제주': -20, '제주도': -20, '제주시': -20, '서귀포': -20
69
  }
70
 
71
  def get_location_offset(self, location):
72
+ """출생지에 따른 시간 보정값 반환 (분 단위)"""
73
  if not location:
74
  return 0
75
+
76
  location = location.strip()
77
+
78
+ # 정확한 매칭 시도
79
+ if location in self.location_offsets:
80
+ return self.location_offsets[location]
81
+
82
+ # 부분 매칭 시도
83
  for key, offset in self.location_offsets.items():
84
  if key in location or location in key:
85
  return offset
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
 
87
+ return 0 # 기본값 (서울 기준)
 
 
 
 
 
88
 
89
  def parse_date(self, date_str):
90
  """날짜 파싱"""
 
146
  hour = hour % 24
147
  return hour, minute
148
 
149
+ def get_seasonal_month(self, year, month, day):
150
+ """절기를 고려한 월주 계산"""
151
+ # 간단한 절기 계산 (정확하지 않지만 대략적)
152
+ seasonal_month = month
153
+
154
+ # 입춘(2월 4일경) 기준으로 월 조정
155
+ if month == 1:
156
+ seasonal_month = 12 # 12월 (축월)
157
+ elif month == 2:
158
+ if day < 4: # 입춘 전
159
+ seasonal_month = 12
160
+ else: # 입춘 후
161
+ seasonal_month = 1 # 1월 (인월)
162
+ else:
163
+ seasonal_month = month - 1
164
+
165
+ return seasonal_month
166
+
167
  def get_ganzhi(self, year, month, day, hour):
168
+ """간지 계산 (절기 고려)"""
169
+ base_date = datetime.datetime(1900, 1, 1)
170
+ target_date = datetime.datetime(year, month, day)
171
 
 
 
 
172
  days_diff = (target_date - base_date).days
173
 
174
+ # 연주 계산
175
+ year_stem_index = (year - 1900 + 6) % 10
176
+ year_branch_index = (year - 1900 + 0) % 12
 
177
 
178
+ # 월주 계산 (절기 고려)
179
+ seasonal_month = self.get_seasonal_month(year, month, day)
180
+ month_branch_index = (seasonal_month + 1) % 12 # 인월부터 시작
181
+ month_stem_index = (year_stem_index * 2 + seasonal_month) % 10
182
 
183
  # 일주 계산
184
+ day_stem_index = (days_diff + 10) % 10
185
+ day_branch_index = (days_diff + 2) % 12
 
186
 
187
  # 시주 계산
188
  hour_branch_index = ((hour + 1) // 2) % 12
 
196
  }
197
 
198
  def analyze_elements(self, ganzhi):
199
+ """오행 분석 (지장간 포함)"""
200
+ element_count = {'목': 0, '화': 0, '토': 0, '금': 0, '수': 0}
201
+
202
+ # 천간 오행 (가중치 1.0)
203
  for pillar in ganzhi.values():
204
  stem_element = self.five_elements[pillar[0]]
205
+ element_count[stem_element] += 1.0
206
+
207
+ # 지지 오행 (가중치 0.8)
208
+ for pillar in ganzhi.values():
209
  branch_element = self.five_elements[pillar[1]]
210
+ element_count[branch_element] += 0.8
211
 
212
+ # 지장간 오행 (가중치 0.3)
213
+ for pillar in ganzhi.values():
214
+ hidden = self.hidden_stems[pillar[1]]
215
+ for stem in hidden:
216
+ stem_element = self.five_elements[stem]
217
+ element_count[stem_element] += 0.3 / len(hidden)
218
 
219
  return element_count
220
 
221
  def get_ten_gods_analysis(self, ganzhi):
222
+ """십신 분석 (지장간 포함)"""
223
  day_stem = ganzhi['day'][0]
224
+ day_element = self.five_elements[day_stem]
225
 
226
  analysis = {}
227
  for pillar_name, pillar in ganzhi.items():
228
+ stem_element = self.five_elements[pillar[0]]
229
+ branch_element = self.five_elements[pillar[1]]
230
 
231
+ stem_relation = self.ten_gods[day_element][stem_element]
232
+ branch_relation = self.ten_gods[day_element][branch_element]
 
 
 
 
 
 
233
 
234
+ # 지장간 십신
235
+ hidden_relations = []
236
+ for hidden_stem in self.hidden_stems[pillar[1]]:
237
+ hidden_element = self.five_elements[hidden_stem]
238
+ hidden_relation = self.ten_gods[day_element][hidden_element]
239
+ hidden_relations.append(f"{hidden_stem}({hidden_relation})")
240
 
241
  analysis[pillar_name] = {
242
  'stem_relation': stem_relation,
243
+ 'branch_relation': branch_relation,
244
+ 'hidden_relations': hidden_relations
245
  }
246
 
247
  return analysis
248
 
249
+ def get_element_personality(element):
250
+ """오행별 성격 특성"""
251
+ personalities = {
252
+ '목': "창의적이고 성장 지향적이며, 유연하고 협력적인 성격을 가지고 있습니다.",
253
+ '화': "열정적이고 활동적이며, 밝고 사교적인 성격을 가지고 있습니다.",
254
+ '토': "안정적이고 신중하며, 포용력이 있고 책임감이 강한 성격을 가지고 있습니다.",
255
+ '금': "원칙적이고 정의로우며, 결단력이 있고 리더십이 강한 성격을 가지고 있습니다.",
256
+ '수': "지혜롭고 적응력이 있으며, 깊이 있고 신중한 성격을 가지고 있습니다."
257
+ }
258
+ return personalities.get(element, "균형 잡힌 성격을 가지고 있습니다.")
259
+
260
+ def get_element_balance_advice(elements):
261
+ """오행 균형에 따른 조언"""
262
+ max_element = max(elements, key=elements.get)
263
+ min_element = min(elements, key=elements.get)
264
+
265
+ advice = f"현재 {max_element}가 가장 강하고 {min_element}가 가장 약합니다. "
266
+
267
+ if elements[max_element] - elements[min_element] > 2:
268
+ advice += f"{min_element}를 보강하고 {max_element}의 기운을 조절하는 것이 좋겠습니다."
269
+ else:
270
+ advice += "전체적으로 균형이 잘 잡혀 있는 편입니다."
271
+
272
+ return advice
273
 
274
  def format_saju_result(calculator, ganzhi, elements, ten_gods, birth_info):
275
+ """사주 결과 포맷팅 - 전문적인 표 형태로 출력"""
276
 
277
+ # 오행별 색상 설정
278
+ element_colors = {
279
+ '목': '#28a745', # 녹색
280
+ '화': '#dc3545', # 빨강
281
+ '토': '#ffc107', # 노랑
282
+ '금': '#6c757d', # 회색
283
+ '수': '#007bff' # 파랑
284
  }
285
 
286
+ def get_colored_element(char, element):
287
+ color = element_colors.get(element, '#000000')
288
+ return f'<span style="color: {color}; font-weight: bold;">{char}</span>'
289
 
290
+ def get_colored_ganzhi(stem, branch):
291
+ stem_element = calculator.five_elements[stem]
292
+ branch_element = calculator.five_elements[branch]
293
+ colored_stem = get_colored_element(stem, stem_element)
294
+ colored_branch = get_colored_element(branch, branch_element)
295
+ return f'{colored_stem}{colored_branch}'
 
296
 
297
  # 시간 보정 정보
298
+ time_correction_info = ""
299
  if birth_info['location_offset'] != 0:
300
  sign = "+" if birth_info['location_offset'] > 0 else ""
301
+ time_correction_info = f"""
302
  ### ⏰ 출생지 시간 보정
303
  - **입력 시간**: {birth_info['original_time']}
304
+ - **보정 시간**: {birth_info['corrected_time']} ({birth_info['birth_place']} 기준 {sign}{birth_info['location_offset']}분 보정)
 
305
  """
306
 
307
+ birth_datetime = birth_info['birth_datetime']
308
+ gender = birth_info['gender']
309
+ birth_place = birth_info['birth_place']
310
+ corrected_time = birth_info['corrected_time']
 
 
 
 
 
311
 
312
  result = f"""
313
+ # 🔮 사주명리 만세력 분석결과
314
 
315
+ ## 📋 기본정보
316
+ - **생년월일**: {birth_datetime.strftime('%Y년 %m월 %d일')}
317
+ - **출생시간**: {corrected_time} ({birth_place})
318
+ - **성별**: {gender}
319
+ {time_correction_info}
 
320
 
321
+ ## 🏛️ 사주(四柱) 만세력표
322
 
323
+ <div style="text-align: center; font-size: 16px;">
324
 
325
+ | 구분 | **시주(時柱)** | **일주(日柱)** | **월주(月柱)** | **연주(年柱)** |
326
+ |:---:|:---:|:---:|:---:|:---:|
327
+ | **천간** | {get_colored_element(ganzhi['hour'][0], calculator.five_elements[ganzhi['hour'][0]])} | {get_colored_element(ganzhi['day'][0], calculator.five_elements[ganzhi['day'][0]])} | {get_colored_element(ganzhi['month'][0], calculator.five_elements[ganzhi['month'][0]])} | {get_colored_element(ganzhi['year'][0], calculator.five_elements[ganzhi['year'][0]])} |
328
+ | **십신** | {ten_gods['hour']['stem_relation']} | {ten_gods['day']['stem_relation']} | {ten_gods['month']['stem_relation']} | {ten_gods['year']['stem_relation']} |
329
+ | **지지** | {get_colored_element(ganzhi['hour'][1], calculator.five_elements[ganzhi['hour'][1]])} | {get_colored_element(ganzhi['day'][1], calculator.five_elements[ganzhi['day'][1]])} | {get_colored_element(ganzhi['month'][1], calculator.five_elements[ganzhi['month'][1]])} | {get_colored_element(ganzhi['year'][1], calculator.five_elements[ganzhi['year'][1]])} |
330
+ | **십신** | {ten_gods['hour']['branch_relation']} | {ten_gods['day']['branch_relation']} | {ten_gods['month']['branch_relation']} | {ten_gods['year']['branch_relation']} |
331
+ | **간지** | **{get_colored_ganzhi(ganzhi['hour'][0], ganzhi['hour'][1])}** | **{get_colored_ganzhi(ganzhi['day'][0], ganzhi['day'][1])}** | **{get_colored_ganzhi(ganzhi['month'][0], ganzhi['month'][1])}** | **{get_colored_ganzhi(ganzhi['year'][0], ganzhi['year'][1])}** |
332
+ | **지장간** | {"·".join(calculator.hidden_stems[ganzhi['hour'][1]])} | {"·".join(calculator.hidden_stems[ganzhi['day'][1]])} | {"·".join(calculator.hidden_stems[ganzhi['month'][1]])} | {"·".join(calculator.hidden_stems[ganzhi['year'][1]])} |
333
 
334
  </div>
335
 
336
+ **💫 사주 구성**
337
+ - **일간(日干)**: {get_colored_element(ganzhi['day'][0], calculator.five_elements[ganzhi['day'][0]])} - 본인을 나타내는 핵심 요소
338
+ - **월령(月令)**: {get_colored_element(ganzhi['month'][1], calculator.five_elements[ganzhi['month'][1]])} - 계절의 기운과 성장 환경
339
 
340
+ ## 🌟 오행(五行) 분석
341
 
342
+ <div style="text-align: center;">
343
 
344
+ | 오행 | 천간+지지+지장간 | 비율 | 상태 | 특징 |
345
+ |:---:|:---:|:---:|:---:|:---:|
346
+ | {get_colored_element('목', '')} | {elements['목']:.1f} | {(elements['목']/sum(elements.values())*100):.1f}% | {'매우강함' if elements['목'] >= 3 else '강함' if elements['목'] >= 2 else '보통' if elements['목'] >= 1 else '약함'} | 성장, 창의, 인자함 |
347
+ | {get_colored_element('화', '')} | {elements['화']:.1f} | {(elements['화']/sum(elements.values())*100):.1f}% | {'매우강함' if elements['화'] >= 3 else '강함' if elements['화'] >= 2 else '보통' if elements['화'] >= 1 else '약함'} | 열정, 활동, 표현력 |
348
+ | {get_colored_element('토', '')} | {elements['토']:.1f} | {(elements['토']/sum(elements.values())*100):.1f}% | {'매우강함' if elements['토'] >= 3 else '강함' if elements['토'] >= 2 else '보통' if elements['토'] >= 1 else '약함'} | 안정, 포용, 신뢰 |
349
+ | {get_colored_element('금', '')} | {elements['금']:.1f} | {(elements['금']/sum(elements.values())*100):.1f}% | {'매우강함' if elements['금'] >= 3 else '강함' if elements['금'] >= 2 else '보통' if elements['금'] >= 1 else '약함'} | 의지, 결단, 정의 |
350
+ | {get_colored_element('수', '')} | {elements['수']:.1f} | {(elements['수']/sum(elements.values())*100):.1f}% | {'매우강함' if elements['수'] >= 3 else '강함' if elements['수'] >= 2 else '보통' if elements['수'] >= 1 else '약함'} | 지혜, 유연, 깊이 |
351
 
352
  </div>
353
 
354
+ ### 오행 균형 분석
355
+ """
356
+
357
+ max_element = max(elements, key=elements.get)
358
+ min_element = min(elements, key=elements.get)
359
+
360
+ result += f"- **가장 강한 오행**: {get_colored_element(max_element, max_element)} ({elements[max_element]:.1f}점)\n"
361
+ result += f"- **가장 약한 오행**: {get_colored_element(min_element, min_element)} ({elements[min_element]:.1f}점)\n"
362
 
363
+ result += """
364
+ ## 🎭 십신(十神) 세부 분석
365
 
366
+ <div style="text-align: center;">
 
 
 
 
 
367
 
368
+ | 구분 | **시주** | **일주** | **월주** | **연주** |
369
+ |:---:|:---:|:---:|:---:|:---:|"""
370
 
371
+ result += f"""
372
+ | **천간 십신** | {ten_gods['hour']['stem_relation']} | {ten_gods['day']['stem_relation']} | {ten_gods['month']['stem_relation']} | {ten_gods['year']['stem_relation']} |
373
+ | **지지 십신** | {ten_gods['hour']['branch_relation']} | {ten_gods['day']['branch_relation']} | {ten_gods['month']['branch_relation']} | {ten_gods['year']['branch_relation']} |
374
+ | **지장간** | {' '.join(ten_gods['hour']['hidden_relations'])} | {' '.join(ten_gods['day']['hidden_relations'])} | {' '.join(ten_gods['month']['hidden_relations'])} | {' '.join(ten_gods['year']['hidden_relations'])} |
375
 
376
+ </div>
 
377
 
378
+ ## 💡 종합 해석
379
 
380
+ ### 일간 분석
381
+ - **일간**: {get_colored_element(ganzhi['day'][0], calculator.five_elements[ganzhi['day'][0]])} ({calculator.five_elements[ganzhi['day'][0]]}행)
382
+ - **성격**: {get_element_personality(calculator.five_elements[ganzhi['day'][0]])}
383
 
384
+ ### 오행 조화 분석
385
+ {get_element_balance_advice(elements)}
386
 
387
+ ### 십신 구성 특징
388
+ - **관성(편관/정관)**: {"있음" if any("관" in str(ten_gods[p]['stem_relation']) or "관" in str(ten_gods[p]['branch_relation']) for p in ten_gods) else "없음"} - 리더십, 책임감
389
+ - **재성(편재/정재)**: {"있음" if any("재" in str(ten_gods[p]['stem_relation']) or "재" in str(ten_gods[p]['branch_relation']) for p in ten_gods) else "없음"} - 재물운, 실용성
390
+ - **인성(편인/정인)**: {"있음" if any("인" in str(ten_gods[p]['stem_relation']) or "인" in str(ten_gods[p]['branch_relation']) for p in ten_gods) else "없음"} - 학습력, 지혜
391
+ - **식상(식신/상관)**: {"있음" if any("식" in str(ten_gods[p]['stem_relation']) or "상" in str(ten_gods[p]['branch_relation']) for p in ten_gods) else "없음"} - 창의력, 표현력
392
 
393
+ ---
 
 
 
394
 
395
+ ### 📌 주의사항
396
+ - 본 분석은 절기를 고려한 전통 사주명리학 원리에 따른 것입니다
397
+ - 지장간과 십신 관계를 포함한 종합적 분석입니다
398
+ - 정확한 운세 해석을 위해서는 전문가 상담을 권장합니다
399
 
400
+ *분석 일시: {datetime.datetime.now().strftime('%Y년 %m월 %d일 %H시 %M분')}*
 
401
  """
402
 
403
  return result
404
 
405
+ def calculate_saju(birth_date, birth_time, gender, birth_place):
406
+ """사주 계산 메인 함수"""
407
+ # SajuCalculator 인스턴스 생성
408
+ calculator = SajuCalculator()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
409
 
410
+ try:
411
+ # 입력 검증
412
+ if not birth_date:
413
+ return "❌ 생년월일을 입력해주세요."
414
+
415
+ # 날짜 파싱
416
+ year, month, day = calculator.parse_date(birth_date)
417
+
418
+ # 시간 파싱
419
+ hour, minute = calculator.parse_time(birth_time)
420
+
421
+ # 출생지에 따른 시간 보정
422
+ location_offset = calculator.get_location_offset(birth_place)
423
+
424
+ # 보정된 시간 계산
425
+ corrected_minute = minute + location_offset
426
+ corrected_hour = hour
427
+
428
+ # 분이 60을 넘거나 0 미만인 경우 시간 조정
429
+ if corrected_minute >= 60:
430
+ corrected_hour += corrected_minute // 60
431
+ corrected_minute = corrected_minute % 60
432
+ elif corrected_minute < 0:
433
+ corrected_hour -= (-corrected_minute - 1) // 60 + 1
434
+ corrected_minute = 60 + (corrected_minute % 60)
435
+
436
+ # 시간이 24를 넘거나 0 미만인 경우 조정
437
+ corrected_hour = corrected_hour % 24
438
+
439
+ # 날짜 유효성 검사
440
+ if year < 1900 or year > 2100:
441
+ return f"❌ 연도는 1900~2100 사이여야 합니다. 입력된 연도: {year}"
442
+ if month < 1 or month > 12:
443
+ return f"❌ 월은 1~12 사이여야 합니다. 입력된 월: {month}"
444
+ if day < 1 or day > 31:
445
+ return f"❌ 일은 1~31 사이여야 합니다. 입력된 일: {day}"
446
+
447
+ # datetime 객체 생성 (보정된 시간 사용)
448
+ birth_datetime = datetime.datetime(year, month, day, corrected_hour, corrected_minute)
449
+ original_time = f"{hour:02d}:{minute:02d}"
450
+ corrected_time = f"{corrected_hour:02d}:{corrected_minute:02d}"
451
+
452
+ # 출생 정보 딕셔너리
453
+ birth_info = {
454
+ 'birth_datetime': birth_datetime,
455
+ 'gender': gender,
456
+ 'birth_place': birth_place,
457
+ 'original_time': original_time,
458
+ 'corrected_time': corrected_time,
459
+ 'location_offset': location_offset
460
+ }
461
+
462
+ # 간지 계산 (절기 고려)
463
+ ganzhi = calculator.get_ganzhi(year, month, day, corrected_hour)
464
+
465
+ # 오행 분석 (지장간 포함)
466
+ elements = calculator.analyze_elements(ganzhi)
467
+
468
+ # 십신 분석 (지장간 포함)
469
+ ten_gods = calculator.get_ten_gods_analysis(ganzhi)
470
+
471
+ # 결과 포맷팅
472
+ result = format_saju_result(calculator, ganzhi, elements, ten_gods, birth_info)
473
+
474
+ return result
475
+
476
+ except ValueError as ve:
477
+ return f"❌ 입력 오류: {str(ve)}\n\n💡 입력 예시:\n- 생년월일: 19851015, 1985-10-15\n- 시간: 1430, 14:30"
478
 
479
+ except Exception as e:
480
+ return f" 계산 오류가 발생했습니다: {str(e)}"
481
+
482
+ def create_interface():
483
+ """Gradio 인터페이스 생성"""
484
+ with gr.Blocks(title="🔮 전문 사주명리 만세력 시스템") as demo:
485
+ gr.HTML("""
486
+ <div style="text-align: center; padding: 20px;">
487
+ <h1>🔮 전문 사주명리학 만세력 분석 시스템</h1>
488
+ <p><strong>절기 고려 · 지장간 분석 · 출생지 시간 보정</strong></p>
489
+ <p>생년월일시와 출생지 정보를 입력하시면 전문적인 만세력을 분석해드립니다.</p>
490
+ </div>
491
+ """)
492
+
493
+ with gr.Row():
494
+ with gr.Column(scale=1):
495
+ gr.HTML("<h3>📝 정보 입력</h3>")
496
+
497
+ birth_date = gr.Textbox(
498
+ label="생년월일",
499
+ placeholder="19851015 또는 1985-10-15",
500
+ info="8자리 숫자 또는 구분자 포함하여 입력 (양력 기준)"
501
+ )
502
+
503
+ birth_time = gr.Textbox(
504
+ label="태어난 시간 (선택사항)",
505
+ placeholder="1430 또는 14:30",
506
+ info="정확한 시간을 입력하세요. 비우면 정오(12시)로 설정됩니다."
507
+ )
508
+
509
+ gender = gr.Radio(
510
+ choices=["남", "여"],
511
+ label="성별",
512
+ value="남"
513
+ )
514
+
515
+ birth_place = gr.Textbox(
516
+ label="출생지",
517
+ placeholder="서울특별시",
518
+ info="정확한 출생지를 입력하면 시간 보정이 적용됩니다"
519
+ )
520
+
521
+ calculate_btn = gr.Button(
522
+ "🔮 전문 만세력 분석하기",
523
+ variant="primary"
524
+ )
525
+
526
+ with gr.Row():
527
+ with gr.Column():
528
+ result_output = gr.Markdown(
529
+ label="분석 결과",
530
+ value="👆 위의 정보를 입력하고 '전문 만세력 분석하기' 버튼을 클릭하세요."
531
+ )
532
+
533
+ # 이벤트 연결
534
+ calculate_btn.click(
535
+ fn=calculate_saju,
536
+ inputs=[birth_date, birth_time, gender, birth_place],
537
+ outputs=result_output
538
+ )
539
+
540
+ gr.HTML("""
541
+ <div style="text-align: center; padding: 20px; margin-top: 30px; border-top: 1px solid #eee;">
542
+ <h4>🔍 시스템 특징</h4>
543
+ <div style="display: flex; justify-content: center; gap: 30px; flex-wrap: wrap;">
544
+ <div>✅ <strong>절기 고려</strong><br>정확한 월주 계산</div>
545
+ <div>✅ <strong>지장간 분석</strong><br>지지 안 숨은 천간</div>
546
+ <div>✅ <strong>십신 세분화</strong><br>천간/지지/지장간별</div>
547
+ <div>✅ <strong>시간 보정</strong><br>전국 지역별 적용</div>
548
+ <div>✅ <strong>오행 가중치</strong><br>천간/지지/지장간</div>
549
+ </div>
550
+ <p style="margin-top: 15px;"><small>※ 본 시스템은 전통 사주명리학을 기반으로 하며, 참고용으로만 활용해주시기 바랍니다.</small></p>
551
+ </div>
552
+ """)
553
+
554
+ return demo
555
+
556
+ if __name__ == "__main__":
557
+ demo = create_interface()
558
+ demo.launch(
559
+ server_name="0.0.0.0",
560
+ server_port=7860,
561
+ share=True
562
+ )