pyhasse.core is the basic module for calculations within
partially ordered sets.
Beside others: It imports the dataset, which is to be analyzed.
import os
import pathlib
from pyhasse.core.csv_io import CSVReader
from pyhasse.core.matrix import Matrix
#TESTFILENAME = '/csvdata/zeta-test.csv'
#TESTFILENAME = '/csvdata/acm-houses.csv'
#TESTFILENAME = '/csvdata/chain-demo.csv'
#TESTFILENAME = '/csvdata/chain-pollution.csv'
#TESTFILENAME = '/csvdata/copeland_demo.csv'
#TESTFILENAME = '/csvdata/fuzzy-demo.csv'
#TESTFILENAME = '/csvdata/main19chemicals.csv'
#TESTFILENAME = '/csvdata/pesticides-demo.txt'
#TESTFILENAME = '/csvdata/spyout-demo.csv'
#TESTFILENAME = '/csvdata/zeta-test.csv'
TESTFILENAME = '/csvdata/check-K.csv'
HERE = pathlib.Path('__file__').parent
csv = CSVReader(fn=str(HERE) + TESTFILENAME, ndec=3)
# calc a reduced system
print(csv.obj)
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
print(csv.prop)
['q1', 'q2']
for row in csv.data:
print(row)
[1.0, 2.0] [3.0, 4.0] [4.0, 3.0] [3.0, 4.0] [1.0, 2.0] [5.0, 6.0] [6.0, 5.0] [1.0, 2.0] [6.0, 5.0]
# prepare dataset
matrix = Matrix(csv.data, csv.obj, csv.prop, reduced=True)
K = sum Ni*(Ni-1)
K = 0: There is no nontrivial equivalence class
K > 0: Check the list below to detect the nontirivial equivalence classes
k = 0
for i in csv.eqm:
k += (len(i))*(len(i)-1)
print(f"K = {k} <-- sum Ni*(Ni-1)")
K = 0 <-- sum Ni*(Ni-1)
#eqm = csv.generate_eqcl(csv.obj,csv.eqm)
eqm, rred = matrix.generate_equivalenceclasses(csv.data, csv.rows, csv.cols, prec=None)
print(f'{"Pointer":>8} {"object label represents":^30} {"equivalence class":^20}')
print(f'{59 * "-"}')
for idx, value in enumerate(matrix.obj):
print(f'{csv.obj.index(value):>8} {value:^30} {str(eqm[idx]):^20}')
Pointer object label represents equivalence class ----------------------------------------------------------- 0 a [0, 4, 7] 1 b [1, 3] 2 c [2] 5 f [5] 6 g [6, 8]
from pyhasse.core.order import Order
precision = 4
order = Order(csv.data,
csv.rows,
csv.cols)
zeta =order.calc_relatmatrix(csv.data, csv.rows, csv.cols)
zeta = order.calc_relatmatrix(
datamatrix=matrix.data,
rows=matrix.rows,
cols=matrix.cols,
prec=precision)
covd_act, cov_act = order.calc_cov(zeta, matrix.rows)
print(csv.eqm)
[]
for row in zeta:
print(row)
[1, 0, 0, 0, 0] [1, 1, 0, 0, 0] [1, 0, 1, 0, 0] [1, 1, 1, 1, 0] [1, 1, 1, 0, 1]