iam-git / WellMet (public) (License: MIT) (since 2021-08-31) (hash sha1)
WellMet is pure Python framework for spatial structural reliability analysis. Or, more specifically, for "failure probability estimation and detection of failure surfaces by adaptive sequential decomposition of the design domain".

/reader.py (fc18a41a14682b505a10a2947cfd6fdbea4c59cd) (6251 bytes) (mode 100644) (type blob)


import csv
import numpy as np
from .samplebox import SampleBox
from .f_models import Ingot



class Reader:
    """
    stateful object to keep consistency of using append()
    First rule of writing API - write example of use
    # musel tedy tady bejt...
    
    zkusím takovehle delegování
    
    # reader bude pokažde otevirat/zavirat soubor, což není úplně ideální,
    # ale zás,
    # předpokladá se, že každej vzorek musí být schvalen vědeckou radou
    # csv umožňuje dozápis
    """
    
    # piece of black magic
    def __new__(cls, filename, f_model=None):
        """
        Здесь отталкиваемся от файла
        """
        sb = super().__new__(cls)
        sb.filename = filename
        try: # sample box nemá vůbec smysl schovavat
            sb.sample_box = reader(filename, f_model)
            sb.append_allowed = True
        except FileNotFoundError:
            # Штош...
            sb.append_allowed = False
            if f_model is not None:
                sb.sample_box = SampleBox(f_model)
            print("Reader:", filename + '.csv', "ӧвӧл")
        return sb
            
    @classmethod
    def FromSampleBox(cls, filename, sample_box):
        """
        Здесь отталкиваемся от сэмплбоксу
        """
        sb = super().__new__(cls)
        # nepotrebujeme žádné rozdělení, nic
        sb.sample_box = sample_box
        sb.filename = filename
        sb.append_allowed = False
        return sb
            
    def __len__(self):
        return self.sample_box.nsim
            
    def __getitem__(sb, slice):
        # stačí vratit sample_box
        return sb.sample_box[slice]
    
    def __getattr__(sb, attr):
        # По всем (почти) вопросам обращайтесь 
        # на нашу горячую линию 
        if attr == 'sample_box':
            return None
        else:
            return getattr(sb.sample_box, attr)        
            
#    def read(self):
#        return self.__sbox        
        
    def force_read(self):
        try:
            self.sample_box = reader(self.filename, self.sample_box.sampled_plan)
            self.append_allowed = True
            return self.sample_box
        except AttributeError:
            self.sample_box = reader(self.filename)
            self.append_allowed = True
            return self.sample_box
        except FileNotFoundError:
            # Штош...
            print("Reader:", self.filename + '.csv', "opravdu ӧвӧл")
            
    def write(self):
        export(self.filename, self.sample_box)
        self.append_allowed = True
    
    # что бы эта бурда могла делать?
#    def force_write(self):
#        self.__sbox = sample_box
#        export(self.__filename, sample_box)
        
    def add_sample(self, sample_box):
        if self.append_allowed and (self.sample_box.gm_signature == sample_box.gm_signature):
            self.sample_box.add_sample(sample_box)
            append(self.filename, sample_box)
        elif 'sample_box' in dir(self):
            self.sample_box.add_sample(sample_box)
            if self.sample_box.nsim > 0:
                export(self.filename, self.sample_box)
                self.append_allowed = True
        else:
            self.sample_box = sample_box
            if self.sample_box.nsim > 0:
                export(self.filename, self.sample_box)
                self.append_allowed = True
                
      
      # průbežný export
#        if bx.filename:
#            if gm_signature == input_sample.gm_signature:
#                reader.append(bx.filename + '.csv', input_sample)
#            else:
#                bx.export(bx.filename)
      
        
            

