import calendar
import os
import tempfile
from subprocess import run as چلاو
import numpy as np
import pandas as pd
from pkg_resources import resource_filename as وسائل_کا_نام
from tradssat import WTHFile
from تقدیر.ذریعہ import ذریعہ
from تقدیر.کام import اختیارہ_پانا, اختیارہ_رکھنا
from எண்ணிக்கை import எண்ணுக்கு as எ, உரைக்கு as உ
from .دیسات import دیسات_سے_پڑھنا
_خاکے_مرکسم = [0, 2.6, 4.5, 6.0, 8.5]
class مرکسم۵_سانچہ(ذریعہ):
متغیرات = ['بارش', 'شمسی_تابکاری', 'درجہ_حرارت_زیادہ', 'درجہ_حرارت_کم']
def __init__(خود, نمونہ='۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱'):
"""
Parameters
----------
نمونہ: str
"""
نمونہ = ''.join([உ(ن, 'فارسی') for ن in نمونہ])
if len(نمونہ) != 17 or نمونہ.replace('۰', '').replace('۱', ''):
raise ValueError(نمونہ)
خود.نمونے = نمونہ
خود.راستے = راستے_نتائج_مرکسم()
def _کوائف_بنانا(خود, سے, تک, عرض, طول, بلندی, خاکے):
خاکے = எ(خاکے)
if خاکے not in _خاکے_مرکسم:
return
خاکے = 'rcp' + str(خاکے).replace('.', '')
if خاکے == 'rcp0':
خاکے = 'rcp26'
سانچے_نمونہ = '۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰'
else:
سانچے_نمونہ = خود.نمونے
اعداد_پاندس = pd.DataFrame()
سلسلہ_سال = range(min(سے.year, 2096), min(تک.year, 2095) + 1)
خود._مسل_کوائف_بنانا(سلسلہ_سال, عرض, طول, بلندی, خاکے, سانچے_نمونہ)
for سال in سلسلہ_سال:
راستہ = خود._راستہ_نتیجہ(عرض, طول, بلندی, سال, خاکے, خود.نمونے)
if راستہ is not None:
مسل = _مسل_پانا(راستہ)
if مسل is not None:
اعداد_پاندس = اعداد_پاندس.combine_first(دیسات_سے_پڑھنا(WTHFile(مسل), سال=سال))
return اعداد_پاندس
@staticmethod
def _راستہ_بھری_ہیے(راستہ):
return os.path.isdir(راستہ) and len([م for م in os.listdir(راستہ) if WTHFile.matches_file(م)]) >= 10
def _راستہ_نتیجہ(خود, چوڑائی, طول, بلندی, سال, خاکے, نمونے):
return os.path.join(
خود.راستے.راستے_پانا(چوڑائی, طول, بلندی),
'TQDR_{}_{}_{}'.format(نمونے, خاکے, سال)
)
def _مسل_کوائف_بنانا(خود, سلسلہ_سال, چوڑائی, طول, بلندی, خاکے, سانچے_نمونہ):
raise NotImplementedError
[docs]class مرکسم۵(مرکسم۵_سانچہ):
"""
یہ ذریعہ آپکے تخمینہ کار پر ہونے والے` مرکسم ۵ <http://www.ccafs-climate.org/pattern_scaling/>`_ سے آوہوا
تبدیلی کے کوائف پاتا ہیے۔
"""
_راستہ_سانچے = وسائل_کا_نام(__name__, 'وسائل/سانچے_مرکسم۵.txt')
def __init__(خود, مسل_مرکسم=None, راستہ_کوائف='gcm5data', نمونہ='۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱'):
super().__init__(نمونہ=نمونہ)
خود.مسل_مرکسم = مسل_مرکسم or راستہ_مرکسم_پانا()
if not os.path.splitdrive(راستہ_کوائف)[0] and خود.مسل_مرکسم is not None:
راستہ_کوائف = os.path.join(os.path.split(خود.مسل_مرکسم)[0], راستہ_کوائف)
if not os.path.isdir(راستہ_کوائف):
راستہ_کوائف = None
خود.راستہ_کوائف_مرکسم = راستہ_کوائف
def _مسل_کوائف_بنانا(خود, سلسلہ_سال, چوڑائی, طول, بلندی, خاکے, سانچے_نمونہ):
if خود.مسل_مرکسم is None:
return
with open(خود._راستہ_سانچے, 'r', encoding='utf8') as م:
سانچے = م.readlines()
for س, لکیر in enumerate(سانچے):
سانچے[س] = لکیر.format(LAT=چوڑائی, LONG=طول, ELEV=بلندی)
راستہ_بنیاد = خود.راستے.راستے_پانا(چوڑائی, طول, بلندی)
with open(os.path.join(راستہ_بنیاد, 'TQDR.CLI'), 'w') as م:
م.write(''.join(سانچے))
# ہر سال کے لئے...
for سال in سلسلہ_سال:
if سال < 2013:
if calendar.isleap(سال):
سال_مارکسم = 2016
else:
سال_مارکسم = 2013
else:
سال_مارکسم = سال
if سال < 2013:
سانچے_نمونہ = '۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰'
سانچے_نمونہ = ''.join(உ(ن, 'latin') for ن in سانچے_نمونہ)
راستہ_پیداوار_مرکسم = خود._راستہ_نتیجہ(چوڑائی, طول, بلندی, سال=سال_مارکسم, خاکے=خاکے, نمونے=سانچے_نمونہ)
راستہ_اسلی = خود._راستہ_نتیجہ(چوڑائی, طول, بلندی, سال=سال, خاکے=خاکے, نمونے=خود.نمونے)
if خود._راستہ_بھری_ہیے(راستہ_اسلی):
return
متاغیرات = dict(
مسل_مرکسم=خود.مسل_مرکسم,
راستہ_١=خود.راستہ_کوائف_مرکسم,
راستہ_٢=راستہ_بنیاد,
سانچے=سانچے_نمونہ,
خاکے=خاکے,
سال=سال_مارکسم,
تکرار=10,
بھیج=1313
)
حکم = [str(م) for م in متاغیرات.values()]
if not os.path.isfile(حکم[0]) and ' ' in حکم[0]:
حکم = حکم[0].split(' ', maxsplit=1) + حکم[1:]
چلاو(حکم)
os.rename(راستہ_پیداوار_مرکسم, راستہ_اسلی)
_اختیارہ_مسل_مرکسم۵ = 'مسل مرکسم'
def راستہ_مرکسم_بتانا(راستہ):
if not os.path.isfile(راستہ):
raise FileNotFoundError(راستہ)
اختیارہ_رکھنا(_اختیارہ_مسل_مرکسم۵, راستہ)
def راستہ_مرکسم_پانا():
راستہ = اختیارہ_پانا(_اختیارہ_مسل_مرکسم۵)
if راستہ is not None and os.path.isfile(راستہ):
return راستہ
def _مسل_پانا(راستہ):
if os.path.isdir(راستہ):
مسلیں = [م for م in os.listdir(راستہ) if WTHFile.matches_file(م)]
تعداد_مسل = len(مسلیں)
if تعداد_مسل:
return os.path.join(راستہ, np.random.choice(مسلیں))
class راستے_نتائج_مرکسم(object):
def __init__(خود):
خود.راستے = set()
def راستے_پانا(خود, چوڑائی, طول, بلندی):
try:
راستہ = next(را for را in خود.راستے if را.چوڑائی == چوڑائی and را.طول == طول and را.بلندی == بلندی)
except StopIteration:
راستہ = راستہ_نتائج_مرکسم(چوڑائی, طول, بلندی)
خود.راستے.add(راستہ)
return راستہ.راستہ
class راستہ_نتائج_مرکسم(object):
def __init__(خود, چوڑائی, طول, بلندی):
خود.چوڑائی = چوڑائی
خود.طول = طول
خود.بلندی = بلندی
خود.راستہ = tempfile.mkdtemp()