Source code for تقدیر.ذرائع.مرکسم۵

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()