# Modeling ODE with only absorted solar radiation to predict the change in temperature for 200 years from 1850 and visualizing the model


```python
#from sympy import solve
import matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import solve_ivp

S = 1368
α = 0.3
absorbed_solar_radiation = S*(1 - α)/4
temp0 = 14
C = 51.0

F = lambda t, s: (1/C) * absorbed_solar_radiation
t_span = [0, 210]
s0 = [temp0]
t_eval = np.arange(0, 210, 50)
sol = solve_ivp(F, t_span, s0, t_eval=t_eval)
sol
```




      message: 'The solver successfully reached the end of the integration interval.'
         nfev: 32
         njev: 0
          nlu: 0
          sol: None
       status: 0
      success: True
            t: array([  0,  50, 100, 150, 200])
     t_events: None
            y: array([[ 14.        , 248.70588235, 483.41176471, 718.11764706,
            952.82352941]])
     y_events: None




```python
plt.figure(figsize=(12, 4))
plt.subplot(121)
plt.plot(sol.t, sol.y[0])
plt.title('Absorbing Solar Radiation (only)')
plt.xlabel('Years from 1850')
plt.ylabel('Temperature °C')
plt.show()
```

# Extending the model with thermal radiation and visualizing it


```python
B = 1.3
start_temp = 14 #0->28, default: 14
F1 = lambda t, s: (1/C) * B * (temp0-s)
t_span = [0, 210]
s0 = [start_temp]
t_eval = np.arange(0, 210, 50)
sol = solve_ivp(F1, t_span, s0, t_eval=t_eval)
sol
```




      message: 'The solver successfully reached the end of the integration interval.'
         nfev: 62
         njev: 0
          nlu: 0
          sol: None
       status: 0
      success: True
            t: array([  0,  50, 100, 150, 200])
     t_events: None
            y: array([[14., 14., 14., 14., 14.]])
     y_events: None




```python
plt.figure(figsize=(12, 4))
plt.subplot(121)
plt.plot(sol.t, sol.y[0])
plt.title('Energy Balance Model (Healthy Earth)')
plt.xlabel('Years from start')
plt.ylabel('Temperature °C')
plt.ylim(0, 30)
plt.show()
```

# Extending the model with Greenhouse Effects and visualizing it


```python
def calc_greenhouse_effect(CO2):
  return forcing_coef*np.log(CO2/CO2_PreIndust)

forcing_coef = 5.0
CO2_PreIndust = 280.0
calc_greenhouse_effect(CO2_PreIndust * (1 + np.power((15/220), 3)))
```




    0.0015845535506302491




```python
F2 = lambda t, s: (1/C) * (B * (temp0-s) + calc_greenhouse_effect(CO2_PreIndust * (1 + np.power((t/220), 3))))
sol = solve_ivp(F2, [0, 210], [start_temp], t_eval=np.arange(0, 210, 50))
sol
```




      message: 'The solver successfully reached the end of the integration interval.'
         nfev: 74
         njev: 0
          nlu: 0
          sol: None
       status: 0
      success: True
            t: array([  0,  50, 100, 150, 200])
     t_events: None
            y: array([[14.        , 14.00769389, 14.14788232, 14.57018498, 15.3856948 ]])
     y_events: None




```python
plt.figure(figsize=(12, 4))
plt.subplot(121)
plt.plot(sol.t, sol.y[0])
plt.title('Model with CO₂')
plt.xlabel('Years from 1850')
plt.ylabel('Temperature °C')
plt.ylim(10, 20)
plt.show()
```


```python
tmp_CO2 = []
for i in range(1850, 2021):
  t_year = i - 1850
  CO2_from_1850 = CO2_PreIndust * (1 + np.power((t_year/220), 3))
  tmp_CO2.append(CO2_from_1850)
tmp_CO2
```


```python
plt.figure(figsize=(12, 4))
plt.subplot(121)
plt.plot(range(1850, 2021), tmp_CO2)
plt.show()
```

# Compare with NASA


```python
import pandas as pd

url ='https://data.giss.nasa.gov/gistemp/graphs/graph_data/Global_Mean_Estimates_based_on_Land_and_Ocean_Data/graph.txt'
df = pd.read_csv(url, skiprows=3, sep='\s+').drop(0)
df
```





  <div id="df-420212da-e6ee-4a2f-b03e-1dd1fc9be7fa">
    <div class="colab-df-container">
      <div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>Year</th>
      <th>No_Smoothing</th>
      <th>Lowess(5)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>1</th>
      <td>1880</td>
      <td>-0.15</td>
      <td>-0.08</td>
    </tr>
    <tr>
      <th>2</th>
      <td>1881</td>
      <td>-0.07</td>
      <td>-0.12</td>
    </tr>
    <tr>
      <th>3</th>
      <td>1882</td>
      <td>-0.10</td>
      <td>-0.15</td>
    </tr>
    <tr>
      <th>4</th>
      <td>1883</td>
      <td>-0.17</td>
      <td>-0.19</td>
    </tr>
    <tr>
      <th>5</th>
      <td>1884</td>
      <td>-0.27</td>
      <td>-0.23</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>137</th>
      <td>2016</td>
      <td>1.02</td>
      <td>0.88</td>
    </tr>
    <tr>
      <th>138</th>
      <td>2017</td>
      <td>0.92</td>
      <td>0.91</td>
    </tr>
    <tr>
      <th>139</th>
      <td>2018</td>
      <td>0.85</td>
      <td>0.95</td>
    </tr>
    <tr>
      <th>140</th>
      <td>2019</td>
      <td>0.98</td>
      <td>0.98</td>
    </tr>
    <tr>
      <th>141</th>
      <td>2020</td>
      <td>1.02</td>
      <td>1.01</td>
    </tr>
  </tbody>
</table>
<p>141 rows × 3 columns</p>
</div>
      <button class="colab-df-convert" onclick="convertToInteractive('df-420212da-e6ee-4a2f-b03e-1dd1fc9be7fa')"
              title="Convert this dataframe to an interactive table."
              style="display:none;">

  <svg xmlns="http://www.w3.org/2000/svg" height="24px"viewBox="0 0 24 24"
       width="24px">
    <path d="M0 0h24v24H0V0z" fill="none"/>
    <path d="M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z"/><path d="M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z"/>
  </svg>
      </button>

  <style>
    .colab-df-container {
      display:flex;
      flex-wrap:wrap;
      gap: 12px;
    }

    .colab-df-convert {
      background-color: #E8F0FE;
      border: none;
      border-radius: 50%;
      cursor: pointer;
      display: none;
      fill: #1967D2;
      height: 32px;
      padding: 0 0 0 0;
      width: 32px;
    }

    .colab-df-convert:hover {
      background-color: #E2EBFA;
      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);
      fill: #174EA6;
    }

    [theme=dark] .colab-df-convert {
      background-color: #3B4455;
      fill: #D2E3FC;
    }

    [theme=dark] .colab-df-convert:hover {
      background-color: #434B5C;
      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);
      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));
      fill: #FFFFFF;
    }
  </style>

      
    </div>
  </div>





