#!/usr/bin/env python # coding: utf-8 # # pyhasse.core # ### Objectives # # pyhasse.core is the basic module for calculations within # partially ordered sets. # Beside others: It imports the dataset, which is to be analyzed. # In[1]: import os import pathlib from pyhasse.core.csv_io import CSVReader from pyhasse.core.matrix import Matrix # In[2]: #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 # ### Check if all data are correct imported # ### Objects # In[3]: print(csv.obj) # ### Attributes # In[4]: print(csv.prop) # ### All data # In[5]: for row in csv.data: print(row) # ## Basic calculations # ### Equivalence classes # In[6]: # prepare dataset matrix = Matrix(csv.data, csv.obj, csv.prop, reduced=True) # #### The next step delivers the equivalence classes in terms of the object's pointers and their labels, additionally the characteristic of the structure induced by equivalences: K # 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 # In[7]: k = 0 for i in csv.eqm: k += (len(i))*(len(i)-1) print(f"K = {k} <-- sum Ni*(Ni-1)") # In[8]: #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}') # In[9]: 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) # In[10]: print(csv.eqm) # ### Zeta-Matrix # In[11]: for row in zeta: print(row) # In[ ]: