Skip to content

Commit

Permalink
changed python list for numpy array
Browse files Browse the repository at this point in the history
deleted useless code
renamed some function
fixed ci
  • Loading branch information
ChouaneLouis committed May 15, 2024
1 parent da49e83 commit 7357074
Show file tree
Hide file tree
Showing 11 changed files with 341 additions and 266 deletions.
27 changes: 27 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
repos:
- repo: local
hooks:
- id: mypy
name: Run mypy
entry: mypy
language: system
files: ^src/
types: [python]

- repo: local
hooks:
- id: black
name: Run black
entry: black
args: ["--config", "pyproject.toml"]
language: system
types: [python]

- repo: local
hooks:
- id: isort
name: Run isort
entry: isort
args: ["--profile", "black", "--filter-files"]
language: system
types: [python]
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
numpy==1.24.4
39 changes: 18 additions & 21 deletions src/cluster_import.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,24 @@
import csv
import numpy as np
from pathlib import Path

from ts_generator import ThermalCluster, ProbilityLaw

def from_csv(path: Path, days_per_year: int = 365):
def import_thermal_cluster(path: Path, days_per_year: int = 365):
law_dict = {"UNIFORM":ProbilityLaw.UNIFORM, "GEOMETRIC":ProbilityLaw.GEOMETRIC}
with open(path, "r") as csvfile:
reader = list(csv.reader(csvfile, delimiter=',', quotechar='"'))
cluster = ThermalCluster(
unit_count = int(reader[1][1]),
nominal_power = float(reader[2][1]),
modulation = [float(i) for i in reader[3][1:24 + 1]],

fo_law = law_dict[reader[4][1]],
fo_volatility = float(reader[5][1]),
po_law = law_dict[reader[6][1]],
po_volatility = float(reader[7][1]),
array = np.genfromtxt(path, delimiter=',', dtype=str)
return ThermalCluster(
unit_count = int(array[1][1]),
nominal_power = float(array[2][1]),
modulation = [float(i) for i in array[3][1:24 + 1]],
fo_law = law_dict[array[4][1]],
fo_volatility = float(array[5][1]),
po_law = law_dict[array[6][1]],
po_volatility = float(array[7][1]),

fo_duration = [float(i) for i in reader[8][1:days_per_year + 1]],
fo_rate = [float(i) for i in reader[9][1:days_per_year + 1]],
po_duration = [float(i) for i in reader[10][1:days_per_year + 1]],
po_rate = [float(i) for i in reader[11][1:days_per_year + 1]],
npo_min = [float(i) for i in reader[12][1:days_per_year + 1]],
npo_max = [float(i) for i in reader[13][1:days_per_year + 1]],
)
return cluster
fo_duration = array[8][1:days_per_year + 1].astype(float),
fo_rate = array[9][1:days_per_year + 1].astype(float),
po_duration = array[10][1:days_per_year + 1].astype(float),
po_rate = array[11][1:days_per_year + 1].astype(float),
npo_min = array[12][1:days_per_year + 1].astype(float),
npo_max = array[13][1:days_per_year + 1].astype(float),
)
67 changes: 19 additions & 48 deletions src/ts_generator.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import numpy as np
from dataclasses import dataclass
from enum import Enum
from math import sqrt, log
Expand Down Expand Up @@ -56,20 +57,20 @@ def __init__(self, days_per_year: int = 365) -> None:
self.LOGP = [0] * self.log_size

#pogramed and forced outage rate
self.lf = [0] * days_per_year
self.lp = [0] * days_per_year
self.lf = np.empty(days_per_year, dtype=float)
self.lp = np.empty(days_per_year, dtype=float)

## ???
self.ff = [0] * days_per_year #ff = lf / (1 - lf)
self.pp = [0] * days_per_year #pp = lp / (1 - lp)
self.ff = np.empty(days_per_year, dtype=float) #ff = lf / (1 - lf)
self.pp = np.empty(days_per_year, dtype=float) #pp = lp / (1 - lp)

#precalculated value to speed up generation of random outage duration
self.af = [0] * days_per_year
self.bf = [0] * days_per_year
self.ap = [0] * days_per_year
self.bp = [0] * days_per_year
self.af = np.empty(days_per_year, dtype=float)
self.bf = np.empty(days_per_year, dtype=float)
self.ap = np.empty(days_per_year, dtype=float)
self.bp = np.empty(days_per_year, dtype=float)

def prepare_indispo_form_law(self, law: ProbilityLaw, volatility: float, A: List[float], B: List[float], expecs: List[int]) -> None:
def prepare_outage_duration_constant(self, law: ProbilityLaw, volatility: float, A: List[float], B: List[float], expecs: List[int]) -> None:
"""
precalculation of constant values use in generation of outage duration
results are stored in A and B
Expand Down Expand Up @@ -126,11 +127,16 @@ def generate_time_series(self, cluster: ThermalCluster, number_of_timeseries: in
POD = cluster.po_duration[day]
self.lp[day] = POR / (POR + POD * (1 - POR))

if self.lf[day] < 0:
raise ValueError(f"forced failure rate is negative on day {day}")
if self.lp[day] < 0:
raise ValueError(f"programed failure rate is negative on day {day}")

## i dont understand what these calulations are for
## consequently reduce the lower failure rate
if (0 < self.lf[day] and self.lf[day] < self.lp[day]):
if (self.lf[day] < self.lp[day]):
self.lf[day] *= (1 - self.lp[day]) / (1 - self.lf[day])
if (0 < self.lp[day] and self.lp[day] < self.lf[day]):
if (self.lp[day] < self.lf[day]):
self.lp[day] *= (1 - self.lf[day]) / (1 - self.lp[day])

a = 0
Expand All @@ -150,8 +156,8 @@ def generate_time_series(self, cluster: ThermalCluster, number_of_timeseries: in
self.PPOW[-1].append(pow(b, k))


self.prepare_indispo_form_law(cluster.fo_law, cluster.fo_volatility, self.af, self.bf, cluster.fo_duration)
self.prepare_indispo_form_law(cluster.po_law, cluster.po_volatility, self.ap, self.bp, cluster.po_duration)
self.prepare_outage_duration_constant(cluster.fo_law, cluster.fo_volatility, self.af, self.bf, cluster.fo_duration)
self.prepare_outage_duration_constant(cluster.po_law, cluster.po_volatility, self.ap, self.bp, cluster.po_duration)

# --- calculation ---
# the two first generated time series will be dropped, necessary to make system stable and physically coherent
Expand Down Expand Up @@ -185,48 +191,13 @@ def generate_time_series(self, cluster: ThermalCluster, number_of_timeseries: in
if cur_nb_AU > 100: ## it was like that in c++, i'm not shure why
#maybe it's for the pow (FPOW, PPOW) calculation, if so it might not be the right place to do
raise ValueError("avalaible unit number out of bound (> 100)")
if self.lf[day] < 0:
raise ValueError(f"forced failure rate is negative on day {day}")
if self.lp[day] < 0:
raise ValueError(f"programed failure rate is negative on day {day}")

# = return of units wich were in outage =
cur_nb_PO -= self.LOGP[now]
self.LOGP[now] = 0 #set to 0 because this cell will be use again later (in self.log_size days)
cur_nb_AU += self.LOG[now]
self.LOG[now] = 0

# = checking if max PO is respected, else correct it =
### !! obsolete, useless !! *TO VERIFY
if cur_nb_PO > cluster.npo_max[day]:
#to get PO under PO max we need to push back some extinciton

#the number of extinction to push back
return_aim = cur_nb_PO - cluster.npo_max[day]
#the number of extinction pushed back
return_count = 0

for i in range(self.log_size):
if return_count == return_aim:
break
#the number of units starting in i days
starting = self.LOGP[(now + i) % self.log_size]
if starting >= return_aim - return_count:
#there are enough units to take
return_count = return_aim
self.LOG[(now + i) % self.log_size] -= return_aim - return_count
self.LOGP[(now + i) % self.log_size] -= return_aim - return_count
elif starting > 0:
#there are units but not enought for the objective
return_count += self.LOGP[(now + i) % self.log_size]
self.LOG[(now + i) % self.log_size] -= self.LOGP[(now + i) % self.log_size]
self.LOGP[(now + i) % self.log_size] = 0

assert return_count == return_aim
#PO come back to max PO
cur_nb_PO = cluster.npo_max[day]
cur_nb_AU += return_aim

# = determinating units that go on outage =
#FO and PO canditate
FOC = 0
Expand Down
12 changes: 1 addition & 11 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,10 @@
import pytest
from pathlib import Path

from cluster_import import from_csv

@pytest.fixture
def data_directory() -> Path:
return Path(__file__).parent / "data"

@pytest.fixture
def output_directory() -> Path:
return Path(__file__).parent / "output"

@pytest.fixture
def cluster_1(data_directory) -> Path:
return from_csv(data_directory / "cluster_1.csv")

@pytest.fixture
def cluster_100(data_directory) -> Path:
return from_csv(data_directory / "cluster_100.csv")
return Path(__file__).parent / "output"
14 changes: 14 additions & 0 deletions tests/data/cluster_high_por.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
CLUSTER 1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
unit count,100,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
nominal power,5000,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
day modulation [24],1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
fo law,UNIFORM,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
fo volatility,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
po law,UNIFORM,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
po volatility,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
fo duration [255],8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
fo rate [255],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
po duration [255],2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
po rate [255],0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3
po min [255],2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
po max [255],5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
Loading

0 comments on commit 7357074

Please sign in to comment.