```python
df['Year'] = df['Year'].astype('float64')
df['No_Smoothing'] = df['No_Smoothing'] + 14.15
df
```





  <div id="df-90886347-c33d-4a6e-b9b4-5347137d8bb4">
    <div class="colab-df-container">
      <div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>Year</th>
      <th>No_Smoothing</th>
      <th>Lowess(5)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>1</th>
      <td>1880.0</td>
      <td>14.00</td>
      <td>-0.08</td>
    </tr>
    <tr>
      <th>2</th>
      <td>1881.0</td>
      <td>14.08</td>
      <td>-0.12</td>
    </tr>
    <tr>
      <th>3</th>
      <td>1882.0</td>
      <td>14.05</td>
      <td>-0.15</td>
    </tr>
    <tr>
      <th>4</th>
      <td>1883.0</td>
      <td>13.98</td>
      <td>-0.19</td>
    </tr>
    <tr>
      <th>5</th>
      <td>1884.0</td>
      <td>13.88</td>
      <td>-0.23</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>137</th>
      <td>2016.0</td>
      <td>15.17</td>
      <td>0.88</td>
    </tr>
    <tr>
      <th>138</th>
      <td>2017.0</td>
      <td>15.07</td>
      <td>0.91</td>
    </tr>
    <tr>
      <th>139</th>
      <td>2018.0</td>
      <td>15.00</td>
      <td>0.95</td>
    </tr>
    <tr>
      <th>140</th>
      <td>2019.0</td>
      <td>15.13</td>
      <td>0.98</td>
    </tr>
    <tr>
      <th>141</th>
      <td>2020.0</td>
      <td>15.17</td>
      <td>1.01</td>
    </tr>
  </tbody>
</table>
<p>141 rows × 3 columns</p>
</div>
      <button class="colab-df-convert" onclick="convertToInteractive('df-90886347-c33d-4a6e-b9b4-5347137d8bb4')"
              title="Convert this dataframe to an interactive table."
              style="display:none;">

  <svg xmlns="http://www.w3.org/2000/svg" height="24px"viewBox="0 0 24 24"
       width="24px">
    <path d="M0 0h24v24H0V0z" fill="none"/>
    <path d="M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z"/><path d="M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z"/>
  </svg>
      </button>

  <style>
    .colab-df-container {
      display:flex;
      flex-wrap:wrap;
      gap: 12px;
    }

    .colab-df-convert {
      background-color: #E8F0FE;
      border: none;
      border-radius: 50%;
      cursor: pointer;
      display: none;
      fill: #1967D2;
      height: 32px;
      padding: 0 0 0 0;
      width: 32px;
    }

    .colab-df-convert:hover {
      background-color: #E2EBFA;
      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);
      fill: #174EA6;
    }

    [theme=dark] .colab-df-convert {
      background-color: #3B4455;
      fill: #D2E3FC;
    }

    [theme=dark] .colab-df-convert:hover {
      background-color: #434B5C;
      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);
      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));
      fill: #FFFFFF;
    }
  </style>

      
    </div>
  </div>





