نئے ذرائع

اگر آپکو ايسی وضع کے کوائف استعمال کرنے ہیں جو ابھی تک تقدیر میں دستیاب نہیں ہیں، تو آپ اسکے لئے ایک نئے ذریعہ کی قسم بنا سکتے ہیں۔

تقدیر میں دو قسم کے ‍‌ذرائع ہیں، اعم ذرائع (ذریعہ) اور نکتہ کے ذرائع (ذریعہ_نکتہ

نکتہ کے ذرائع وہ ‌ذرائع ہیں جنکو بناتے پر ھی پتا ھو جاتا ہیے کے انکے کوائف نکشہ پر کس نکتے سے ایں گے۔ نکتہ کے ذرائے کا ایک نمونہ ہیے دیسات کے مسل کا ذریع، کیوں کے مسل میں ایک ہی جگہ کے کوائف رہتے ہیں۔ اعم ذرائع میں مختلف جگے کے کوائف دستیاب ہیں، جیسے کے مرکسم کا ذریع، جسے پوری دنیا کے کوائف ملی جا سکتے ہیں۔

نئی قسم کے ليے، اعم ذریع ہو یا نکتہ کا بھی، آپکو ایک نيا فعل لکھنا پڑے گا: _کوائف_بنانا()۔

اعم ذرائع

نمونے کے طور پر ناسا نام کے ذریعے کا _کوائف_بنانا() نام کا فعل نیچے دیا گيا ہے۔

class ناسا(ذریعہ):
    """
    یہ ذریعہ ناسا کے `صفحہ <https://power.larc.nasa.gov/cgi-bin/v1/DataAccess.py>`_ سے آوہوا مشاہدات کے کوائف پاتا ہیے۔
    """
    متغیرات = ['بارش', 'شمسی_تابکاری', 'درجہ_حرارت_زیادہ', 'درجہ_حرارت_کم', 'درجہ_حرارت_اوسط']

    def _کوائف_بنانا(خود, سے, تک, عرض, طول, بلندی, خاکے):
        try:
            ذریعہ_ناسا = NASAPowerWeatherDataProvider(latitude=عرض, longitude=طول, force_update=False)
        except (requests.exceptions.ConnectionError, KeyError, JSONDecodeError):
            return

        سے = max(ذریعہ_ناسا.first_date, سے)
        تک = min(ذریعہ_ناسا.last_date, تک)

        اعداد_پاندس = pd.DataFrame(columns=list(متغیرات), index=pd.period_range(سے, تک), dtype=float)

        ستون = {
            'بارش': 'RAIN',
            'شمسی_تابکاری': 'IRRAD',
            'درجہ_حرارت_زیادہ': 'TMAX',
            'درجہ_حرارت_کم': 'TMIN',
            'درجہ_حرارت_اوسط': 'TEMP'
        }

        for تاریخ in اعداد_پاندس.index:
            try:
                ناسا_دن = ذریعہ_ناسا(تاریخ.start_time)
            except WeatherDataProviderError:
                continue
            for س, س_ناسا in ستون.items():
                اعداد_پاندس.loc[تاریخ, س] = getattr(ناسا_دن, س_ناسا)

        اعداد_پاندس.شمسی_تابکاری *= 1e-6

        return اعداد_پاندس

نکتہ کا ذرائع

نکتہ کا ذرائع کو بناتے پر ھی بتانے پڑھتا ہیے کے کہاں کا ہیے اور کس خاکے سے۔ اسی لیے آپکا _کوائف_بنانا() نام کا فعل میں تاریخ، عرض، طول، بلندی، یا خاکے کے بارے میں فکر کرنے کی ظرورت نہیں، ‎‎سرف دستیاب کوائف پاندس میں واپس دینا۔ تقدیر آپکے لیے تاریخ، جگہ اور خاکے کا جانچ کریگا۔

نمونے کے طور پر جےسن نام کے ذریعے کا _کوائف_بنانا() نام کا فعل نیچے دیا گيا ہے۔

class جےسن(ذریعہ_نکتہ):
    """
    جےسن (``.json``) مسل سے کوائف پڑھتا ہیے۔
    """

    def __init__(خود, مسل, عرض, طول, بلندی=None, خاکے=None, تبديل_عمودی_ستون=None):
        super().__init__(عرض, طول, بلندی, خاکے, تبديل_عمودی_ستون)

        if isinstance(مسل, str):
            ضابطہ = _ضابطہ_بندی(مسل)
            with open(مسل, 'r', encoding=ضابطہ) as م:
                خود.جےسن = json.load(م)
        else:
            خود.جےسن = مسل

    @property
    def متغیرات(خود):
        return [ب for ب in [خود._نام_عمودی_ستون(س) for س in خود.جےسن] if ب != 'تاریخ']

    def _کوائف_بنانا(خود, سے, تک, عرض, طول, بلندی, خاکے):

        کو = {خود._نام_عمودی_ستون(س): قیمت for س, قیمت in خود.جےسن.items()}
        اعداد_جےسن = pd.DataFrame(
            data={م: ق for م, ق in کو.items() if م != 'تاریخ'},
            index=خود._اشاریہ_پانڈا_بنانا(کو['تاریخ'])
        )
        return اعداد_جےسن