#
# import simulations
#
def reader(filename, f_model=None):
    rows = []
    with open(filename + '.csv', 'r', newline='') as f:
        reader = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC)
        for row in reader:
            rows.append(row)
            
    # předpokladam, že na prvních dvou řadcích jsou gm_signature a popísek
    data = np.atleast_2d(rows[2:])
    
    if f_model is None:
        # veškeré datové řadky, sloupy -  od (včetně) do (nezahrnuje)
        return SampleBox(Ingot(data[:,:-2]), data[:,-2:-1].flatten(), rows[0][0])
    else:
        sample = f_model()
        sample.add_sample(data[:,:-2])
        return SampleBox(sample, data[:,-2:-1].flatten(), rows[0][0])



def append(filename, sample_box):
    """
    Святые угодники, объясните мне кто-нибудь, почему я здесь не использ..овал
    context manager?
    """
    if sample_box.nsim == 0:
        return False
        
    with open(filename + '.csv', 'a', newline='') as csvfile:
        csv_writer = csv.writer(csvfile, quoting=csv.QUOTE_NONNUMERIC)
        
        # bacha! není tu žádná kontrola, co se kam zapisuje!
        for i in range(sample_box.nsim):
            row = [sample_box.R[i, j] for j in range(sample_box.nvar)]
            row.append(sample_box.g_values[i])
            row.append(int(sample_box.failsi[i]))
            csv_writer.writerow(row)
        #csvfile.close()

def Export(filename, sample_box):
    """
    vratíme nový Reader objekt
    """
    export(filename, sample_box)
    return Reader.FromSampleBox(filename, sample_box)

def export(filename, sample_box):
    if sample_box.nsim == 0:
        return False
        
    with open(filename + '.csv', 'w', newline='') as csvfile:
        csv_writer = csv.writer(csvfile, quoting=csv.QUOTE_NONNUMERIC)
        
        # gm_signature
        csv_writer.writerow([sample_box.gm_signature])
        
        # popísky 
        row = ['var ' + str(j+1) for j in range(sample_box.nvar)]
        row.append('value')
        row.append('failure')
        csv_writer.writerow(row)        
        
        for i in range(sample_box.nsim):
            row = [sample_box.R[i, j] for j in range(sample_box.nvar)]
            row.append(sample_box.g_values[i])
            row.append(int(sample_box.failsi[i]))
            csv_writer.writerow(row)
        # csvfile.close()
    
    


Mode Type Size Ref File
100644 blob 10887 b53080c965974cd446104f9cf6d8c7bd84fe8416 IS_stat.py
100644 blob 6 0916b75b752887809bac2330f3de246c42c245cd __init__.py
100644 blob 26851 b0ccb9c800e0fd7ecb869b0e052b387f77868382 blackbox.py
100644 blob 7266 441664a465885f76786e9a259015983579217d09 candybox.py
100644 blob 13438 5a97b98b5b5182b075e684ae473a992458f9e574 f_models.py
100644 blob 27159 eb3a87892b1d197f21d78f519ef93d86ca86c4ed g_models.py
100644 blob 2718 5d721d117448dbb96c554ea8f0e4651ffe9ac457 gp_plot.py
100644 blob 10489 1f6dd06a036fdc4ba6a7e6d61ac0b84e8ad3a4c1 mplot.py
100644 blob 896 14e91bd579c101f1c85bc892af0ab1a196a165a0 plot.py
100644 blob 2807 1feb1d43e90e027f35bbd0a6730ab18501cef63a plotly_plot.py
100644 blob 10629 4a1e8fb719565c434fb5835fc2c0620171a8d6f2 qt_plot.py
100644 blob 6251 fc18a41a14682b505a10a2947cfd6fdbea4c59cd reader.py
100644 blob 4228 278bfa08534fcbdf58652edf636fb700395a5f1d samplebox.py
100644 blob 5553 bac994ae58f1df80c7f8b3f33955af5402f5a4f3 sball.py
100644 blob 21563 c9f8f898feec1fbcb76061bb3df981ce6e455049 whitebox.py
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/iam-git/WellMet

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/iam-git/WellMet

Clone this repository using git:
git clone git://git.rocketgit.com/user/iam-git/WellMet

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main