```python
BB = 1.3 #[0.0, 4.0]
CC = 51.0 #[10.0, 200.0]
F3 = lambda t, s: (1/CC) * (BB * (temp0-s) + calc_greenhouse_effect(CO2_PreIndust * (1 + np.power((t/220), 3))))
solp4 = solve_ivp(F3, [0, 171], [start_temp], t_eval=np.arange(0, 171, 1))
solp4
```




      message: 'The solver successfully reached the end of the integration interval.'
         nfev: 62
         njev: 0
          nlu: 0
          sol: None
       status: 0
      success: True
            t: array([  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,
            13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,
            26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,
            39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,
            52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,
            65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,
            78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,
            91,  92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103,
           104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
           117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
           130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
           143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
           156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
           169, 170])
     t_events: None
            y: array([[14.        , 14.        , 14.00000003, 14.00000018, 14.00000057,
            14.0000014 , 14.00000289, 14.00000534, 14.00000907, 14.00001444,
            14.0000219 , 14.0000319 , 14.00003714, 14.00002733, 14.00000454,
            13.99997096, 13.99992878, 13.99988014, 13.99982717, 13.99977201,
            13.99971674, 13.99966346, 13.99961422, 13.99957108, 13.99953606,
            13.99951117, 13.9994984 , 13.99949974, 13.99951713, 13.99955252,
            13.99960782, 13.99968494, 13.99978576, 13.99991215, 14.00006596,
            14.00024901, 14.00046312, 14.00071009, 14.00099168, 14.00130967,
            14.00166578, 14.00206174, 14.00249926, 14.00298001, 14.00350568,
            14.0040779 , 14.00469832, 14.00536854, 14.00609016, 14.00686476,
            14.00769389, 14.00857911, 14.00952193, 14.01052387, 14.0115864 ,
            14.01271099, 14.01389911, 14.01515218, 14.01647162, 14.01785882,
            14.01931518, 14.02084203, 14.02244074, 14.02411263, 14.025859  ,
            14.02768115, 14.02958034, 14.03155782, 14.03361485, 14.03575262,
            14.03797235, 14.0402752 , 14.04266236, 14.04513495, 14.04769411,
            14.05034095, 14.05307655, 14.055902  , 14.05881835, 14.06182663,
            14.06492786, 14.06812304, 14.07141316, 14.07479919, 14.07828206,
            14.08186271, 14.08554205, 14.08932097, 14.09320035, 14.09718104,
            14.10126388, 14.1054497 , 14.10973929, 14.11413344, 14.11863292,
            14.12323847, 14.12795083, 14.13277071, 14.1376988 , 14.14273578,
            14.14788232, 14.15313904, 14.15850657, 14.16398551, 14.16957646,
            14.17527999, 14.18109663, 14.18702692, 14.19307138, 14.19923051,
            14.20550478, 14.21189465, 14.21840124, 14.22502766, 14.23177706,
            14.23865248, 14.24565686, 14.25279302, 14.26006368, 14.26747146,
            14.27501886, 14.28270829, 14.29054204, 14.2985223 , 14.30665115,
            14.31493057, 14.32336243, 14.33194849, 14.3406904 , 14.34958973,
            14.3586479 , 14.36786626, 14.37724604, 14.38678836, 14.39649424,
            14.40636459, 14.41640023, 14.42660183, 14.43697001, 14.44750524,
            14.4582079 , 14.46907827, 14.48011651, 14.49132268, 14.50269674,
            14.51423853, 14.52594779, 14.53782417, 14.54986718, 14.56207625,
            14.57445069, 14.58698971, 14.59969241, 14.6125578 , 14.62558475,
            14.63877205, 14.65211839, 14.66562232, 14.67928231, 14.69309672,
            14.70706379, 14.72118169, 14.73544843, 14.74986196, 14.76442009,
            14.77912055, 14.79396095, 14.80893879, 14.82405148, 14.8392963 ,
            14.85467045]])
     y_events: None




```python
plt.figure(figsize=(16, 4))
plt.subplot(121)
plt.plot(df['Year'].tolist(), df['No_Smoothing'].tolist(), label='NASA Observations')
plt.plot(range(1850, 2021), solp4.y[0], label='Predicted Temperature from model')
plt.xlabel('Years')
plt.ylabel('Temp °C')
plt.legend()
plt.show()
```

# Improving the model


```python
def calc_alpha(T, alpha_0=0.3, alpha_i=0.5, delta_T=10.0):
  if T < -delta_T:
    return alpha_i
  elif -delta_T <= T < delta_T:
    return alpha_i + (alpha_0 - alpha_i) * (T + delta_T) / (2 * delta_T)
  elif T >= delta_T:
    return alpha_0

F_final = lambda t, s: ((1/85.0) * (BB * (temp0 - s) + \
                       calc_greenhouse_effect(CO2_PreIndust * (1 + np.power((t/220), 3))))) * ((1/85.0) * (S * (1 - calc_alpha(t))/4))
solp_final = solve_ivp(F_final, [0, 171], [start_temp], t_eval=np.arange(0, 171, 1))
solp_final
```




      message: 'The solver successfully reached the end of the integration interval.'
         nfev: 80
         njev: 0
          nlu: 0
          sol: None
       status: 0
      success: True
            t: array([  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,
            13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,
            26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,
            39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,
            52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,
            65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,
            78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,
            91,  92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103,
           104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
           117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
           130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
           143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
           156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
           169, 170])
     t_events: None
            y: array([[14.        , 14.        , 14.00000006, 14.00000029, 14.00000091,
            14.00000219, 14.00000452, 14.00000835, 14.00001423, 14.00002278,
            14.00003471, 14.00005083, 14.00005407, 14.00002087, 13.99995628,
            13.99986551, 13.99975369, 13.99962581, 13.99948676, 13.9993413 ,
            13.99919411, 13.99904971, 13.99891255, 13.99878694, 13.99867707,
            13.99858704, 13.99852083, 13.99848229, 13.99847517, 13.99850311,
            13.99856962, 13.99867811, 13.99883187, 13.99903408, 13.99928781,
            13.99959599, 13.99996148, 14.00038699, 14.00087513, 14.0014284 ,
            14.00204917, 14.00273972, 14.00350219, 14.00433863, 14.00525097,
            14.00624101, 14.00731045, 14.00846087, 14.00969376, 14.01101046,
            14.01241221, 14.01390015, 14.01547529, 14.01713853, 14.01889066,
            14.02073235, 14.02266417, 14.02468655, 14.02679982, 14.02900422,
            14.03129984, 14.03368667, 14.03616459, 14.03873336, 14.04139263,
            14.04414194, 14.04698071, 14.04990824, 14.05292372, 14.05602625,
            14.05921478, 14.06248816, 14.06584514, 14.06928434, 14.07280426,
            14.07640331, 14.08007977, 14.08383181, 14.08765748, 14.09155473,
            14.09552138, 14.09955514, 14.10365362, 14.1078143 , 14.11203455,
            14.11631164, 14.12064183, 14.12502717, 14.12947985, 14.13401192,
            14.13863493, 14.14335987, 14.1481972 , 14.15315684, 14.15824818,
            14.16348008, 14.16886084, 14.17439823, 14.18009951, 14.18597137,
            14.19201997, 14.19825095, 14.20466941, 14.21127988, 14.2180864 ,
            14.22509244, 14.23230096, 14.23971435, 14.24733449, 14.25516272,
            14.26319984, 14.2714461 , 14.27990123, 14.28856441, 14.29743431,
            14.30650903, 14.31578616, 14.32526272, 14.33493523, 14.34479966,
            14.35485143, 14.36508544, 14.37549605, 14.38607707, 14.39682179,
            14.40772295, 14.41877277, 14.42996292, 14.44128454, 14.45272822,
            14.46428403, 14.4759415 , 14.48768961, 14.49951682, 14.51141103,
            14.52335965, 14.53536231, 14.54750225, 14.55980046, 14.57226096,
            14.58488746, 14.59768334, 14.61065168, 14.62379525, 14.63711647,
            14.65061747, 14.66430006, 14.67816573, 14.69221564, 14.70645066,
            14.72087133, 14.73547786, 14.75027016, 14.76524782, 14.78041012,
            14.795756  , 14.8112841 , 14.82699275, 14.84287995, 14.85894338,
            14.87518043, 14.89158813, 14.90816323, 14.92490215, 14.94180099,
            14.95885554, 14.97606126, 14.99341332, 15.01090654, 15.02853544,
            15.04629424]])
     y_events: None




```python
plt.figure(figsize=(16, 4))
plt.subplot(121)
plt.plot(df['Year'].tolist(), df['No_Smoothing'].tolist(), label='NASA Observations')
plt.plot(range(1850, 2021), solp_final.y[0], label='Predicted Temperature from improved model')
plt.xlabel('Years')
plt.ylabel('Temp °C')
plt.legend()
plt.show()
```

de37499ecd69defe86b0e70114befbda101708c8
ipynb
Jupyter Notebook
Project/Weather_Prediction.ipynb
IceIce1ce/Data_Intelligence_HCMUS
a68f2864dcaeb4b84671a5a6e4904c8f08b9f03d
MIT
Project/Weather_Prediction.ipynb
IceIce1ce/Data_Intelligence_HCMUS
a68f2864dcaeb4b84671a5a6e4904c8f08b9f03d
MIT
Project/Weather_Prediction.ipynb
IceIce1ce/Data_Intelligence_HCMUS
a68f2864dcaeb4b84671a5a6e4904c8f08b9f03d
MIT
Qwen/Qwen-72B
1. YES
2. YES