diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 22ac391b..1464f2a2 100755 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,7 +27,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8', '3.9', '3.10'] + python-version: ['3.8', '3.9', '3.10', '3.11', '3.12'] steps: diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 00000000..35981d26 --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,40 @@ +name: Update Coverage on Readme +on: + push: + +# https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs +# `contents` is for permission to the contents of the repository. +# `pull-requests` is for permission to pull request +permissions: + contents: write + checks: write + pull-requests: write + +jobs: + update-coverage-on-readme: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of your personal token + fetch-depth: 0 # otherwise, you will failed to push refs to dest repo + + - name: Pytest coverage comment + # if: ${{ github.ref == 'refs/heads/main' }} + id: coverageComment + uses: MishaKav/pytest-coverage-comment@main + with: + hide-comment: true + pytest-coverage-path: ./data/pytest-coverage_4.txt + + - name: Update Readme with Coverage Html + # if: ${{ github.ref == 'refs/heads/main' }} + run: | + sed -i '//,//c\\n\${{ steps.coverageComment.outputs.coverageHtml }}\n' ./README.md + + - name: Commit & Push changes to Readme + #if: ${{ github.ref == 'refs/heads/main' }} + uses: actions-js/push@master + with: + message: Update coverage on Readme + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6488912b..1d3bd431 100755 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -34,7 +34,7 @@ repos: rev: 6.0.0 hooks: - id: flake8 - args: [--count, --show-source, --statistics, '--ignore', 'E501,E203,W503'] + args: [--count, --show-source, --statistics, '--ignore', 'E501,E203,W503,E201,E202,E221,E222,E231,E241,E271,E272,E702,E713'] # additional_dependencies: [flake8-bugbear==21.3.1, pep8-naming] log_file: flake8.log diff --git a/README.md b/README.md index c5b0029f..5ea799fb 100755 --- a/README.md +++ b/README.md @@ -4,6 +4,9 @@ A pipeline for generating data representation in RDF out of raw data given in AS https://data2rdf.readthedocs.io/en/latest/ + + + # Installation ## Install for using the package diff --git a/data2rdf/__init__.py b/data2rdf/__init__.py index e69de29b..03e32b0f 100755 --- a/data2rdf/__init__.py +++ b/data2rdf/__init__.py @@ -0,0 +1,21 @@ +"""Data2RDF""" + +from .config import Config +from .models import ( + BasicConceptMapping, + ClassConceptMapping, + PropertyMapping, + QuantityMapping, +) +from .parsers import Parser +from .pipelines import AnnotationPipeline + +__all__ = [ + "AnnotationPipeline", + "Config", + "QuantityMapping", + "PropertyMapping", + "ClassConceptMapping", + "BasicConceptMapping", + "Parser", +] diff --git a/data2rdf/abox_template_generation.py b/data2rdf/abox_template_generation.py deleted file mode 100755 index 24854233..00000000 --- a/data2rdf/abox_template_generation.py +++ /dev/null @@ -1,206 +0,0 @@ -import logging -import os -from pathlib import Path - -from rdflib import Graph, Literal, URIRef -from rdflib.namespace import OWL, RDF, RDFS, SKOS - -from data2rdf.emmo_lib import chowlk_utils - - -def run_chowlk(inputfile, outputfile): - from chowlk.transformations import transform_ontology - from chowlk.utils import read_drawio_xml - - logging.info( - f"Launching chowlk for transforming the ontology: {inputfile}" - ) - - root = read_drawio_xml(inputfile) - ontology_turtle, ontology_xml, namespaces, errors = transform_ontology( - root - ) - - with open(outputfile, mode="w") as file: - file.write(ontology_turtle) - logging.info(f"Writing chowlk output to path: {outputfile}") - - if errors: - logging.info(f"Chowlk exited with the following errors: {errors}") - - -def convert_abox_namespace( - abox_template_graph_file_input, - abox_template_graph_file_output, - unique_uri="http://test.org#", - abox_method_tag="http://abox-namespace-placeholder.org/", -): - # simple replace the namespace, did not work so far using rdflib - with open(abox_template_graph_file_input) as input_file: - file_text = input_file.read() - new_file_text = file_text.replace(abox_method_tag, unique_uri) - - with open(abox_template_graph_file_output, "w") as output_file: - output_file.write(new_file_text) - - -def add_abox_individuals_to_ontology( - ontology_ttl_input, - ontology_ttl_output, - placeholder_namespace="http://abox-namespace-placeholder.org/", -): - """ - Most ontologies only contain classes. In order to have individuals that can be used in the ontopanel workflow - this function generates for each class an individual instance. It also adds the label of the class as label of the individual. - """ - - graph = Graph() - graph.parse(ontology_ttl_input, format="ttl") - - for s, _p, _o in graph.triples((None, None, OWL.Class)): - if "#" in str( - s - ): # works for uri/name and uri#name -> adapt if other cases exist - name = str(s).split("#")[-1] - else: - name = str(s).split("/")[-1] - - graph.add((URIRef(f"{placeholder_namespace}{name}"), RDF.type, s)) - - for _s2, _p2, o2 in graph.triples((s, SKOS.prefLabel, None)): - graph.add( - (URIRef(f"{placeholder_namespace}{name}"), RDFS.label, o2) - ) - - for _s2, _p2, o2 in graph.triples((s, RDFS.label, None)): - graph.add( - (URIRef(f"{placeholder_namespace}{name}"), RDFS.label, o2) - ) - - graph.serialize(ontology_ttl_output, format="ttl") - - -# def add_class_labels_to_individuals(ontology_ttl_input, ontology_ttl_output): -# """ -# In order to allow the development of abox templates using ontopanel it is crucial, that the individuals have meaningful -# labels annotated with RDFS.label. This utility function adds the -# """ - - -# def add_uuid_to_individuals( -# ABox_template_graph_file_input, -# ABox_template_graph_file_output, -# ) - -# graph = Graph() -# graph.parse(ABox_template_graph_file_input, format="ttl") - -# for s, p, o in graph.triples((None, None, OWL.NamedIndividual)): -# label = str(s).split("#")[-1] -# graph.add((s, RDFS.label, Literal(label))) - - -def add_individual_labels( - abox_template_graph_file_input, - abox_template_graph_file_output, -): - graph = Graph() - graph.parse(abox_template_graph_file_input, format="ttl") - - for s, _p, _o in graph.triples((None, None, OWL.NamedIndividual)): - if "#" in str( - s - ): # works for uri/name and uri#name -> adapt if other cases exist - name = str(s).split("#")[-1] - else: - name = str(s).split("/")[-1] - - graph.add((s, RDFS.label, Literal(name))) - - graph.serialize(abox_template_graph_file_output, format="ttl") - - -def merge_graphs(graph_01, graph_02, merged_graph): - """ - Merges both graphs into merged_graph - """ - graph = Graph() - graph.parse(graph_01, format="ttl") - graph.parse(graph_02, format="ttl") - graph.serialize(merged_graph, format="ttl") - - -class ABoxScaffoldPipeline: - def __init__( - self, - xml_path, - mod_xml_path=None, - ttl_path=None, - ): - self.xml_path = xml_path - self.mod_xml_path = mod_xml_path - self.ttl_path = ttl_path - - self.base_file_name = Path(self.xml_path).stem - - # filename = pathlib.Path(self.xml_path).name - - # self.mod_xml_path = os.path.join(out_path, filename.replace(".xml",".mod.xml")) - # self.ttl_path = os.path.join(out_path, filename.replace('.xml','.ttl')) - # self.ttl_path_ns = os.path.join(out_path, filename.replace('.xml','.ns.ttl')) - - def xml_conversion(self): - chowlk_utils.add_emmo_name_to_diagrams( - self.xml_path, self.mod_xml_path - ) - - def run_chowlk(self): - run_chowlk(self.mod_xml_path, self.ttl_path) - - def add_individual_labels(self): - add_individual_labels(self.ttl_path, self.ttl_path) - - def change_namespace(self, ttl_path_ns, unique_uri="http://test.org#"): - convert_abox_namespace(self.ttl_path, ttl_path_ns) - - def run_pipeline(self): - try: - self.xml_conversion() - except Exception as e: - logging.error(e, exc_info=True) - - try: - self.run_chowlk() - except Exception as e: - logging.error(e, exc_info=True) - - try: - self.add_individual_labels() - except Exception as e: - logging.error(e, exc_info=True) - # self.change_namespace()python logging function wrapper - - def set_output_paths(self, output_folder): - self.mod_xml_path = os.path.join( - output_folder, self.base_file_name + ".mod.xml" - ) - self.ttl_path = os.path.join( - output_folder, self.base_file_name + ".mod.ttl" - ) - - def create_output_next_to_file(self): - top_folder_path = os.path.dirname(os.path.abspath(self.xml_path)) - folder_path = os.path.join(top_folder_path, self.base_file_name) - os.makedirs(folder_path, exist_ok=True) - self.set_output_paths(folder_path) - - self.run_pipeline() - - -# FOLDER_PATH = os.path.dirname(os.path.abspath(__file__)) -# TT_EXAMPLE_PATH = os.path.join(FOLDER_PATH, "tests", "tensile_test_example") -# XML_FILE_PATH = os.path.join(TT_EXAMPLE_PATH,"tensile_test_method_v6.xml") -# OUTPUT_PATH = os.path.join(TT_EXAMPLE_PATH) - -# abox_pipeline = ABoxScaffoldPipeline(XML_FILE_PATH, OUTPUT_PATH) -# abox_pipeline.run_pipeline() diff --git a/data2rdf/annotation_confs.py b/data2rdf/annotation_confs.py deleted file mode 100755 index a5fc84a7..00000000 --- a/data2rdf/annotation_confs.py +++ /dev/null @@ -1,24 +0,0 @@ -# The csv2rdf conversion requires a set of relations and classes to use for -# the annotation these are defined separately, so that they can be easily -# adapted. - -annotations = { - # EMMO classes and relations - "quantity_class": "http://emmo.info/emmo/middle/metrology#EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5", # Quantity - "numeric_class": "http://emmo.info/emmo/middle/math#EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa", # Numeric - "meta_data_value_annotation": "http://emmo.info/emmo/middle/perceptual#EMMO_23b579e1_8088_45b5_9975_064014026c42", # hasSymbolData - "meta_data_quantity_annotation": "http://emmo.info/emmo/middle/metrology#EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0", # hasQuantityValue - # hasNumericalData (needs additional steps since EMMO uses classes to - # define the data type) - "meta_data_numeric_annotation": "http://emmo.info/emmo/middle/math#EMMO_faf79f53_749d_40b2_807c_d34244c192f4", - # hasReferenceUnit (object relation -> unit must be an individual) - "meta_data_unit_annotation": "http://emmo.info/emmo/middle/metrology#EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296", - # EMMO data model - "meta_data_type": "http://emmo.info/datamodel#Metadata", # TODO check metadata class - # TODO check best way to connect meta data to a dcat file - "hasMetaData": "http://emmo.info/datamodel#composition", - # https://github.com/emmo-repo/datamodel-ontology/blob/master/metamodel.ttl - "column_class": "http://emmo.info/datamodel#DataInstance", - # Custom class - "UnitLiteral": "http://emmo.info/emmo/middle/metrology#UnitLiteral", # TODO add to emmo -} diff --git a/data2rdf/annotation_pipeline.py b/data2rdf/annotation_pipeline.py deleted file mode 100755 index 8c936c98..00000000 --- a/data2rdf/annotation_pipeline.py +++ /dev/null @@ -1,242 +0,0 @@ -import os -from pathlib import Path - -from rdflib import Graph - -from data2rdf.abox_template_generation import ( - add_individual_labels, - convert_abox_namespace, -) -from data2rdf.csv_parser import CSVParser -from data2rdf.excel_parser import ExcelParser -from data2rdf.mapper import Mapper, merge_same_as_individuals -from data2rdf.rdf_generation import RDFGenerator - -parser_choice = { - "csv": CSVParser, - "excel": ExcelParser, -} - - -class AnnotationPipeline: - - """ - Generates an output folder and runs the complete data2rdf pipeline. - The mapping is updated. Hence the already created mapping is kept, only the mapping choices are renewed. - - Attributes: - input_file (str): The file path for the file used as input for the pipeline. Must be a file that can be processed with the provided parser (e.g. csv / excel). - parser(str): The parser used to read the meta data and column data from the file (csv or excel). - parser_args(dict): A dict with specific arguments for the parser. Is passed to the parser as kwargs. - mapping_file(str): The file path for the mapping_file (in .xlsx excel format). - template(str): The file path for the abox template (in .ttl format). - output(str): The path for the output folder. This is where all the output files will be stored. The folder will be created. - base_iri(str): An iri used as base for the generated graph entities. The base will be extended by an automatically generated uuid such as: base_iri/uuid#entity - mapping_db(str, optional): The file path for a mapping database. Can be used to predict possible mappings based on the mapping_file - only_use_base_iri (bool): In some cases it is not good to automatically add an UUID to the iri. E.g. mapping of the iri to the generated file IDs of the DSMS. - data_download_iri (str): Download location of the columns. E.g.: https://127.0.0.1/id. This will be added as downloadURL to the created columns. This url can than be used to serve the columns e.g. as json. The DSMS rest-api uses this url. - """ - - def __init__( - self, - input_file, - parser, - parser_args, - template, - mapping_file, - output, - mapping_db=None, - base_iri="http://www.test2.de", - only_use_base_iri=True, - data_download_iri=None, - ): - self.input_file = input_file - - self.parser = parser_choice[parser] - self.parser_args = parser_args - # set base - # iri for - # the parsed - # meta data - self.parser_args["namespace"] = base_iri - - self.template = template - self.mapping_file = mapping_file - self.output = output - - self.base_iri = base_iri - self.mapping_db = mapping_db - self.only_use_base_iri = only_use_base_iri - self.data_download_iri = data_download_iri - - def create_output(self): - """ - Generates an output folder (will overwrite existing folders) and paths - for the output files. All files are generated in the - output folder. - """ - os.makedirs(self.output, exist_ok=True) - - self.input_file_name = Path(self.input_file).stem - self.generic_output = os.path.join( - self.output, f"{self.input_file_name}.generic.xlsx" - ) - self.data_storage_path = os.path.join( - self.output, f"{self.input_file_name}.datastorage.hdf5" - ) - self.data_graph = os.path.join( - self.output, f"{self.input_file_name}.metadata.ttl" - ) - - self.mapping_table = os.path.join( - self.output, f"{self.input_file_name}.mapping-result.xlsx" - ) - self.mapping_ttl = os.path.join( - self.output, f"{self.input_file_name}.mapping.ttl" - ) - - self.mapping_prediction = os.path.join( - self.output, f"{self.input_file_name}.predicted-mapping.csv" - ) - - self.unique_abox_template = os.path.join( - self.output, f"{self.input_file_name}.abox.ttl" - ) - - def parse_data(self): - """ - Parses the data using the provided parser class (csv or excel) and its kwargs. - Stores the generic data description (file data, meta data, column data) as excel. - Also stores the bulk data (time series) as a HDF file. - The columns in the HDF5 file are related to the column data in the excel file and can be used to - extract the data from the HDF5 file. - """ - - self.parser = self.parser( - self.input_file, - data_storage_path=self.data_storage_path, - **self.parser_args, - ) - - self.parser.parser_data() - self.parser.generate_excel_spreadsheet(self.generic_output) - self.parser.generate_data_storage() - - def write_rdf(self): - """ - Generates a RDF graph representation of the parsed data. This graph uses a generic data model. - Each meta data point and column creates one OWL individual. - The quantities are described using EMMO and EMMO units. - The graph itself is not yet interoperable. It is only a conversion of the data to RDF. - Interoperability is achieved when the created individuals are mapped to - individuals of the process graph (created with the abox template). - """ - - self.writer = RDFGenerator( - self.generic_output, self.only_use_base_iri, self.data_download_iri - ) - - self.file_uri = ( - self.writer.generate_file_json() - ) # store the file uri and use for the abox - self.writer.generate_meta_json() - self.writer.generate_column_json() - - self.writer.to_ttl(self.data_graph) - - def convert_abox_template(self): - """ - Converts the abox template to the process graph. This means, that the individuals describing the - process in general are converted into unique individuals representing the specific process. This is simply - achieved by changing the namespace to a unique namespace. - """ - - convert_abox_namespace( - self.template, self.unique_abox_template, unique_uri=self.file_uri - ) - - add_individual_labels( - self.unique_abox_template, self.unique_abox_template - ) - - def update_mapping(self): - """ - Takes the mapping file and adds the new mapping choices extracted from the data graph and the process - graph. The mapping matches need to be adjusted manually by the uses. - This means, that the for example a data set - with a slightly different naming convention (E.g.: Prüfer vs Pruefer vs Tester ...) can - be used for the same pipeline. The mapping only needs to be adjusted for the data entities - with names different to the original mapping. - This applies as well to a changed method graph. - - To make is even easier for the user the mapping is also predicted using a word match algorithm and a - DB with known mapping (currently extracted from the synonyms of the stahldigital ontology). - The user can use the predicted mapping as a guide to create the new one. - """ - - self.mapper = Mapper( - self.data_graph, self.unique_abox_template, self.mapping_file - ) - self.mapper.update_mapping_template() - - if self.mapping_db: - self.mapper.predict_mapping( - self.mapping_prediction, self.mapping_db - ) - - def create_mapping(self): - """ - Maps the data individuals and the process individuals based on the label matches provided in the - mapping excel. Mapping means in this context, that an OWL:sameAs relation points from the data individual to - the corresponding process individual. An OWl-reasoner (e.g. AllegroGraph) can - infer that those two individuals are actually the same. - - The mapping is exported as a mapping table, that provides verbose - information of the individuals and the mapping - as well as a .ttl file, that exports the mapping as a RDF graph. - """ - - self.mapper = Mapper( - self.data_graph, self.unique_abox_template, self.mapping_file - ) - self.mapper.map_data_and_abox(worksheet="sameas") - self.mapper.export_merged_mapping_table(self.mapping_table) - self.mapper.export_mapping_as_ttl(self.mapping_ttl) - - def run_pipeline(self): - """ - Runs the complete pipeline with all required steps. - """ - - self.create_output() - self.parse_data() - self.write_rdf() - self.convert_abox_template() - self.update_mapping() - self.create_mapping() - - def export_graph(self, merge_same_as=True): - """ - Exports a merged rdflib graph of the data, process and mapping output. - Can be used e.g. to load the data into a triple store using rdflib. - """ - - g = Graph(identifier=self.base_iri) - g.parse(self.unique_abox_template, format="ttl") - g.parse(self.mapping_ttl, format="ttl") - g.parse(self.data_graph, format="ttl") - - if merge_same_as: - g = merge_same_as_individuals(g) - - return g - - def export_ttl(self, f_path): - """ - Exports a merged .ttl file graph of the data, process and mapping output. - Can be used e.g. to load the data into a triple store using the stores file upload functionality - (e.g. AllegroGraph). - """ - - g = self.export_graph() - g.serialize(f_path, format="ttl") diff --git a/data2rdf/cli/abox_conversion.py b/data2rdf/cli/abox_conversion.py deleted file mode 100755 index a050ff61..00000000 --- a/data2rdf/cli/abox_conversion.py +++ /dev/null @@ -1,37 +0,0 @@ -import argparse -import os - -from data2rdf.abox_template_generation import ABoxScaffoldPipeline -from data2rdf.pipeline_logging import set_global_logger - - -def run_abox_pipeline_for_folder(top_folder): - filepath = os.path.join(top_folder, "conversion.log") - set_global_logger(filepath) - - for file in os.listdir(top_folder): - if ".xml" in file: - file_path = os.path.join(top_folder, file) - pipeline = ABoxScaffoldPipeline(file_path) - pipeline.create_output_next_to_file() - - -def terminal(): - parser = argparse.ArgumentParser( - description="Convert all .xml file into .ttl files." - ) - - parser.add_argument( - "-f", - "--folder_path", - help="Path of the folder with the xml files", - required=True, - ) - - args = parser.parse_args() - - run_abox_pipeline_for_folder(args.folder_path) - - -if __name__ == "__main__": - terminal() diff --git a/data2rdf/config.py b/data2rdf/config.py new file mode 100755 index 00000000..e36af1df --- /dev/null +++ b/data2rdf/config.py @@ -0,0 +1,63 @@ +# The csv2rdf conversion requires a set of relations and classes to use for +# the annotation these are defined separately, so that they can be easily +# adapted. +from typing import List, Optional, Union + +from pydantic import AnyUrl, ConfigDict, Field +from pydantic_settings import BaseSettings + + +class Config(BaseSettings): + """Data2RDF configuration""" + + qudt_units: AnyUrl = Field( + "http://qudt.org/2.1/vocab/unit", + description="URI to QUDT Unit ontology for unit conversion", + ) + + qudt_quantity_kinds: AnyUrl = Field( + "http://qudt.org/vocab/quantitykind/", + description="URI to QUDT quantity kind ontology for unit conversion", + ) + + base_iri: AnyUrl = Field( + "https://www.example.org/", description="Base IRI for individuals." + ) + + separator: str = Field( + "/", description="Separator between base IRI and suffix." + ) + + encoding: str = Field("utf-8", description="Encoding used while parsing.") + + data_download_uri: AnyUrl = Field( + "https://www.example.org/download", + description="General base iri for downloading the time series after uploading", + ) + + graph_identifier: Optional[Union[str, AnyUrl]] = Field( + None, description="Identifier of the graph to be produced." + ) + + namespace_placeholder: Union[str, AnyUrl] = Field( + "http://abox-namespace-placeholder.org/", + description="Placeholder of the extra triples to be replaced with the `base_iri` during the pipeline run.", + ) + + remove_from_unit: List[str] = Field( + ["[", "]", '"', " "], + description="Characters which should be removed from the input value for the unit", + ) + + mapping_csv_separator: str = Field( + ";", + description="When the mapping file is a csv, the separator to be used for parsing", + ) + + remove_from_datafile: List[str] = Field( + ['"', "\r", "\n"], + description="""In plain text parsers, e.g. the CSV-parser, + there might be the need to remove certain characters when parsing""", + ) + + model_config = ConfigDict(extra="ignore") diff --git a/data2rdf/csv_parser.py b/data2rdf/csv_parser.py deleted file mode 100755 index 64c357c8..00000000 --- a/data2rdf/csv_parser.py +++ /dev/null @@ -1,148 +0,0 @@ -import io - -import magic -import pandas as pd - -from data2rdf.parser import DataParser - - -class CSVParser(DataParser): - """ - Generates the excel input sheet that can be used - as input for abox skeleton files. - - Attributes: - f_path (str): The file path for the csv file used as input for the - # parser. This path gets also stored as dcat:downloadURL attribute for the created dcat:Dataset individual by the rdf_generation class. - header_sep (str): separator (e.g.: ,,;\t) for the header metadata. - column_sep (str): separator (e.g.: ,,;\t) for the column data. - header_length (int): Number of rows of the metadata header. - server_f_path (str): By default the file path for the csv file (f_path) gets used as dcat:downloadURL attribute for the created dcat:Dataset individual. On a server the actual download url of the file should be used (e.g. on the DSMS https://127.0.0.1/api/knowledge/data-files/764f6e51-a244-42f9-a754-c3e2861f63e4/raw_data/excel_file.xlsx). - data_storage_path (str): Optional different storage location for the hdf5 file holding the data. Default is the same location as the input file. - data_storage_group_name (str): Name of the group in the hdf5 to store the data. Using the data_storage_path and the data_storage_group_name multiple datasets can be stored in the same hdf5 file. - namespace (str): The namespace that will be used by the rdf_generation class to construct the abox individuals. - - """ - - def __init__( - self, - f_path, - header_sep, - column_sep, - header_length, - # when a file is stored on a server it makes sense to store this path - # (e.g. http access) instead of the local path - server_f_path=None, - # the columns get stored in a dedicated format (hdf5 by default) - data_storage_path=None, - # one hdf5 store is probably enough for our current setup (use - # different groups (folders), for each file) - data_storage_group_name="df", - namespace="http://www.test.de", - ): - super().__init__( - f_path, - server_f_path, - data_storage_path, - data_storage_group_name, - namespace, - ) - - self.header_sep = header_sep - self.column_sep = column_sep - self.header_length = header_length - - def parser_data(self): - self.get_file_encoding() - self.load_file() - self.generate_file_uuid() - self.parse_meta_data() - self.split_meta_df() - self.parse_table() - self.generate_column_df() - self.generate_file_meta_df() - self.clean_table_df() - - def get_file_encoding(self): - """ - Get file encoding - """ - rawdata = open(self.f_path, "rb").read() - buffered = magic.open(magic.MAGIC_MIME_ENCODING) - buffered.load() - self.encoding = buffered.buffer(rawdata) - - def load_file(self): - with open(self.f_path, encoding=self.encoding) as file: - self.file = file.read() - - def parse_meta_data(self): - """ - Parser the header of a csv file that looks like that: - meta data-1; meta data value-1; unit-1 - meta data-2; meta data value-2; unit-2 - ... - meta data-n; meta data value-n; unit-n - - And stores in pd DataFrame - """ - header = ["index", "value", "unit"] - - meta_df = pd.DataFrame(columns=header, index=range(self.header_length)) - - # needs specific parsing - # load the header as an own table until the header length ends - # TODO automate detection of header end encoding -> Mat-O-Lab - # with open(self.f_path, 'r', encoding=self.encoding) as file: - buf = io.StringIO(self.file) - - for l_count, line in enumerate(buf): - for i_count, item in enumerate(line.split(self.header_sep)): - meta_df.iloc[l_count, i_count] = str(item.strip("\n")) - - if l_count == self.header_length - 1: - break - - meta_df.fillna("", inplace=True) - self.meta_df = meta_df.apply(lambda s: s.str.replace('"', "")) - # self.meta_df.index.name = 'index' - self.meta_df.set_index("index", inplace=True) - - def split_meta_df(self): - """ - Split the meta data into basic description and quantities - """ - self.meta_quantity_df = self.meta_df.loc[ - (self.meta_df["unit"] != ""), : - ] - self.meta_description_df = self.meta_df.loc[ - (self.meta_df["unit"] == ""), : - ] - - def parse_table(self): - self.df_table = pd.read_csv( - self.f_path, - encoding=self.encoding, - sep=self.column_sep, - skiprows=self.header_length, - ) - - def generate_column_df(self): - self.column_df = pd.DataFrame(self.df_table.iloc[0, :]) - self.column_df.columns = ["unit"] - self.column_df["titles"] = self.column_df.index - self.column_df.index.name = "index" - - def clean_table_df(self): - self.df_table = self.df_table.iloc[1:, :] - - def generate_excel_spreadsheet(self, output_path): - with pd.ExcelWriter(output_path, engine="openpyxl") as writer: - self.file_meta_df.to_excel(writer, "file") - self.column_df.to_excel(writer, "column_meta") - self.meta_df.to_excel(writer, "meta") - - def generate_data_storage(self): - self.df_table.to_hdf( - self.data_storage_path, key=self.data_storage_group_name - ) diff --git a/data2rdf/emmo_lib/chowlk_utils.py b/data2rdf/emmo_lib/chowlk_utils.py deleted file mode 100755 index 16d4bb77..00000000 --- a/data2rdf/emmo_lib/chowlk_utils.py +++ /dev/null @@ -1,88 +0,0 @@ -import re - -import pandas as pd -from rdflib import Graph -from rdflib.namespace import SKOS - -# pd.set_option('display.max_colwidth', None) # or 199 -# pd.set_option('display.max_columns', None) # or 1000 - - -def add_emmo_name_to_diagrams( - input_file, - output_file, - emmo_ontology="https://emmo-repo.github.io/versions/1.0.0-alpha2/emmo.ttl", -): - """ - EMMO uses non-human readable uris to identify concepts. - This is hard to use when working with draw.io as input for Chowlk. - - The concepts however are described by the skos.prefLabel. - Unfortunatly Chowlk requires the usage of the concept uri. - - This function allows the user to design an ontology using the skos.prefLabel. - Just write the concept as: - - prefix:skos.prefLabel - e.g.: - holistic:hasParticipant - - Then convert the concepts to actual EMMO concepts. - - Args: - INPUT_FILE (str): Path to input XML file. Create with Draw.io -> Export as -> XML (choose not compressed) - OUTPUT_FILE (str): Path to the output XML file. The same draw.io file with replaced concept names. - EMMO_ONTOLOGY (str): A path to the EMMO file to find the skos.prefLabel's. Default: https://emmo-repo.github.io/versions/1.0.0-alpha2/emmo.ttl - - """ - - g = Graph() - g.parse(emmo_ontology, format="ttl") - - # get mapping between emmo labels and class/relation uris - label_map = list(g.triples((None, SKOS.prefLabel, None))) - df = pd.DataFrame( - label_map, columns=["class/relation uris", "relation", "label"] - ) - df["class/relation names"] = df["class/relation uris"].apply( - lambda x: x.split("#")[1] - ) - # otherwise pandas stores them in the natice rdflib datatype - df = df.astype(str) - - with open(input_file) as input_file: - # extract all abc:xyz patterns from the draw.io xml - text = input_file.read() - entities = re.findall( - "[A-Za-z0-9][A-Za-z0-9]*:[A-Za-z0-9][A-Za-z0-9]*", text - ) - - for entity in entities: - skos_label = entity.split(":")[1] - # prefix = entity.split(":")[0] - # todo: Check for emmo prefix ! - - # check if matching label can be found in EMMO - if not df.loc[(df["label"] == skos_label), :].empty: - individual_name = df.loc[ - (df["label"] == skos_label), ["class/relation names"] - ].values[0][0] - - # create new label and add to XML - new_entity = "{}:{}".format( - entity.split(":")[0], individual_name - ) - text = text.replace(entity, new_entity) - - # store new XML - with open(output_file, "w") as output_file: - output_file.write(text) - - -# INPUT_FILE = os.path.join("method_graph","tensile_test_method.xml") -# OUTPUT_FILE = os.path.join("method_graph","tensile_test_method_conv.xml") -# EMMO_ONTOLOGY = os.path.join("emmo","emmo.ttl") - -# add_emmo_name_to_diagrams(INPUT_FILE, OUTPUT_FILE, EMMO_ONTOLOGY) - -# TODO: Take care, that only EMMO namespaces are converted !! diff --git a/data2rdf/emmo_lib/emmo_unit_prefixes.csv b/data2rdf/emmo_lib/emmo_unit_prefixes.csv deleted file mode 100755 index ec17bb41..00000000 --- a/data2rdf/emmo_lib/emmo_unit_prefixes.csv +++ /dev/null @@ -1,21 +0,0 @@ -,Class,Symbol -0,http://emmo.info/emmo/middle/siunits#EMMO_e1981c25_7c55_4020_aa7a_d2e14ced86d4,n -1,http://emmo.info/emmo/middle/siunits#EMMO_5eaecadc_4f0d_4a3a_afc7_1fc0b83cc928,M -2,http://emmo.info/emmo/middle/siunits#EMMO_068c4e58_2470_4b1c_8454_010dd4906100,p -3,http://emmo.info/emmo/middle/siunits#EMMO_42955b2d_b465_4666_86cc_ea3c2d685753,a -4,http://emmo.info/emmo/middle/siunits#EMMO_1d8b370b_c672_4d0c_964e_eaafcbf2f51f,da -5,http://emmo.info/emmo/middle/siunits#EMMO_b55cd09a_e54d_4eb1_81dd_03c29d1b878e,c -6,http://emmo.info/emmo/middle/siunits#EMMO_5cf9f86c_86f5_40c4_846d_60371f670e0a,E -7,http://emmo.info/emmo/middle/siunits#EMMO_daa9ee97_4c5f_42e5_918c_44d7523e8958,Z -8,http://emmo.info/emmo/middle/siunits#EMMO_f5769206_9257_4b08_bf7b_dad7868c6afc,y -9,http://emmo.info/emmo/middle/siunits#EMMO_21aaefc1_3f86_4208_b7db_a755f31f0f8c,h -10,http://emmo.info/emmo/middle/siunits#EMMO_254472c6_3dbd_4f02_bc43_571389cd281f,z -11,http://emmo.info/emmo/middle/siunits#EMMO_9ff3bf8e_2168_406e_8251_1d158fc948ae,µ -12,http://emmo.info/emmo/middle/siunits#EMMO_e79c62ff_10ad_4ec0_baba_c19ddd4eaa11,Y -13,http://emmo.info/emmo/middle/siunits#EMMO_43a6b269_da31_4bb6_a537_c97df4fff32a,P -14,http://emmo.info/emmo/middle/siunits#EMMO_a8eb4bbb_1bd3_4ad4_b114_2789bcbd2134,G -15,http://emmo.info/emmo/middle/siunits#EMMO_a3a701ed_6f7d_4a10_9aee_dfa1961fc7b7,m -16,http://emmo.info/emmo/middle/siunits#EMMO_1181c938_c8f0_4ad6_bc7a_2bfdc0903d29,d -17,http://emmo.info/emmo/middle/siunits#EMMO_23bfe79a_cade_48f1_9a8c_fd96e6bac8ba,f -18,http://emmo.info/emmo/middle/siunits#EMMO_3a204900_2b33_47d1_b444_815cc4c8cffa,T -19,http://emmo.info/emmo/middle/siunits#EMMO_74931b1b_c133_4e59_9a75_1bf0e1626201,k diff --git a/data2rdf/emmo_lib/emmo_units.csv b/data2rdf/emmo_lib/emmo_units.csv deleted file mode 100755 index f3b60705..00000000 --- a/data2rdf/emmo_lib/emmo_units.csv +++ /dev/null @@ -1,46 +0,0 @@ -,Class,Symbol -0,http://emmo.info/emmo/middle/units-extension#EMMO_e29f84db_4c1c_46ae_aa38_c4d47536b972,eV -1,http://emmo.info/emmo/middle/units-extension#EMMO_21ef2ed6_c086_4d24_8a75_980d2bcc9282,h -2,http://emmo.info/emmo/middle/siunits#EMMO_314ba716_2d3d_4462_9a4f_d3419ae1df43,s -3,http://emmo.info/emmo/middle/siunits#EMMO_a979c531_f9fa_4a6e_93c1_a2960241ca64,N -4,http://emmo.info/emmo/middle/siunits#EMMO_00199e76_69dc_45b6_a9c6_98cc90cdc0f5,Gy -5,http://emmo.info/emmo/middle/siunits#EMMO_a121bb1d_5225_4c78_809b_0268c3012208,rad -6,http://emmo.info/emmo/middle/siunits#EMMO_da1dd4a7_c611_4ad4_bef6_7646f28aa598,lx -7,http://emmo.info/emmo/middle/siunits#EMMO_dc232f53_8ed8_4ddd_9f41_cc057985eadb,Sv -8,http://emmo.info/emmo/middle/siunits#EMMO_9bfd6f1e_b0ce_459c_beb7_8f1f41708bba,kg -9,http://emmo.info/emmo/middle/siunits#EMMO_b71e4ba5_8f73_4199_8c96_7ea7f94d9e2a,Bq -10,http://emmo.info/emmo/middle/units-extension#EMMO_b8830065_3809_41b7_be3c_e33795567fd9,° -11,http://emmo.info/emmo/middle/siunits#EMMO_080052a1_f295_44be_a60f_1326ce13f1ba,W -12,http://emmo.info/emmo/middle/siunits#EMMO_a9201b2f_e6de_442a_b3a6_d292a5820bc5,F -13,http://emmo.info/emmo/middle/siunits#EMMO_696ed548_9477_45ea_993c_6a8f5271914a,C -14,http://emmo.info/emmo/middle/units-extension#EMMO_a155dc93_d266_487e_b5e7_2a2c72d5ebf9,l -15,http://emmo.info/emmo/middle/siunits#EMMO_8a70dea4_d6ab_4260_b931_a3e990982416,J -16,http://emmo.info/emmo/middle/siunits#EMMO_59c10c5c_47bd_4348_ba39_38836607dfa1,Ω -17,http://emmo.info/emmo/middle/siunits#EMMO_a80dc6f5_b1aa_41a7_a3a8_cd5040da2162,Pa -18,http://emmo.info/emmo/middle/units-extension#EMMO_6c7160fc_cc64_46f0_b43b_aba65e9952e3,B -19,http://emmo.info/emmo/middle/units-extension#EMMO_f992dc76_f9a6_45f6_8873_c8e20d16fbbe,g -20,http://emmo.info/emmo/middle/units-extension#EMMO_b41515a9_28d8_4d78_8165_74b2fc72f89e,Np -21,http://emmo.info/emmo/middle/siunits#EMMO_cf3dd6cc_c5d6_4b3d_aef4_82f3b7a361af,sr -22,http://emmo.info/emmo/middle/units-extension#EMMO_d6eb0176_a0d7_4b4e_8df0_50e912be2342,ha -23,http://emmo.info/emmo/middle/siunits#EMMO_b20be325_8bfd_4237_bee7_201ab0fd9c75,°C -24,http://emmo.info/emmo/middle/siunits#EMMO_db5dd38d_ac79_4af6_8782_fee7e7150ae8,A -25,http://emmo.info/emmo/middle/siunits#EMMO_7db11dbf_a643_464a_9b56_07eabcc3e9c5,m -26,http://emmo.info/emmo/middle/siunits#EMMO_f2523820_04a6_44ab_bb67_8237dda2b0c2,S -27,http://emmo.info/emmo/middle/siunits#EMMO_df6eeb01_1b41_4bd8_9257_a04fbd7cf000,mol -28,http://emmo.info/emmo/middle/siunits#EMMO_fab003c8_f7a6_4346_9988_7161325ed7a3,H -29,http://emmo.info/emmo/middle/units-extension#EMMO_6a4547ab_3abb_430d_b81b_ce32d47729f5,″ -30,http://emmo.info/emmo/middle/siunits#EMMO_d7b7fd1e_645a_42cb_8f40_85f0d034d3ae,lm -31,http://emmo.info/emmo/middle/siunits#EMMO_d7f11b34_a121_4519_87c0_aa754f1c4737,Wb -32,http://emmo.info/emmo/middle/units-extension#EMMO_053648ea_3c0a_468c_89cb_eb009239323a,au -33,http://emmo.info/emmo/middle/siunits#EMMO_33b67e69_3645_4c73_b100_5ea6759221b4,kat -34,http://emmo.info/emmo/middle/siunits#EMMO_e2207e91_02b0_4a8a_b13e_61d2a2a839f1,V -35,http://emmo.info/emmo/middle/units-extension#EMMO_f8b92999_3cde_46e3_99d5_664da3090a02,t -36,http://emmo.info/emmo/middle/units-extension#EMMO_1e0b665d_db6c_4752_a6d4_262d3a8dbb46,′ -37,http://emmo.info/emmo/middle/units-extension#EMMO_27c530c4_dfcd_486e_b324_54ad4448cd26,Å -38,http://emmo.info/emmo/middle/units-extension#EMMO_00dd79e0_31a6_427e_9b9c_90f3097e4a96,Da -39,http://emmo.info/emmo/middle/siunits#EMMO_acb50123_87a2_4753_b36c_f87114ad4de2,T -40,http://emmo.info/emmo/middle/siunits#EMMO_8d00f093_3f45_4ea3_986c_b3545c3c2f4c,cd -41,http://emmo.info/emmo/middle/siunits#EMMO_2e5e45fc_f52c_4294_bdc2_5ed7a06dfce7,K -42,http://emmo.info/emmo/middle/units-extension#EMMO_28ef05a7_ecc1_4df6_8116_c53251fbd4a8,d -43,http://emmo.info/emmo/middle/units-extension#EMMO_cabb20f0_05c7_448f_9485_e129725f15a4,min -44,http://emmo.info/emmo/middle/siunits#EMMO_e75f580e_52bf_4dd5_af70_df409cec08fd,Hz diff --git a/data2rdf/emmo_lib/emmo_utils.py b/data2rdf/emmo_lib/emmo_utils.py deleted file mode 100755 index e48c2641..00000000 --- a/data2rdf/emmo_lib/emmo_utils.py +++ /dev/null @@ -1,146 +0,0 @@ -# add func that matches EMMO units ! -import os - -import pandas as pd - -unit_df = pd.read_csv( - os.path.join(os.path.dirname(os.path.abspath(__file__)), "emmo_units.csv"), - index_col=0, -) -prefix_df = pd.read_csv( - os.path.join( - os.path.dirname(os.path.abspath(__file__)), "emmo_unit_prefixes.csv" - ), - index_col=0, -) - - -def simple_unit_lookup(parsed_unit): - """ - Very simple function that assignes EMMO unit classes for the prefix and the unit for a parsed - unit. Assuming, that the prefix and unit match the EMMO annotation, that follows SI standards. - Could be improved using unit matching libs like pint. - - Args: - parsed_unit (str): Parsed unit from the data (e.g. mm) - - Returns: - - prefix_class (str): The EMMO class of the prefix (or none) - unit_class (str): The EMMO class of the unit (or none) - - """ - - if not isinstance(parsed_unit, str): - prefix_class = None - unit_class = None - - return (prefix_class, unit_class) - - if len(parsed_unit) == 0: - prefix_class = None - unit_class = None - - return (prefix_class, unit_class) - - prefix, unit = parsed_unit[0], parsed_unit[1:] - - prefix_match = prefix_df.loc[(prefix_df["Symbol"] == prefix), :] - unit_match = unit_df.loc[(unit_df["Symbol"] == unit), :] - - # assuming, that prefix and unit are there - if not prefix_match.empty and not unit_match.empty: - prefix_class = prefix_match["Class"].to_list()[0] - unit_class = unit_match["Class"].to_list()[0] - - else: - # if either prefix or unti cannot be matched, try only the unit - unit = parsed_unit - unit_match = unit_df.loc[(unit_df["Symbol"] == unit), :] - - if not unit_match.empty: - prefix_class = None - unit_class = unit_match["Class"].to_list()[0] - - # Neither can be matched - else: - prefix_class = None - unit_class = None - - return (prefix_class, unit_class) - - -def generate_unit_individuals(parsed_unit, row_id): - """ - Generates the json-ld representation of the individuals generated from a parsed unit using EMMO Logic - A figure describing the schema is shown in unit_assignment_scheme.drawio - - Args: - parsed_unit (str): Parsed unit from the data (e.g. mm) - row_id (int): ID assigned to the individuals. In the pipeline each individuals gets an incremental ID - - Returns: - - unit_json: (json): json-ld representation of the individuals, can be added in a json-ld syntax - - """ - - prefix_class, unit_class = simple_unit_lookup(parsed_unit) - - if prefix_class and unit_class: - unit_json = { - "@id": f"fileid:unit-{row_id}", - "@type": "http://emmo.info/emmo/middle/metrology#EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e", # PrefixedUnit - "http://emmo.info/emmo/middle/reductionistic#EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe": [ # hasSpatialDirectPart - { - "@id": f"fileid:MetricPrefix-{row_id}", - "@type": prefix_class, - }, - { - "@id": f"fileid:UnitSymbol-{row_id}", - "@type": unit_class, - }, - ], - } - - if not prefix_class and unit_class: - unit_json = { - "@id": f"fileid:unit-{row_id}", - "@type": unit_class, # a NonPrefixedUnit - } - - # if the unit cannot be parsed, store the string as literal to a - # UnparseableUnit individual - if not prefix_class and not unit_class: - unit_json = { - "@id": f"fileid:unit-{row_id}", - # TODO add to sd or emmo UnparseableUnit !! - "@type": "http://www.example.de#UnparseableUnit", - "http://emmo.info/emmo/middle/perceptual#EMMO_23b579e1_8088_45b5_9975_064014026c42": { - "@value": parsed_unit, - "@type": "xsd:string", - }, - } - - return unit_json - - -# example_unit = "mPa" -# print(simple_unit_lookup(example_unit)) -# unit_json = generate_unit_individuals(example_unit, row_id = 1) -# print(unit_json) - -# from pint import UnitRegistry -# ureg = UnitRegistry() - -# parsed_unit = ureg(example_unit) -# print(ureg.get_symbol(str(parsed_unit.units))) - -# print(parsed_unit._units.items()) -# print(ureg.get_symbol(parsed_unit)) -# exit() -# for attr in dir(parsed_unit): -# try: -# print(attr, getattr(parsed_unit, attr)) -# except: -# pass diff --git a/data2rdf/emmo_lib/get_emmo_label_mappping.py b/data2rdf/emmo_lib/get_emmo_label_mappping.py deleted file mode 100755 index 9d6accf3..00000000 --- a/data2rdf/emmo_lib/get_emmo_label_mappping.py +++ /dev/null @@ -1,25 +0,0 @@ -import pandas as pd -from rdflib import Graph -from rdflib.namespace import SKOS - -pd.set_option("display.max_columns", None) -pd.set_option("display.max_rows", None) - - -def get_emmo_label_mapping( - emmo_ontology="https://emmo-repo.github.io/versions/1.0.0-alpha2/emmo.ttl", -): - g = Graph() - g.parse(emmo_ontology, format="ttl") - - # get mapping between emmo labels and class/relation uris - label_map = list(g.triples((None, SKOS.prefLabel, None))) - df = pd.DataFrame(label_map, columns=["uris", "relation", "skos label"]) - df["name"] = df["uris"].apply(lambda x: x.split("#")[1]) - # otherwise pandas stores them in the natice rdflib datatype - df = df.astype(str) - - print(df) - - -df = get_emmo_label_mapping() diff --git a/data2rdf/emmo_lib/get_emmo_unit_prefix_df.py b/data2rdf/emmo_lib/get_emmo_unit_prefix_df.py deleted file mode 100755 index 1c07aa24..00000000 --- a/data2rdf/emmo_lib/get_emmo_unit_prefix_df.py +++ /dev/null @@ -1,63 +0,0 @@ -# add func that matches EMMO units ! -import os - -import pandas as pd -from rdflib import Graph - -# EMMO_ONTOLOGY = "https://emmo-repo.github.io/versions/1.0.0-alpha2/emmo.ttl" - -g = Graph() - -# try: -# g.parse(EMMO_ONTOLOGY, format="ttl") -# except: - -# in order to filter for specific classes, the inferred EMMO needs to be used ! -g.parse(os.path.join("..", "emmo", "emmo-inferred.ttl"), format="ttl") - -unit_query = """ -PREFIX rdfs: -PREFIX rdf: -PREFIX csvw: -PREFIX perc: -PREFIX siunits: -PREFIX metro: - -SELECT ?unit ?unit_symbol -WHERE { -?unit_class rdfs:subClassOf* metro:EMMO_216f448e_cdbc_4aeb_a529_7a5fe7fc38bb . #property path query to filter for all subclasses of UnitSymbol -?unit rdfs:subClassOf ?x . -?unit rdfs:subClassOf ?unit_class . #get only subclasses of UnitSymbol -?x rdf:type owl:Restriction . -?x owl:onProperty perc:EMMO_23b579e1_8088_45b5_9975_064014026c42 . -?x owl:hasValue ?unit_symbol . -} -""" - -qres = g.query(unit_query) -unit_df = pd.DataFrame(qres, columns=["Class", "Symbol"]) -print(unit_df) - -prefix_query = """ -PREFIX rdfs: -PREFIX rdf: -PREFIX csvw: -PREFIX perc: -PREFIX siunits: - -SELECT ?unit ?unit_symbol -WHERE { -?unit rdfs:subClassOf ?x . -?unit rdfs:subClassOf siunits:EMMO_471cb92b_edca_4cf9_bce8_a75084d876b8 . #get only subclasses of SIMetricPrefix -?x rdf:type owl:Restriction . -?x owl:onProperty perc:EMMO_23b579e1_8088_45b5_9975_064014026c42 . -?x owl:hasValue ?unit_symbol . -} -""" - -qres = g.query(prefix_query) -prefix_df = pd.DataFrame(qres, columns=["Class", "Symbol"]) -print(prefix_df) - -unit_df.to_csv("emmo_units.csv") -prefix_df.to_csv("emmo_unit_prefixes.csv") diff --git a/data2rdf/emmo_lib/unit_assignment_scheme.drawio b/data2rdf/emmo_lib/unit_assignment_scheme.drawio deleted file mode 100755 index 14b6a637..00000000 --- a/data2rdf/emmo_lib/unit_assignment_scheme.drawio +++ /dev/null @@ -1 +0,0 @@ -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 diff --git a/data2rdf/emmo_lib/unit_assignment_scheme.png b/data2rdf/emmo_lib/unit_assignment_scheme.png deleted file mode 100755 index f03ef574..00000000 Binary files a/data2rdf/emmo_lib/unit_assignment_scheme.png and /dev/null differ diff --git a/data2rdf/excel_parser.py b/data2rdf/excel_parser.py deleted file mode 100755 index dde4e5f5..00000000 --- a/data2rdf/excel_parser.py +++ /dev/null @@ -1,234 +0,0 @@ -import pandas as pd -from openpyxl import load_workbook - -from data2rdf.parser import DataParser - - -class ExcelParser(DataParser): - """ - Generates the excel input sheet that can be used - as input for abox skeleton files. - - Attributes: - f_path (str): The file path for the csv file used as input for the parser. This path gets also stored as dcat:downloadURL attribute for the created dcat:Dataset individual by the rdf_generation class. - location_mapping_f_path (str): Path to the excel file, that holds the location of the meta data and column data cells that should be extracted. - server_f_path (str): By default the file path for the csv file (f_path) gets used as dcat:downloadURL attribute for the created dcat:Dataset individual. On a server the actual download url of the file should be used - (e.g. on the DSMS https://127.0.0.1/api/knowledge/data-files/764f6e51-a244-42f9-a754-c3e2861f63e4/raw_data/excel_file.xlsx). - data_storage_path (str): Optional different storage location for the hdf5 file holding the data. Default is the same location as the input file. - data_storage_group_name (str): Name of the group in the hdf5 to store the data. Using the data_storage_path and the data_storage_group_name multiple datasets can be stored in the same hdf5 file. - namespace (str): The namespace that will be used by the rdf_generation class to construct the abox individuals. - - """ - - def __init__( - self, - f_path, - location_mapping_f_path, - # when a file is stored on a server it makes sense to store this path - # (e.g. http access) instead of the local path - server_f_path=None, - # the columns get stored in a dedicated format (hdf5 by default) - data_storage_path=None, - # one hdf5 store is probaby enough for our current setup (use different - # groups (folders), for each file) - data_storage_group_name="df", - namespace="http://www.test.de", - ): - super().__init__( - f_path, - server_f_path, - data_storage_path, - data_storage_group_name, - namespace, - ) - - self.location_mapping_f_path = location_mapping_f_path - - def parser_data(self): - self.load_file() - self.generate_file_uuid() - self.load_mapping_file() - self.parse_meta_data() - self.generate_column_df() - self.parse_table() - self.generate_file_meta_df() - - def load_mapping_file(self): - self.meta_mapping_df = pd.read_excel( - self.location_mapping_f_path, - engine="openpyxl", - sheet_name="meta", - ) - self.meta_mapping_df.fillna("", inplace=True) - self.column_mapping_df = pd.read_excel( - self.location_mapping_f_path, - engine="openpyxl", - sheet_name="columns", - ) - self.column_mapping_df.fillna("", inplace=True) - - def load_file(self): - # self.file = open(self.f_path, 'r', encoding=self.encoding).read() - self.workbook = load_workbook(filename=self.f_path, data_only=True) - # some datasets do have the unit encoded as macro of the cell, in order - # to extract this unit, the unformatted workbook is needed - self.workbook_macros = load_workbook(filename=self.f_path) - - def parse_meta_data(self): - """ - Extracts meta data from the excel worksheet using the location mapping - information from the meta_mapping_df - """ - - meta_data = [] - for _, row in self.meta_mapping_df.iterrows(): - if not row["Excel worksheet"]: - continue - - # get worksheet from mapping - worksheet = self.workbook[row["Excel worksheet"]] - - cell_location_name = row["Variable name cell location"] - cell_location_value = row["Variable value cell location"] - cell_location_unit = row["Variable unit cell location"] - - if cell_location_value == "": - continue - - meta_name = worksheet[cell_location_name].value - meta_value = worksheet[cell_location_value].value - - if cell_location_unit == "": - macro_worksheet = self.workbook_macros[row["Excel worksheet"]] - macro_value_cell = macro_worksheet[ - cell_location_value - ].number_format - - if len(macro_value_cell.split(" ")) != 1: - meta_unit = macro_value_cell.split(" ")[1].strip('"') - else: - meta_unit = "" - - else: - meta_unit = worksheet[cell_location_unit].value - - meta_name = meta_name.strip(":").strip("=") - - meta_data.append( - {"index": meta_name, "value": meta_value, "unit": meta_unit} - ) - - self.meta_df = pd.DataFrame(meta_data) - - def split_meta_df(self): - """ - Split the meta data into basic description and quantities - """ - self.meta_quantity_df = self.meta_df.loc[ - (self.meta_df["unit"] != ""), : - ] - self.meta_description_df = self.meta_df.loc[ - (self.meta_df["unit"] == ""), : - ] - - def parse_table(self): - self.df_table = pd.DataFrame() - for _, row in self.column_df.iterrows(): - # print(self.workbook[row["worksheet"]][row["start"]:row["end"]]) - column = [ - cell[0].value - for cell in self.workbook[row["worksheet"]][ - row["start"] : row["end"] - ] - ] - if not len(column): - column = "" - self.df_table[row["index"]] = column - - self.df_table = self.df_table.apply(pd.to_numeric, errors="coerce") - - # print(self.df_table) - - def generate_column_df(self): - """ - Extracts meta data from the excel worksheet using the location mapping - information from the meta_mapping_df - """ - - column_data = [] - for _, row in self.column_mapping_df.iterrows(): - sheet = row["Excel worksheet"] - - if not sheet: - continue - - # get worksheet from mapping - worksheet = self.workbook[sheet] - - # get name and unit from location - cell_location_name = row["Column name cell location"] - cell_location_unit = row["Column unit cell location"] - - col_name = worksheet[cell_location_name].value - - if cell_location_unit == "": - col_unit = "" - else: - col_unit = worksheet[cell_location_unit].value - - col_unit = col_unit.strip("[").strip("]") - col_name = col_name.strip(":").strip("=") - - # auto fill column end - # column names are always letters, row names are always numbers - column_name = row["Column cell location start"].rstrip( - "0123456789" - ) - row_name = int( - row["Column cell location start"].lstrip(column_name) - ) - - # go trough the rows and check when the value is empty to get the - # location end - while True: - cell_name = f"{column_name}{row_name}" - cell = worksheet[cell_name] - - if cell.value == "" or cell.value is None: - row_name -= 1 - col_end_pos = f"{column_name}{row_name}" - break - - row_name += 1 - - # get column start from location - col_start_pos = row["Column cell location start"] - - column_data.append( - { - "index": col_name, - "titles": col_name, - "unit": col_unit, - "start": col_start_pos, - "end": col_end_pos, - "worksheet": sheet, - } - ) - - self.column_df = pd.DataFrame(column_data) - # print(self.column_df) - - # def clean_table_df(self): - # self.df_table = self.df_table.iloc[1:,:] - - def generate_excel_spreadsheet(self, output_path): - with pd.ExcelWriter(output_path, engine="openpyxl") as writer: - self.file_meta_df.to_excel(writer, "file") - self.column_df.to_excel(writer, "column_meta") - self.meta_df.to_excel(writer, "meta") - - def generate_data_storage(self): - # print(self.df_table) - self.df_table.to_hdf( - self.data_storage_path, key=self.data_storage_group_name - ) diff --git a/data2rdf/mapper.py b/data2rdf/mapper.py deleted file mode 100755 index 0867a510..00000000 --- a/data2rdf/mapper.py +++ /dev/null @@ -1,475 +0,0 @@ -import os -from string import Template - -import pandas as pd -from openpyxl.styles import Font -from rdflib import Graph, URIRef -from rdflib.namespace import OWL, RDFS, SKOS - -from data2rdf.annotation_confs import annotations - -# from data2rdf.key_map_prediction import prediction_key_map_based_on_db - - -def merge_same_as_individuals(graph, convert_data_label_to_alt_label=True): - """ - The mapper creates an OWL.sameAs relation between the data individuals and the method individuals. - In some cases it is better to merge the individuals into one. This makes it simpler to navigate the graph. - The merging is done by copying all relation from and to the data individuals onto the representative method individual. - - Explanation: In the mat-o-lab pipeline the data and method individuals are separated, however this makes the generated graph rather difficult to navigate. - - - Example: - Input: - >>> - fileid:column-0 a ns3:DataInstance ; - rdfs:label "Force" ; - ns11:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-0, - fileid:unitliteral-0 ; - owl:sameAs sdi:TimeSeries_X_Individual . - - sdi:TimeSeries_X_Individual a owl:NamedIndividual ; - rdfs:label "TimeSeries_X_Individual" . - <<< - - Output: - >>> - sdi:TimeSeries_X_Individual a ns3:DataInstance, - owl:NamedIndividual ; - rdfs:label "TimeSeries_X_Individual" ; - ns11:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-0, - fileid:unitliteral-0 ; - ns6:altLabel "Force" . - <<< - - Args: - graph (rdflib.Graph): The graph to convert - convert_data_label_to_alt_label (bool): To avoid two RDFS.label for the method individual it is convenient to change the data label to SKOS.altLabel - """ - - for data_individual, p, method_individual in graph.triples( - (None, OWL.sameAs, None) - ): - # transfer all ingoing relations from data to method - for s, p, _o in graph.triples((None, None, data_individual)): - graph.add((s, p, method_individual)) - graph.remove((s, p, data_individual)) - - # transfer all outgoing triples from data to method - for _s, p, o in graph.triples((data_individual, None, None)): - # the data label is used as altLabel for the method individual - if convert_data_label_to_alt_label: - if p == RDFS.label: - p = SKOS.altLabel - - if p != OWL.sameAs: # avoid sameAs pointing to itself - graph.add((method_individual, p, o)) - graph.remove((data_individual, p, o)) - - return graph - - -def assign_namespace(entity, namespace_mapping_dict): - """ - Generates new entity with extended namespace - If no namespace is defeined return the same entity - - Args: - entity (str): prefix:relation - namespace_mapping_dict (str): dict with prefix as key and namespace as value - - Returns: - - new_entity: (str): namespace#relation - - """ - if ":" in entity: - namespace = entity.split(":")[0] - relation = entity.split(":")[1] - new_entity = f"{namespace_mapping_dict[namespace]}{relation}" - return new_entity - else: - return entity - - -def mapping_file2df(mapping_file, worksheet): - """ - Generates a dataframe from the mapping file. - Assigns the prefixes to the relations - - Args: - mapping_file (str): Path to the mapping file (xlsx) - - Returns: - - df: (pd.DataFrame): Dataframe with assigned prefixes - - """ - - df = pd.read_excel( - open(mapping_file, "rb"), sheet_name=worksheet, engine="openpyxl" - ) - - namespace_mapping_df = df.loc[:, ["Prefixes", "Namespaces"]] - namespace_mapping_df = namespace_mapping_df.dropna() - - namespace_mapping_df = namespace_mapping_df.set_index( - "Prefixes", drop=True - ) - namespace_mapping_dict = namespace_mapping_df.to_dict()["Namespaces"] - - mapping_df = df.loc[ - :, ["Data Individual Labels", "Relations", "Method Individual Class"] - ] - mapping_df = mapping_df.dropna() - - mapping_df = mapping_df.applymap( - lambda x: assign_namespace(x, namespace_mapping_dict) - ) - - return mapping_df - - -def map_data2method( - data_graph_file, method_graph_file, mapping_file, worksheet -): - """ - Generates a Dataframe where the individuals of the data graph are mapped to - the individuals of the method graph based on the mapping defined in the mapping file. - The mapping of the data individuals is based on their label or their csvw title relation (rdfs:label|csvw:title). - The mapping of the method graph is based on the class relation (rdf:type). - - Although the terms data graph and method graph are used this function can be - used to match any two graphs with each other. Provided the mapping is given in the mapping_file. - - Note: - 1) A even more generic approach would allow to define the relations used for the mapping. - 2) Since data_graph_file, method_graph_file are only used to fetch the graphs, the mapping could also be adjusted to - work on other sparql endpoints (e.g. for files that are already in a tripplestore) - - Args: - data_graph_file (str): Path to the data graph (ttl) - method_graph_file (str): Path to the method graph (ttl) - mapping_file (str): Path to the mapping file (xlsx) - worksheet (str): the worksheet in the mapping file that should be used for the mapping - - Returns: - - merged_mapping: (pd.DataFrame): Dataframe with mappings. Inner join of all data graph, method graph and mapping. - - """ - - data_graph = Graph() - data_graph.parse(data_graph_file, format="ttl") - - method_graph = Graph() - method_graph.parse(method_graph_file, format="ttl") - - # mapping_df = mapping_file2df(mapping_file, worksheet) - mapping_df = pd.read_excel( - open(mapping_file, "rb"), sheet_name=worksheet, engine="openpyxl" - ) - - mapping_df = mapping_df.astype(str) # merge needs same dtype - - # of the data graph - # from the data we take only meta_data and column_data - data_label_query_template = Template( - """ - PREFIX rdfs: - PREFIX rdf: - PREFIX csvw: - - SELECT distinct ?ind ?label - WHERE { - {?ind rdf:type <$meta>} UNION {?ind rdf:type <$column>} . - ?ind rdfs:label ?label - } - """ - ) - - data_label_query = data_label_query_template.substitute( - column=annotations["column_class"], meta=annotations["meta_data_type"] - ) - - # from the method we take all named individuals - method_label_query = """ - PREFIX rdfs: - PREFIX rdf: - PREFIX csvw: - - SELECT distinct ?ind ?label - WHERE { - ?ind rdf:type . - ?ind rdfs:label ?label . - filter(?ind != ) - } - """ - - # convert method query to df - qres = method_graph.query(method_label_query) - method_ind_df = pd.DataFrame( - qres, columns=["Method Individuals", "Method Label Match"] - ) - - # literals can not be matched using pandas merge - # method_ind_df = method_ind_df.astype(str) - # Pandas version above 1.1.5 doesn't convert literals to string using astype properly - method_ind_df = method_ind_df.applymap(str) - - # convert the data individuals and their labels to df - qres = data_graph.query(data_label_query) - data_ind_df = pd.DataFrame( - qres, columns=["Data Individuals", "Data Label Match"] - ) - - # literals can not be matched using pandas merge - # data_ind_df = data_ind_df.astype(str) - # Pandas version above 1.1.5 doesn't convert literals to string using astype properly - data_ind_df = data_ind_df.applymap(str) - - # use left join (left means the rows of the mapping file are preserved, see SQL join) - # this allows to observe where the mapping is incomplete - - # merge mapping with data individuals - merged_mapping = pd.merge( - mapping_df, data_ind_df, how="left", on=["Data Label Match"] - ) - - # merge mapping with method individuals - merged_mapping = pd.merge( - merged_mapping, method_ind_df, how="left", on=["Method Label Match"] - ) - - return merged_mapping - - -def convert_mapping2graph(merged_mapping, mapping_output_file): - """ - Converts the data frame with mappings to a graph and exports the serialization. - - Args: - merged_mapping: (pd.DataFrame): DataFrame with mappings. Inner join of all data graph, method graph and mapping. - mapping_output_file: (str): Path to the ttl file of the graph - - """ - - # only the rows where the mapping worked are used - merged_mapping_reduced = merged_mapping.dropna() - - # generate mapping graph (data individual -> relation -> method individual) - mapping_graph = Graph() - for _, mapping in merged_mapping_reduced.iterrows(): - mapping_graph.add( - ( - URIRef(mapping["Data Individuals"]), - OWL.sameAs, - URIRef(mapping["Method Individuals"]), - ) - ) - - mapping_graph.serialize(mapping_output_file, format="ttl") - - -def create_mapping_template( - data_graph_file, method_graph_file, mapping_output, worksheet="sameas" -): - data_graph = Graph() - data_graph.parse(data_graph_file, format="ttl") - - method_graph = Graph() - method_graph.parse(method_graph_file, format="ttl") - - # from the data we take only meta_data and column_data - data_label_query_template = Template( - """ - PREFIX rdfs: - PREFIX rdf: - PREFIX csvw: - - SELECT distinct ?label - WHERE { - {?ind rdf:type <$meta>} UNION {?ind rdf:type <$column>} . - ?ind rdfs:label ?label - } - """ - ) - - data_label_query = data_label_query_template.substitute( - column=annotations["column_class"], meta=annotations["meta_data_type"] - ) - - # from the method we take all named individuals - method_class_query = """ - PREFIX rdfs: - PREFIX rdf: - PREFIX csvw: - - SELECT distinct ?label - WHERE { - ?ind rdf:type . - ?ind rdfs:label ?label . - filter(?ind != ) - } - """ - - # convert method query to df - qres = method_graph.query(method_class_query) - method_ind_df = pd.DataFrame(qres, columns=["Method Labels"]) - method_ind_df = method_ind_df.astype(str) - # literals can not be matched using pandas merge - # method_ind_df.sort_values(by = "Method Labels", inplace=True) - # convert the data individuals and their labels to df - qres = data_graph.query(data_label_query) - data_ind_df = pd.DataFrame(qres, columns=["Data Labels"]) - data_ind_df = data_ind_df.astype( - str - ) # literals can not be matched using pandas merge - # data_ind_df.sort_values(by = "Data Labels", inplace=True) - - # merge options and choices - match_table_df = pd.concat([method_ind_df, data_ind_df], axis=1) - match_table_df.columns = ["Method Label Choice", "Data Label Choice"] - # match_table_df.sort_values(by = ["Method Label Choice","Data Label Choice"], inplace=True) - # print(match_table_df) - - for col in match_table_df: - match_table_df[col] = match_table_df[col].sort_values( - ignore_index=True - ) - - with pd.ExcelWriter(mapping_output, engine="openpyxl") as writer: - match_table_df.to_excel(writer, sheet_name=worksheet, index=False) - - sheet = writer.sheets[worksheet] - - # add column header - sheet["D1"] = "Data Label Match" - sheet["D1"].font = Font(bold=True) - sheet["C1"] = "Method Label Match" - sheet["C1"].font = Font(bold=True) - - # end_choice = len(match_table_df.index) + 2 - - for col in "ABCD": - sheet.column_dimensions[col].width = 30 - - -# FOLDER_PATH = os.path.dirname(os.path.abspath(__file__)) -# TT_EXAMPLE_PATH = os.path.join(FOLDER_PATH, "tests/tensile_test_example_excel") - -# FILE_PATH = os.path.join(TT_EXAMPLE_PATH,"AFZ1-Fz-S1Q.xlsm") -# LOCATION_MAPPING_FILE_PATH = -# os.path.join(TT_EXAMPLE_PATH,"location_mapping.xlsx") #the cell -# locations of meta data and column data in the excel file need to be -# supplied - -# OUTPUT_PATH = os.path.join(TT_EXAMPLE_PATH,"AFZ1-Fz-S1Q.generic.xlsx") -# RDF_OUTPUT_PATH = os.path.join(TT_EXAMPLE_PATH,"AFZ1-Fz-S1Q.metadata.ttl") -# JSON_OUTPUT_PATH = os.path.join(TT_EXAMPLE_PATH,"AFZ1-Fz-S1Q.metadata.json") - -# DATA_GRAPH_FILE_PATH_TTL_OUTPUT = os.path.join(TT_EXAMPLE_PATH,"AFZ1-Fz-S1Q.metadata.ttl") -# # FOLDER_PATH = os.path.dirname(os.path.abspath("__file__")) -# # TT_EXAMPLE_PATH = os.path.join(FOLDER_PATH, "tests", "tensile_test_example") -# # DATA_GRAPH_FILE_PATH_TTL_OUTPUT = os.path.join(TT_EXAMPLE_PATH,"DX56_D_FZ2_WR00_43.metadata.ttl") -# METHOD_GRAPH_FILE_PATH_OUTPUT = os.path.join(TT_EXAMPLE_PATH,"tensile_test_method_v6.ttl") - -# MAPPING_FILE_PATH = os.path.join(TT_EXAMPLE_PATH,"AFZ1-Fz-S1Q_mapping_mod.xlsx") - -# create_mapping_template(DATA_GRAPH_FILE_PATH_TTL_OUTPUT, METHOD_GRAPH_FILE_PATH_OUTPUT, MAPPING_FILE_PATH) - - -def report_merge_result(merged_mapping_df): - """ - Report the number of successfully mapped data individuals. - """ - - data_count = merged_mapping_df["Data Label Choice"].dropna().count() - mapping_count = len(merged_mapping_df.dropna()) - - print( - f"Of {data_count} data individuals, {mapping_count} were successfully mapped to the method. See the data.mapping-result.xlsx file for mapping results." - ) - - -class Mapper: - def __init__(self, data_graph_path, method_graph_path, mapping_path): - self.data_graph_path = data_graph_path - self.method_graph_path = method_graph_path - self.mapping_path = mapping_path - - def create_mapping_template(self, worksheet="sameas"): - if os.path.isfile(self.mapping_path): - raise FileExistsError( - "Mapping file exists, use update_mapping_template to update the choices but keep matches" - ) - - create_mapping_template( - self.data_graph_path, - self.method_graph_path, - self.mapping_path, - worksheet, - ) - - def update_mapping_template(self, worksheet="sameas"): - # if the mapping does not exist create it - if not os.path.isfile(self.mapping_path): - self.create_mapping_template() - return True - - mappings_to_keep = pd.read_excel( - self.mapping_path, - sheet_name=worksheet, - engine="openpyxl", - ) - - create_mapping_template( - self.data_graph_path, - self.method_graph_path, - self.mapping_path, - worksheet, - ) - # self.create_mapping_template() - - mappings_to_change = pd.read_excel( - open(self.mapping_path, "rb"), - sheet_name=worksheet, - engine="openpyxl", - ) - - mappings_to_change.loc[ - :, ["Method Label Match", "Data Label Match"] - ] = mappings_to_keep.loc[:, ["Method Label Match", "Data Label Match"]] - - with pd.ExcelWriter(self.mapping_path, engine="openpyxl") as writer: - mappings_to_change.to_excel( - writer, sheet_name=worksheet, index=False - ) - - sheet = writer.sheets[worksheet] - - for col in "ABCD": - sheet.column_dimensions[col].width = 30 - - # def predict_mapping(self, prediction_path, key_map_db, worksheet="sameas"): - # prediction_key_map_based_on_db( - # self.mapping_path, prediction_path, key_map_db, worksheet - # ) - - def map_data_and_abox(self, worksheet="sameas"): - self.merged_mapping_df = map_data2method( - self.data_graph_path, - self.method_graph_path, - self.mapping_path, - worksheet, - ) - report_merge_result(self.merged_mapping_df) - - def export_merged_mapping_table(self, output_file): - self.merged_mapping_df.to_excel( - output_file, sheet_name="data2method-mapping" - ) - - def export_mapping_as_ttl(self, output_file): - convert_mapping2graph(self.merged_mapping_df, output_file) diff --git a/data2rdf/models/__init__.py b/data2rdf/models/__init__.py new file mode 100644 index 00000000..dc112cf8 --- /dev/null +++ b/data2rdf/models/__init__.py @@ -0,0 +1,15 @@ +"""Data2RDF models""" + +from .mapping import ( + BasicConceptMapping, + ClassConceptMapping, + PropertyMapping, + QuantityMapping, +) + +__all__ = [ + "QuantityMapping", + "PropertyMapping", + "ClassConceptMapping", + "BasicConceptMapping", +] diff --git a/data2rdf/models/mapping.py b/data2rdf/models/mapping.py new file mode 100644 index 00000000..af6fdfb5 --- /dev/null +++ b/data2rdf/models/mapping.py @@ -0,0 +1,257 @@ +"""Mapping models for data2rdf""" +import json +import warnings +from abc import abstractmethod +from typing import Any, Dict, Optional, Union + +from pydantic import AnyUrl, BaseModel, Field, ValidationInfo, field_validator +from rdflib import Graph + +from data2rdf.config import Config +from data2rdf.qudt.utils import _get_query_match +from data2rdf.utils import is_float, is_integer, make_prefix + + +class BasicConceptMapping(BaseModel): + """Basic mapping for any entity""" + + key: Optional[str] = Field( + None, description="Key of the concept in the file" + ) + iri: AnyUrl = Field( + ..., description="Ontological class related to this concept" + ) + config: Config = Field( + default_factory=Config, description="Configuration object" + ) + suffix: Optional[str] = Field( + None, + description="""Optional suffix of the individual + which will be constructed. If not set, the suffix of the iri + of the ontological class will be taken""", + validate_default=True, + ) + + @field_validator("suffix") + @classmethod + def validate_suffix( + cls, value: Optional[str], info: ValidationInfo + ) -> str: + """Return suffix for individal""" + iri = info.data["iri"] + config = info.data["config"] + return value or str(iri).split(config.separator)[-1] + + @field_validator("config") + @classmethod + def validate_config(cls, value: Union[Dict[str, Any], Config]) -> Config: + """Validate configuration""" + if isinstance(value, dict): + value = Config(**value) + return value + + +class ClassConceptMapping(BasicConceptMapping): + """Mapping for a concept coming from the mapping file""" + + unit: Optional[Union[str, AnyUrl]] = Field( + None, description="Symbol or QUDT IRI for the mapping" + ) + annotation: Optional[Union[str, AnyUrl]] = Field( + None, description="Base IRI with which the value shall be concatenated" + ) + + @field_validator("annotation", mode="after") + @classmethod + def validate_annotation( + cls, value: Optional[Union[str, AnyUrl]] + ) -> Optional[AnyUrl]: + if not (isinstance(value, str) and len(value) == 0) or isinstance( + value, AnyUrl + ): + return value + + +class ExcelConceptMapping(ClassConceptMapping): + """A special model for mapping from excel files to semantic concepts""" + + value_location: Optional[str] = Field( + None, description="Cell location for the value of the quantity" + ) + unit_location: Optional[str] = Field( + None, description="Cell location for the unit of the quantity" + ) + time_series_start: Optional[str] = Field( + None, + description="Cell location for the start of the time series quantity", + ) + worksheet: Optional[str] = Field( + None, + description="Name of the worksheet where the entity is located in the excel file", + ) + + +class MergedConceptMapping(BasicConceptMapping): + """Model for merged data of mapping and the data file""" + + @property + @abstractmethod + def json_ld(cls) -> Dict[str, Any]: + """Return dict for json-ld of graph""" + + @property + def graph(cls) -> Graph: + """Return graph object based on json-ld""" + graph = Graph(identifier=cls.config.graph_identifier) + graph.parse(data=json.dumps(cls.json_ld), format="json-ld") + return graph + + +class QuantityMapping(MergedConceptMapping): + """Mapping for a quantity without a discrete value. + E.g. a quantity describing a column of a time series or table.""" + + unit: Optional[Union[str, AnyUrl]] = Field( + ..., description="Symbol or QUDT IRI for the mapping" + ) + value: Optional[Union[int, float]] = Field( + None, description="Value of the quantity" + ) + + @field_validator("unit", mode="after") + @classmethod + def validate_unit( + cls, value: Union[str, AnyUrl], info: ValidationInfo + ) -> Optional[AnyUrl]: + config = info.data.get("config") + if isinstance(value, str): + if not (value.startswith("https:") or value.startswith("http:")): + match = _get_query_match(value, config.qudt_units) + if len(match) == 0: + warnings.warn( + f"No QUDT Mapping found for unit with symbol `{value}`." + ) + value = None + elif len(match) > 1: + warnings.warn( + f"Multiple QUDT Mappings found for unit with symbol `{value}`." + ) + value = match.pop() + else: + value = match.pop() + elif isinstance(value, AnyUrl): + value = str(value) + return value + + @property + def json_ld(cls) -> Dict[str, Any]: + """Return dict of json-ld for graph""" + return { + "@context": { + "fileid": make_prefix(cls.config), + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "xsd": "http://www.w3.org/2001/XMLSchema#", + "qudt": "http://qudt.org/schema/qudt/", + }, + "@id": f"fileid:{cls.suffix}", + "@type": str(cls.iri), + **cls.unit_json, + **cls.value_json, + } + + @property + def unit_json(self) -> "Dict[str, Any]": + """Return json with unit definition""" + if self.unit: + value = { + "qudt:hasUnit": {"@value": self.unit, "@type": "xsd:anyURI"} + } + else: + value = {} + return value + + @property + def value_json(self) -> "Dict[str, Any]": + """Return json with value definition""" + if self.value: + if is_float(self.value): + dtype = "xsd:float" + value = float(self.value) + elif is_integer(self.value): + dtype = "xsd:integer" + value = int(self.value) + else: + raise ValueError( + f"""Datatype not recognized for key + `{self.key}` with value: + `{self.value}`""" + ) + value = {"qudt:value": {"@type": dtype, "@value": value}} + else: + value = {} + return value + + +class PropertyMapping(MergedConceptMapping): + """Mapping for a non-quantitative property. E.g. the + name of a tester or a testing facility.""" + + value: Optional[str] = Field( + None, description="Non-quantitative Value of the property" + ) + annotation: Optional[AnyUrl] = Field( + None, description="Base IRI with which the value shall be concatenated" + ) + + @property + def json_ld(cls) -> Dict[str, Any]: + """Return dict of json-ld for graph""" + return { + "@context": { + "fileid": make_prefix(cls.config), + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "xsd": "http://www.w3.org/2001/XMLSchema#", + }, + "@id": f"fileid:{cls.suffix}", + **cls.value_json, + **cls.types_json, + } + + @property + def value_json(cls) -> "Optional[Dict[str, str]]": + if not isinstance(cls.value, type(None)): + response = {"rdfs:label": cls.value} + else: + response = {} + return response + + @property + def types_json(cls) -> "Dict[str, Any]": + """Dict of json-ld for class types of the individual""" + if cls.annotation: + if str(cls.annotation).endswith(cls.config.separator): + annotation = str(cls.annotation) + cls.value + else: + annotation = ( + str(cls.annotation) + cls.config.separator + cls.value + ) + types = { + "@type": [ + str(cls.iri), + annotation, + ] + } + else: + types = {"@type": str(cls.iri)} + return types + + +class JsonConceptMapping(ClassConceptMapping): + """A special model for mapping from json files to semantic concepts""" + + value_location: str = Field( + ..., description="Json path for the value of the quantity or property" + ) + unit_location: Optional[str] = Field( + None, description="Json path to the unit of the property" + ) diff --git a/data2rdf/parser.py b/data2rdf/parser.py deleted file mode 100644 index 273d0faa..00000000 --- a/data2rdf/parser.py +++ /dev/null @@ -1,81 +0,0 @@ -import uuid -from abc import ABC, abstractmethod - -import pandas as pd - - -class DataParser(ABC): - """ - generic parser abstract class with common parser attrubutes and functionalities - Attributes: - f_path (str): The file path for the csv file used as input for the - server_f_path (str): By default the file path for the csv file (f_path) gets used as - dcat:downloadURL attribute for the created dcat:Dataset individual. On a server the actual download url of the file should be used - (e.g. on the DSMS https://127.0.0.1/api/knowledge/data-files/764f6e51-a244-42f9-a754-c3e2861f63e4/raw_data/excel_file.xlsx). - data_storage_path (str): Optional different storagelocation for the hdf5 file holding the data. Default is the same location as the input file. - data_storage_group_name (str): Name of the group in the hdf5 to store the data. Using the data_storage_path and the data_storage_group_name multiple datasets can be stored in the same hdf5 file. - namespace (str): The namespace that will be used by the rdf_generation class to construct the abox individuals. - """ - - def __init__( - self, - f_path, - server_f_path=None, - data_storage_path=None, - data_storage_group_name="df", - namespace="http://www.test.de", - ): - self.f_path = f_path - self.server_f_path = server_f_path if server_f_path else f_path - self.data_storage_path = ( - data_storage_path - if data_storage_path - else f"{f_path}.datastorage.hdf5" - ) - self.data_storage_group_name = data_storage_group_name - self.namespace = namespace - self.id_uuid = str(uuid.uuid4()) - - def generate_file_uuid(self): - self.id_uuid = str(uuid.uuid4()) - - def generate_file_meta_df(self): - self.file_meta_df = pd.DataFrame( - { - "value": [ - self.f_path, - self.server_f_path, - self.namespace, - self.id_uuid, - ] - }, - index=["file_path", "server_file_path", "namespace", "uuid"], - ) - self.file_meta_df.index.name = "index" - - # def generate_file_meta_df(self): - # self.file_meta_df = pd.Series() - # # self.file_meta_df["encoding"] = self.encoding - # # self.file_meta_df["headerRowCount"] = self.header_length - # # self.file_meta_df["delimiter"] = self.column_sep - # # self.file_meta_df["skipRows"] = 1 - # self.file_meta_df["file_path"] = self.f_path - # self.file_meta_df["server_file_path"] = self.server_f_path - # self.file_meta_df["namespace"] = self.namespace - # self.file_meta_df["uuid"] = self.id_uuid - - # self.file_meta_df = pd.DataFrame(self.file_meta_df) - # self.file_meta_df.columns = ["value"] - # self.file_meta_df.index.name = "index" - - @abstractmethod - def load_file(self): - pass - - @abstractmethod - def parse_meta_data(self): - pass - - @abstractmethod - def generate_data_storage(self): - pass diff --git a/data2rdf/parsers/__init__.py b/data2rdf/parsers/__init__.py new file mode 100644 index 00000000..9eb1cb1d --- /dev/null +++ b/data2rdf/parsers/__init__.py @@ -0,0 +1,14 @@ +"""Data2RDF parsers.""" + +from enum import Enum + +from .csv import CSVParser +from .excel import ExcelParser +from .json import JsonParser + +Parser = Enum( + "Parser", + {"csv": CSVParser, "excel": ExcelParser, "json": JsonParser}, +) + +__all__ = ["Parser"] diff --git a/data2rdf/parsers/base.py b/data2rdf/parsers/base.py new file mode 100644 index 00000000..416d6508 --- /dev/null +++ b/data2rdf/parsers/base.py @@ -0,0 +1,103 @@ +"""Data2RDF base model for parsers""" + +import json +from abc import abstractmethod +from typing import TYPE_CHECKING, Any, Dict, Union + +from pydantic import BaseModel, Field, PrivateAttr, field_validator +from rdflib import Graph + +from data2rdf import ClassConceptMapping, Config + +if TYPE_CHECKING: + from typing import List + + import pandas as pd + from pydantic import AnyUrl + + from data2rdf import BasicConceptMapping + + +class DataParser(BaseModel): + """ + generic parser abstract class with common parser attrubutes and functionalities + """ + + raw_data: Union[str, bytes, Dict[str, Any]] = Field( + ..., + description=""" + In case of a csv: `str` with the file path or the content of the file itself. + In case of a json file: `dict` for the content of the file of `str` for the file content or file path. + In case of an excel file: `btyes` for the content or `str` for the file path""", + ) + mapping: Union[str, Dict[str, ClassConceptMapping]] = Field( + ..., + description="""File path to the mapping file to be parsed or + a dictionary with the mapping.""", + ) + config: Config = Field( + default_factory=Config, description="Configuration object" + ) + + dropna: bool = Field( + False, + description="Drop all rows where ONLY NaN and None occur in the time series.", + ) + + _general_metadata: Any = PrivateAttr() + _time_series_metadata: Any = PrivateAttr() + _time_series: Any = PrivateAttr() + + @property + def graph(cls) -> "Graph": + """Return RDF Graph from the parsed data.""" + graph = Graph(identifier=cls.config.graph_identifier) + graph.parse(data=json.dumps(cls.json_ld), format="json-ld") + return graph + + @property + def general_metadata(cls) -> "List[BasicConceptMapping]": + """Return list object with general metadata""" + return cls._general_metadata + + @property + def time_series_metadata(cls) -> "List[BasicConceptMapping]": + """Return list object with general metadata""" + return cls._time_series_metadata + + @property + def time_series(cls) -> "pd.DataFrame": + """Return times series found in the data as pd.DataFrame""" + return cls._time_series + + @property + def plain_metadata(cls) -> "Dict[str, Any]": + """Metadata as flat json - without units and iris. + Useful e.g. for the custom properties of the DSMS.""" + return { + str(metadatum.iri).split(cls.config.separator)[-1]: metadatum.value + for metadatum in cls.general_metadata + } + + @field_validator("config") + @classmethod + def validate_config(cls, value: Union[Dict[str, Any], Config]) -> Config: + """Validate configuration""" + if isinstance(value, dict): + value = Config(**value) + return value + + @classmethod + @abstractmethod + def run_parser(cls, self) -> "DataParser": + """Model validator with mode = 'after' to run the parser.""" + + @property + @abstractmethod + def media_type(cls) -> "Union[str, AnyUrl]": + """IANA Media type definition of the resources to be parsed.""" + + @property + @abstractmethod + def json_ld(cls) -> Dict[str, Any]: + """Return dict for json ld for graph""" diff --git a/data2rdf/parsers/csv.py b/data2rdf/parsers/csv.py new file mode 100644 index 00000000..3c7d0ca7 --- /dev/null +++ b/data2rdf/parsers/csv.py @@ -0,0 +1,331 @@ +"""CSV Parser for data2rdf""" + +import os +import warnings +from io import StringIO +from typing import TYPE_CHECKING, Any, List, Optional, Union +from urllib.parse import urljoin + +import pandas as pd +from pydantic import Field, model_validator + +from data2rdf.models.mapping import ( + ClassConceptMapping, + PropertyMapping, + QuantityMapping, +) +from data2rdf.utils import make_prefix +from data2rdf.warnings import MappingMissmatchWarning, ParserWarning + +from .base import DataParser +from .utils import _strip_unit, load_mapping_file + +if TYPE_CHECKING: + from typing import Dict + + +class CSVParser(DataParser): + """ + Parses the csv file + """ + + metadata_sep: Optional[str] = Field( + None, description="Metadata column separator" + ) + metadata_length: int = Field(..., description="Length of the metadata") + time_series_sep: Optional[str] = Field( + None, description="Column separator of the time series header" + ) + time_series_header_length: int = Field( + 2, description="Length of header of the time series" + ) + drop_na: Optional[bool] = Field( + True, description="Whether NA-values shall be dropped or not" + ) + + @property + def media_type(cls) -> str: + """IANA Media type definition of the resource to be parsed.""" + return "http://www.iana.org/assignments/media-types/text/csv" + + @property + def json_ld(cls) -> "Dict[str, Any]": + """Return dict for json-ld for the graph""" + + tables = [] + + if cls.general_metadata: + meta_table = { + "@type": "csvw:Table", + "rdfs:label": "Metadata", + "csvw:row": [], + } + + for n, mapping in enumerate(cls.general_metadata): + if isinstance(mapping, QuantityMapping): + row = { + "@type": "csvw:Row", + "csvw:titles": { + "@type": "xsd:string", + "@value": mapping.key, + }, + "csvw:rownum": {"@type": "xsd:integer", "@value": n}, + "qudt:quantity": mapping.json_ld, + } + meta_table["csvw:row"].append(row) + elif isinstance(mapping, PropertyMapping): + row = { + "@type": "csvw:Row", + "csvw:titles": { + "@type": "xsd:string", + "@value": mapping.key, + }, + "csvw:rownum": {"@type": "xsd:integer", "@value": n}, + "csvw:describes": mapping.json_ld, + } + meta_table["csvw:row"].append(row) + else: + raise TypeError( + f"Mapping must be of type {QuantityMapping} or {PropertyMapping}, not {type(mapping)}" + ) + tables += [meta_table] + + if cls.time_series_metadata: + column_schema = {"@type": "csvw:Schema", "csvw:column": []} + tables += [ + { + "@type": "csvw:Table", + "rdfs:label": "Time series data", + "csvw:tableSchema": column_schema, + } + ] + for idx, mapping in enumerate(cls.time_series_metadata): + if isinstance(mapping, QuantityMapping): + entity = {"qudt:quantity": mapping.json_ld} + elif isinstance(mapping, PropertyMapping): + entity = {"dcterms:subject": mapping.json_ld} + else: + raise TypeError( + f"Mapping must be of type {QuantityMapping} or {PropertyMapping}, not {type(mapping)}" + ) + + if cls.config.data_download_uri: + download_url = { + "dcterms:identifier": { + "@type": "xsd:anyURI", + "@value": urljoin( + str(cls.config.data_download_uri), + f"column-{idx}", + ), + } + } + else: + download_url = {} + + column = { + "@type": "csvw:Column", + "csvw:titles": { + "@type": "xsd:string", + "@value": mapping.key, + }, + **entity, + "foaf:page": { + "@type": "foaf:Document", + "dcterms:format": { + "@type": "xsd:anyURI", + "@value": "https://www.iana.org/assignments/media-types/application/json", + }, + "dcterms:type": { + "@type": "xsd:anyURI", + "@value": "http://purl.org/dc/terms/Dataset", + }, + **download_url, + }, + } + column_schema["csvw:column"].append(column) + + # flatten list if only one value exists + if len(tables) == 1: + tables = tables.pop() + # make relation to csvw:table property + if tables: + csvw_tables = {"csvw:table": tables} + else: + csvw_tables = {} + + return { + "@context": { + "fileid": make_prefix(cls.config), + "csvw": "http://www.w3.org/ns/csvw#", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "dcat": "http://www.w3.org/ns/dcat#", + "xsd": "http://www.w3.org/2001/XMLSchema#", + "dcterms": "http://purl.org/dc/terms/", + "qudt": "http://qudt.org/schema/qudt/", + "csvw": "http://www.w3.org/ns/csvw#", + "foaf": "http://xmlns.com/foaf/spec/", + }, + "@id": "fileid:tableGroup", + "@type": "csvw:TableGroup", + **csvw_tables, + } + + @model_validator(mode="after") + @classmethod + def run_parser(cls, self: "CSVParser") -> "CSVParser": + """ + Parse metadata, time series metadata and time series + """ + + datafile: StringIO = cls._load_data_file(self) + mapping: "Dict[str, ClassConceptMapping]" = load_mapping_file( + self.mapping, self.config, ClassConceptMapping + ) + time_series: Union[pd.DataFrame, List[None]] = cls._parse_time_series( + self, datafile + ) + if self.drop_na: + time_series.dropna(inplace=True) + datafile.seek(0) + + # iterate over general metadata + header = ["key", "value", "unit"] + self._general_metadata = [] + if self.metadata_length > 0: + if not self.metadata_sep: + raise ValueError( + "`metadata_length` is > 0 but `metadata_sep` is not set" + ) + for l_count, line in enumerate(datafile.readlines()): + # remove unneeded characters + for char in self.config.remove_from_datafile: + line = line.replace(char, "") + + # merge with header keys + row = line.split(self.metadata_sep) + metadatum = dict(zip(header, row)) + + # get the match from the mapping + key = metadatum.get("key") + mapping_match = mapping.get(key) + + # only map the data if a match is found + if mapping_match: + # get unit + unit = mapping_match.unit or metadatum.get("unit") or None + if unit: + unit = _strip_unit(unit, self.config.remove_from_unit) + + # instanciate model + model_data = { + "key": key, + "value": metadatum.get("value"), + "unit": unit, + "iri": mapping_match.iri, + "suffix": mapping_match.suffix, + "annotation": mapping_match.annotation or None, + "config": self.config, + } + if model_data.get("unit"): + model = QuantityMapping(**model_data) + else: + model = PropertyMapping(**model_data) + self._general_metadata.append(model) + else: + warnings.warn( + f"No match found in mapping for key `{key}`", + MappingMissmatchWarning, + ) + + if l_count == self.metadata_length - 1: + break + + # parse time series data and meta data + self._time_series_metadata = [] + self._time_series = {} + + for key in time_series: + # get matching mapping + mapping_match = mapping.get(key) + + if mapping_match: + # get unit + unit = ( + mapping_match.unit + or ( + time_series[key].iloc[0] + if self.time_series_header_length == 2 + else None + ) + or None + ) + + if unit: + unit = _strip_unit(unit, self.config.remove_from_unit) + + # assign model + model = QuantityMapping( + key=key, + unit=unit, + iri=mapping_match.iri, + suffix=mapping_match.suffix, + annotation=mapping_match.annotation or None, + config=self.config, + ) + + # append model + self.time_series_metadata.append(model) + + # assign time series data + self._time_series[model.suffix] = time_series[key][ + self.time_series_header_length - 1 : + ].to_list() + + else: + warnings.warn( + f"No match found in mapping for key `{key}`", + MappingMissmatchWarning, + ) + # set time series as pd dataframe + self._time_series = pd.DataFrame.from_dict( + self._time_series, orient="index" + ).transpose() + # check if drop na: + if self.dropna: + self._time_series.dropna(how="all", inplace=True) + return self + + @classmethod + def _load_data_file(cls, self: "DataParser") -> StringIO: + if isinstance(self.raw_data, str): + if os.path.isfile(self.raw_data): + with open( + self.raw_data, encoding=self.config.encoding + ) as file: + content = StringIO(file.read()) + else: + content = StringIO(self.raw_data) + else: + raise TypeError( + f"`raw_data` must be of type `str`, not `{type(self.raw_data)}`" + ) + return content + + @classmethod + def _parse_time_series( + cls, self: "CSVParser", datafile: "StringIO" + ) -> Union[pd.DataFrame, List[None]]: + if self.time_series_sep: + response = pd.read_csv( + datafile, + encoding=self.config.encoding, + sep=self.time_series_sep, + skiprows=self.metadata_length, + ) + else: + warnings.warn( + "`time_series_sep` is not set. Any potential time series in the data file will be skipped.", + ParserWarning, + ) + response = [] + return response diff --git a/data2rdf/parsers/excel.py b/data2rdf/parsers/excel.py new file mode 100644 index 00000000..9aed6f0d --- /dev/null +++ b/data2rdf/parsers/excel.py @@ -0,0 +1,301 @@ +"""Data2rdf excel parser""" + +import warnings +from io import BytesIO +from typing import Any, Dict, Union +from urllib.parse import urljoin + +import pandas as pd +from openpyxl import load_workbook +from pydantic import Field, model_validator + +from data2rdf.models.mapping import ( + ExcelConceptMapping, + PropertyMapping, + QuantityMapping, +) +from data2rdf.utils import make_prefix +from data2rdf.warnings import MappingMissmatchWarning + +from .base import DataParser +from .utils import _strip_unit, load_mapping_file + + +class ExcelParser(DataParser): + """ + Parses a data file of type excel + """ + + unit_from_macro: bool = Field( + True, + description="When disabled, units coming from excel macros are neglected.", + ) + + unit_macro_location: int = Field( + -1, + description="Index where the marco for the unit in an excel cell might be located.", + ) + + # OVERRIDE + mapping: Union[str, Dict[str, ExcelConceptMapping]] = Field( + ..., + description="""File path to the mapping file to be parsed or + a dictionary with the mapping.""", + ) + + @property + def media_type(cls) -> str: + """IANA Media type definition of the resource to be parsed.""" + return "https://www.iana.org/assignments/media-types/application/vnd.ms-excel" + + @property + def json_ld(cls) -> Dict[str, Any]: + """Return dict for json-ld for the graph""" + + tables = [] + + if cls.general_metadata: + meta_table = { + "@type": "csvw:Table", + "rdfs:label": "Metadata", + "csvw:row": [], + } + + for mapping in cls.general_metadata: + if isinstance(mapping, QuantityMapping): + row = { + "@type": "csvw:Row", + "csvw:titles": { + "@type": "xsd:string", + "@value": mapping.key, + }, + "qudt:quantity": mapping.json_ld, + } + meta_table["csvw:row"].append(row) + elif isinstance(mapping, PropertyMapping): + row = { + "@type": "csvw:Row", + "csvw:titles": { + "@type": "xsd:string", + "@value": mapping.key, + }, + "csvw:describes": mapping.json_ld, + } + meta_table["csvw:row"].append(row) + else: + raise TypeError( + f"Mapping must be of type {QuantityMapping} or {PropertyMapping}, not {type(mapping)}" + ) + tables += [meta_table] + + if cls.time_series_metadata: + column_schema = {"@type": "csvw:Schema", "csvw:column": []} + tables += [ + { + "@type": "csvw:Table", + "rdfs:label": "Time series data", + "csvw:tableSchema": column_schema, + } + ] + for idx, mapping in enumerate(cls.time_series_metadata): + if isinstance(mapping, QuantityMapping): + entity = {"qudt:quantity": mapping.json_ld} + elif isinstance(mapping, PropertyMapping): + entity = {"dcterms:subject": mapping.json_ld} + else: + raise TypeError( + f"Mapping must be of type {QuantityMapping} or {PropertyMapping}, not {type(mapping)}" + ) + + if cls.config.data_download_uri: + download_url = { + "dcterms:identifier": { + "@type": "xsd:anyURI", + "@value": urljoin( + str(cls.config.data_download_uri), + f"column-{idx}", + ), + } + } + else: + download_url = {} + + column = { + "@type": "csvw:Column", + "csvw:titles": { + "@type": "xsd:string", + "@value": mapping.key, + }, + **entity, + "foaf:page": { + "@type": "foaf:Document", + "dcterms:format": { + "@type": "xsd:anyURI", + "@value": "https://www.iana.org/assignments/media-types/application/json", + }, + "dcterms:type": { + "@type": "xsd:anyURI", + "@value": "http://purl.org/dc/terms/Dataset", + }, + **download_url, + }, + } + column_schema["csvw:column"].append(column) + + # flatten list if only one value exists + if len(tables) == 1: + tables = tables.pop() + # make relation to csvw:table property + if tables: + csvw_tables = {"csvw:table": tables} + else: + csvw_tables = {} + + return { + "@context": { + "fileid": make_prefix(cls.config), + "csvw": "http://www.w3.org/ns/csvw#", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "dcat": "http://www.w3.org/ns/dcat#", + "xsd": "http://www.w3.org/2001/XMLSchema#", + "dcterms": "http://purl.org/dc/terms/", + "qudt": "http://qudt.org/schema/qudt/", + "csvw": "http://www.w3.org/ns/csvw#", + "foaf": "http://xmlns.com/foaf/spec/", + }, + "@id": "fileid:tableGroup", + "@type": "csvw:TableGroup", + **csvw_tables, + } + + @model_validator(mode="after") + @classmethod + def run_parser(cls, self: "ExcelParser") -> "ExcelParser": + """ + Parse metadata, time series metadata and time series + """ + + io: BytesIO = cls._load_data_file(self) + + datafile = load_workbook(filename=io, data_only=True) + io.seek(0) + macros = load_workbook(filename=io) + mapping: "Dict[str, ExcelConceptMapping]" = load_mapping_file( + self.mapping, self.config, ExcelConceptMapping + ) + + self._general_metadata = [] + self._time_series_metadata = [] + self._time_series = {} + for key, datum in mapping.items(): + worksheet = datafile[datum.worksheet] + + if datum.value_location and datum.time_series_start: + raise RuntimeError( + """Both, `value_location` and `time_series_start + are set. Only one of them must be set.""" + ) + + # find data for time series + if datum.time_series_start: + column_name = datum.time_series_start.rstrip("0123456789") + time_series_end = f"{column_name}{worksheet.max_row}" + + column = worksheet[datum.time_series_start : time_series_end] + if column: + self._time_series[datum.suffix] = [ + cell[0].value for cell in column + ] + else: + message = f"""Concept with key `{key}` + does not have a time series from `{datum.time_series_start}` + until `{time_series_end}` . + Concept will be omitted in graph. + """ + warnings.warn(message, MappingMissmatchWarning) + + # check if there is a macro for the unit of the entity + if self.unit_from_macro and datum.value_location: + macro_worksheet = macros[datum.worksheet] + macro_value_cell = macro_worksheet[ + datum.value_location + ].number_format.split() + if len(macro_value_cell) != 1: + macro_unit = macro_value_cell[self.unit_macro_location] + else: + macro_unit = None + else: + macro_unit = None + + # check if there is a unit somewhere in the sheet + if datum.unit_location: + unit_location = worksheet[datum.unit_location].value + if not unit_location: + message = f"""Concept with key `{key}` + does not have a unit at location `{datum.unit_location}`. + This mapping for the unit will be omitted in graph. + """ + warnings.warn(message, MappingMissmatchWarning) + else: + unit_location = None + + # decide which unit to take + unit = datum.unit or unit_location or macro_unit + if unit: + unit = _strip_unit(unit, self.config.remove_from_unit) + + # make model + model_data = { + "key": datum.key, + "unit": unit, + "iri": datum.iri, + "suffix": datum.suffix, + "annotation": datum.annotation, + "config": self.config, + } + + if datum.value_location and not datum.time_series_start: + value = worksheet[datum.value_location].value + if model_data.get("unit") and value: + model_data["value"] = value + elif not model_data.get("unit") and value: + model_data["value"] = str(value) + else: + message = f"""Concept with key `{key}` + does not have a value at location `{datum.value_location}`. + Concept will be omitted in graph. + """ + warnings.warn(message, MappingMissmatchWarning) + + if model_data.get("value") or datum.suffix in self.time_series: + if model_data.get("unit"): + model = QuantityMapping(**model_data) + else: + model = PropertyMapping(**model_data) + + if model_data.get("value"): + self._general_metadata.append(model) + else: + self._time_series_metadata.append(model) + + # set time series as pd dataframe + self._time_series = pd.DataFrame.from_dict( + self._time_series, orient="index" + ).transpose() + # check if drop na: + if self.dropna: + self._time_series.dropna(how="all", inplace=True) + return self + + @classmethod + def _load_data_file(cls, self: "DataParser") -> BytesIO: + if isinstance(self.raw_data, str): + with open(self.raw_data, mode="rb") as file: + content = BytesIO(file.read()) + elif isinstance(self.raw_data, bytes): + content = BytesIO(self.raw_data) + else: + raise TypeError( + f"`raw_data` must be of type `str` or `btyes`, not `{type(self.raw_data)}`" + ) + return content diff --git a/data2rdf/parsers/json.py b/data2rdf/parsers/json.py new file mode 100644 index 00000000..d8f7fdef --- /dev/null +++ b/data2rdf/parsers/json.py @@ -0,0 +1,262 @@ +"""Data2rdf excel parser""" + +import json +import os +import warnings +from typing import Any, Dict, Union +from urllib.parse import urljoin + +import pandas as pd +from jsonpath_ng import parse +from pydantic import Field, model_validator + +from data2rdf.utils import make_prefix +from data2rdf.warnings import MappingMissmatchWarning + +from .base import DataParser +from .utils import _strip_unit, load_mapping_file + +from data2rdf.models.mapping import ( # isort: skip + JsonConceptMapping, + PropertyMapping, + QuantityMapping, +) + + +class JsonParser(DataParser): + """ + Parses a data file of type json + """ + + # OVERRIDE + mapping: Union[str, Dict[str, JsonConceptMapping]] = Field( + ..., + description="""File path to the mapping file to be parsed or + a dictionary with the mapping.""", + ) + + @property + def media_type(cls) -> str: + """IANA Media type definition of the resource to be parsed.""" + return "https://www.iana.org/assignments/media-types/application/json" + + @property + def json_ld(cls) -> Dict[str, Any]: + members = [] + + triples = { + "@context": { + "fileid": make_prefix(cls.config), + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "xsd": "http://www.w3.org/2001/XMLSchema#", + "dcterms": "http://purl.org/dc/terms/", + "qudt": "http://qudt.org/schema/qudt/", + "foaf": "http://xmlns.com/foaf/spec/", + "prov": "", + }, + "@id": "fileid:Dictionary", + "@type": "prov:Dictionary", + "prov:hadDictionaryMember": members, + } + + for mapping in cls.general_metadata: + if isinstance(mapping, QuantityMapping): + entity = { + "@type": "prov:KeyEntityPair", + "prov:pairKey": { + "@type": "xsd:string", + "@value": mapping.key, + }, + "prov:pairEntity": { + "@type": "prov:Entity", + "qudt:quantity": mapping.json_ld, + }, + } + members.append(entity) + elif isinstance(mapping, PropertyMapping): + entity = { + "@type": "prov:KeyEntityPair", + "prov:pairKey": { + "@type": "xsd:string", + "@value": mapping.key, + }, + "prov:pairEntity": { + "@type": "prov:Entity", + "dcterms:hasPart": mapping.json_ld, + }, + } + members.append(entity) + else: + raise TypeError( + f"Mapping must be of type {QuantityMapping} or {PropertyMapping}, not {type(mapping)}" + ) + + for idx, mapping in enumerate(cls.time_series_metadata): + if not isinstance(mapping, QuantityMapping): + raise TypeError( + f"Mapping must be of type {QuantityMapping}, not {type(mapping)}" + ) + + if cls.config.data_download_uri: + download_url = { + "dcterms:identifier": { + "@type": "xsd:anyURI", + "@value": urljoin( + str(cls.config.data_download_uri), f"column-{idx}" + ), + } + } + else: + download_url = {} + + entity = { + "@type": "prov:KeyEntityPair", + "prov:pairKey": { + "@type": "xsd:string", + "@value": mapping.key, + }, + "prov:pairEntity": { + "@type": "prov:Entity", + "qudt:quantity": mapping.json_ld, + "foaf:page": { + "@type": "foaf:Document", + "dcterms:format": { + "@type": "xsd:anyURI", + "@value": "https://www.iana.org/assignments/media-types/application/json", + }, + "dcterms:type": { + "@type": "xsd:anyURI", + "@value": "http://purl.org/dc/terms/Dataset", + }, + **download_url, + }, + }, + } + members.append(entity) + + return triples + + @model_validator(mode="after") + @classmethod + def run_parser(cls, self: "JsonParser") -> "JsonParser": + """ + Parse metadata, time series metadata and time series + """ + + datafile: "Dict[str, Any]" = cls._parse_data(self) + mapping: "Dict[str, JsonConceptMapping]" = load_mapping_file( + self.mapping, self.config, JsonConceptMapping + ) + + self._general_metadata = [] + self._time_series_metadata = [] + self._time_series = {} + numericals = (int, str, float, bool) + for key, datum in mapping.items(): + value_expression = parse(datum.value_location) + + results = [ + match.value for match in value_expression.find(datafile) + ] + + if len(results) == 0: + value = None + message = f"""Concept with key `{key}` + does not have a value at location `{datum.value_location}`. + Concept will be omitted in graph. + """ + warnings.warn(message, MappingMissmatchWarning) + elif len(results) == 1: + value = results.pop() + else: + value = results + + if value: + # check if there is a unit somewhere in the sheet + if datum.unit_location: + unit_expression = parse(datum.unit_location) + + results = [ + match.value for match in unit_expression.find(datafile) + ] + + if len(results) == 0: + unit = None + message = f"""Concept with key `{key}` + does not have a unit at location `{datum.unit_location}`. + Concept will be omitted in graph.""" + warnings.warn(message, MappingMissmatchWarning) + elif len(results) == 1: + unit = results.pop() + else: + unit = None + message = f"""Concept with key `{key}` + has multiple units at location `{datum.unit_location}`. + Concept will be omitted in graph.""" + warnings.warn(message, MappingMissmatchWarning) + + else: + unit = None + + # decide which unit to take + unit = datum.unit or unit + if unit: + unit = _strip_unit(unit, self.config.remove_from_unit) + + # make model + model_data = { + "key": datum.key, + "iri": datum.iri, + "suffix": datum.suffix, + "annotation": datum.annotation, + "config": self.config, + } + if not isinstance(value, numericals) and unit: + model_data["unit"] = unit + model = QuantityMapping(**model_data) + + self._time_series[datum.suffix] = value + self._time_series_metadata.append(model) + if not isinstance(value, numericals) and not unit: + message = f"""Series with with key `{key}` + must be a quantity does not have a unit. + Concept will be omitted in graph.""" + warnings.warn(message, MappingMissmatchWarning) + elif isinstance(value, numericals) and unit: + model_data["value"] = value + model_data["unit"] = unit + model = QuantityMapping(**model_data) + + self._general_metadata.append(model) + elif isinstance(value, numericals) and not unit: + model_data["value"] = str(value) + model = PropertyMapping(**model_data) + + self._general_metadata.append(model) + # set time series as pd dataframe + self._time_series = pd.DataFrame.from_dict( + self._time_series, orient="index" + ).transpose() + # check if drop na: + if self.dropna: + self._time_series.dropna(how="all", inplace=True) + return self + + @classmethod + def _parse_data(cls, self: "JsonParser") -> "Dict[str, Any]": + if isinstance(self.raw_data, str): + if os.path.isfile(self.raw_data): + with open( + self.raw_data, encoding=self.config.encoding + ) as file: + content = json.load(file) + else: + content = json.loads(self.raw_data) + + if isinstance(self.raw_data, dict): + content = self.raw_data + if not isinstance(self.raw_data, (str, dict)): + raise TypeError( + "Raw data must be of type `str` for a file path or a `dict` for a parsed json." + ) + return content diff --git a/data2rdf/parsers/utils.py b/data2rdf/parsers/utils.py new file mode 100644 index 00000000..b01f5e2f --- /dev/null +++ b/data2rdf/parsers/utils.py @@ -0,0 +1,84 @@ +"""Data2RDF parser utilities""" + +import json +from typing import TYPE_CHECKING + +import pandas as pd + +from data2rdf import Config + +if TYPE_CHECKING: + from typing import Any, Dict, List, Union + + +def load_mapping_file( + mapping: "Union[str, Dict[str, Any]]", + config: "Config" = Config(), + model_callable: "Any" = dict, +) -> "Dict[str, Any]": + """ + Load a mapping file and transform its contents into a dictionary format. + + Parameters: + mapping (Union[str, Dict[str, Any]]): Path to the mapping file (either a string representing the file path or a dictionary containing the mapping directly). + config (Config, optional): Configuration settings for loading the file. Defaults to Config(). + model_callable (Any, optional): Callable object used to transform each row of the mapping file into the desired format. Defaults to dict. + + Returns: + Dict[str, Any]: A dictionary containing the loaded mapping data. + + Raises: + TypeError: If the `mapping` parameter is not of type `str` or `dict`, or if the file type for mapping is not supported. + + Note: + - For Excel files (.xlsx), the 'sameas' sheet is read from the Excel file. + The contents are then transformed into a dictionary where each row corresponds to a key-value pair. + - For CSV files (.csv) please take care of the correct separator to be set in the config under `mapping_csv_separator`. + - For JSON files (.json), the entire file is loaded as a dictionary. + - If `mapping` is already a dictionary, it is returned as is. + + """ + if not isinstance(mapping, (str, dict)): + raise TypeError( + f"""Mapping file must be of type `{str}` or `{dict}`, + not `{type(mapping)}`.""" + ) + if isinstance(mapping, str): + if mapping.endswith("xlsx"): + mapping_df = pd.read_excel( + mapping, + sheet_name="sameas", + engine="openpyxl", + ) + mapping_df.fillna("", inplace=True) + mapping_df = mapping_df.apply(lambda s: s.str.replace('"', "")) + model = { + row["key"]: row.to_dict() for n, row in mapping_df.iterrows() + } + elif mapping.endswith("json"): + with open(mapping, encoding=config.encoding) as file: + model = json.load(file) + elif mapping.endswith("csv"): + mapping_df = pd.read_csv( + mapping, + sep=config.mapping_csv_separator, + encoding=config.encoding, + ) + mapping_df.fillna("", inplace=True) + mapping_df = mapping_df.apply(lambda s: s.str.replace('"', "")) + model = { + row["key"]: row.to_dict() for n, row in mapping_df.iterrows() + } + else: + raise TypeError("File type for mapping not supported!") + + result = {key: model_callable(**row) for key, row in model.items()} + if isinstance(mapping, dict): + result = mapping + return result + + +def _strip_unit(symbol: str, char_list: "List[str]") -> str: + for char in char_list: + symbol = symbol.strip(char) + return symbol diff --git a/data2rdf/pipeline_logging.py b/data2rdf/pipeline_logging.py deleted file mode 100755 index 6eac694d..00000000 --- a/data2rdf/pipeline_logging.py +++ /dev/null @@ -1,10 +0,0 @@ -import logging - - -def set_global_logger(path): - logging.basicConfig( - filename=path, - filemode="w+", - level=logging.DEBUG, - format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", - ) diff --git a/data2rdf/pipelines/__init__.py b/data2rdf/pipelines/__init__.py new file mode 100644 index 00000000..f7a6e50a --- /dev/null +++ b/data2rdf/pipelines/__init__.py @@ -0,0 +1,5 @@ +"""Data2rdf pipelines""" + +from .annotation_pipeline import AnnotationPipeline + +__all__ = ["AnnotationPipeline", "ABoxScaffoldPipeline"] diff --git a/data2rdf/pipelines/annotation_pipeline.py b/data2rdf/pipelines/annotation_pipeline.py new file mode 100755 index 00000000..e6aabe33 --- /dev/null +++ b/data2rdf/pipelines/annotation_pipeline.py @@ -0,0 +1,194 @@ +"""Main data2rdf Annotation pipeline""" + +import json +from typing import TYPE_CHECKING, Any, Dict, Optional, Union + +from pydantic import ( + BaseModel, + ConfigDict, + Field, + ValidationInfo, + field_validator, + model_validator, +) +from rdflib import Graph + +from data2rdf.config import Config +from data2rdf.parsers import Parser +from data2rdf.utils import make_prefix + +if TYPE_CHECKING: + from typing import List + + from data2rdf import BasicConceptMapping + + +class AnnotationPipeline(BaseModel): + + """ + Runs the complete data2rdf pipeline. + + Parameters: + - raw_data (Union[str, bytes, Dict[str, Any]]): + In case of a csv: `str` with the file path or the content of the file itself. + In case of a json file: `dict` for the content of the file of `str` for the file content or file path. + In case of an excel file: `btyes` for the content or `str` for the file path + - mapping (Union[str, Dict[str, Any]]): File path to the mapping file to be parsed or a dictionary with the mapping. + - parser (Parser): Parser to be used depending on the type of raw data file. + - parser_args (Dict[str, Any]): A dictionary with specific arguments for the parser. These are passed to the parser + as keyword arguments. + - config (Union[Dict[str, Any], Config]): Configuration object. Defaults to a new instance of Config. + - extra_triples (Optional[Union[str, Graph]]): File path or rdflib-object for a Graph with extra triples for the + resulting pipeline graph. + """ + + raw_data: Union[str, bytes, Dict[str, Any]] = Field( + ..., + description=""" + In case of a csv: `str` with the file path or the content of the file itself. + In case of a json file: `dict` for the content of the file of `str` for the file content or file path. + In case of an excel file: `btyes` for the content or `str` for the file path""", + ) + mapping: Union[str, Dict[str, Any]] = Field( + ..., + description="""File path to the mapping file to be parsed or + a dictionary with the mapping.""", + ) + + parser: Parser = Field( + ..., + description="Parser to be used depending on the type of raw data file. ", + ) + + parser_args: Dict[str, Any] = Field( + {}, + description="A dict with specific arguments for the parser. Is passed to the parser as kwargs.", + ) + + config: Union[Dict[str, Any], Config] = Field( + default_factory=Config, description="Configuration object" + ) + + extra_triples: Optional[Union[str, Graph]] = Field( + None, + description="Filepath or rdflib-object for a Graph with extra triples for the resulting pipeline graph.", + ) + + model_config = ConfigDict( + arbitrary_types_allowed=True, use_enum_values=True + ) + + @field_validator("config") + @classmethod + def validate_config(cls, value: Union[Dict[str, Any], Config]) -> Config: + """Validate configuration""" + if isinstance(value, dict): + value = Config(**value) + return value + + @field_validator("extra_triples") + @classmethod + def validate_extra_triples( + cls, value: Optional[Union[str, Graph]], info: ValidationInfo + ) -> Graph: + """Validate extra triples.""" + config = info.data.get("config") + if isinstance(value, str): + with open(value, encoding=config.encoding) as file: + extra_triples = file.read() + elif isinstance(value, Graph): + extra_triples = value.serialize() + elif isinstance(value, type(None)): + extra_triples = None + else: + raise TypeError( + f"`extra_triples` must be of type {str}, {Graph} or {type(None)}, not {type(value)}." + ) + if extra_triples: + extra_triples = extra_triples.replace( + config.namespace_placeholder, str(config.base_iri) + ) + graph = Graph(identifier=config.graph_identifier) + graph.parse(data=extra_triples) + return value + + @model_validator(mode="after") + @classmethod + def run_pipeline(cls, self: "AnnotationPipeline") -> "AnnotationPipeline": + """Run pipeline.""" + self.parser = self.parser( + raw_data=self.raw_data, + mapping=self.mapping, + config=self.config, + **self.parser_args, + ) + + return self + + @property + def json_ld(cls) -> Dict[str, Any]: + """Return dict of json-ld for graph""" + return { + "@context": { + "fileid": make_prefix(cls.config), + "csvw": "http://www.w3.org/ns/csvw#", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "dcat": "http://www.w3.org/ns/dcat#", + "xsd": "http://www.w3.org/2001/XMLSchema#", + "dcterms": "http://purl.org/dc/terms/", + "qudt": "http://qudt.org/schema/qudt/", + "csvw": "http://www.w3.org/ns/csvw#", + "foaf": "http://xmlns.com/foaf/spec/", + }, + "@id": "fileid:dataset", + "@type": "dcat:Dataset", + "dcat:distribution": { + "@type": "dcat:Distribution", + "dcat:mediaType": { + "@type": "xsd:anyURI", + "@value": cls.parser.media_type, + }, + "dcat:accessURL": { + "@type": "xsd:anyURI", + "@value": str(cls.config.data_download_uri), + }, + }, + "dcterms:hasPart": cls.parser.json_ld, + } + + @property + def graph(cls) -> Graph: + """Return graph object""" + graph = Graph(identifier=cls.config.graph_identifier) + graph.parse(data=json.dumps(cls.json_ld), format="json-ld") + if cls.extra_triples: + with open(cls.extra_triples, encoding=cls.config.encoding) as file: + content = file.read() + data = content.replace( + str(cls.config.namespace_placeholder), make_prefix(cls.config) + ) + extra_triples = Graph(identifier=cls.config.graph_identifier) + extra_triples.parse(data=data) + graph += extra_triples + return graph + + @property + def plain_metadata(cls) -> Dict[str, Any]: + """Metadata as flat json - without units and iris. + Useful e.g. for the custom properties of the DSMS.""" + return cls.parser.plain_metadata + + @property + def general_metadata(cls) -> "List[BasicConceptMapping]": + """Return list object with general metadata""" + return cls.parser.general_metadata + + @property + def time_series_metadata(cls) -> "List[BasicConceptMapping]": + """Return list object with general metadata""" + return cls.parser.time_series_metadata + + @property + def time_series(cls) -> "List[BasicConceptMapping]": + """Return list object with general metadata""" + return cls.parser.time_series diff --git a/data2rdf/cli/__init__.py b/data2rdf/qudt/__init__.py old mode 100755 new mode 100644 similarity index 100% rename from data2rdf/cli/__init__.py rename to data2rdf/qudt/__init__.py diff --git a/data2rdf/qudt/utils.py b/data2rdf/qudt/utils.py new file mode 100644 index 00000000..c2ede851 --- /dev/null +++ b/data2rdf/qudt/utils.py @@ -0,0 +1,84 @@ +"""Data2RDF utils""" +import tempfile +import warnings +from functools import lru_cache +from typing import List, Optional + +import requests +from rdflib import Graph + + +def _qudt_sparql(symbol: str) -> str: + return f"""PREFIX qudt: + SELECT DISTINCT ?unit + WHERE {{ + ?unit a qudt:Unit . + {{ + ?unit qudt:symbol "{symbol}" . + }} + UNION + {{ + ?unit qudt:ucumCode "{symbol}"^^qudt:UCUMcs . + }} + }}""" + + +@lru_cache +def _get_qudt_ontology(qudt_iri: str) -> requests.Response: + response = requests.get(qudt_iri) + if response.status_code != 200: + raise RuntimeError( + f"Could not download QUDT ontology. Please check URI: {qudt_iri}" + ) + response.encoding = "utf-8" + return response + + +def _to_tempfile(content) -> str: + with tempfile.NamedTemporaryFile( + mode="w", suffix=".ttl", delete=False, encoding="utf-8" + ) as tmp: + tmp.write(content) + return tmp.name + + +@lru_cache +def _get_qudt_graph(qudt_iri: str) -> Graph: + response = _get_qudt_ontology(qudt_iri) + file = _to_tempfile(response.text) + + graph = Graph() + graph.parse(file, encoding="utf-8") + return graph + + +def _get_query_match(symbol: str, qudt_iri: str) -> List[str]: + graph = _get_qudt_graph(qudt_iri) + query = _qudt_sparql(symbol) + return [str(row["unit"]) for row in graph.query(query)] + + +def _check_qudt_mapping(symbol: Optional[str]) -> Optional[str]: + if symbol: + match = _get_query_match(symbol) + if len(match) == 0: + warnings.warn( + f"No QUDT Mapping found for unit with symbol `{symbol}`." + ) + unit = {} + elif len(match) > 1: + warnings.warn( + f"Multiple QUDT Mappings found for unit with symbol `{symbol}`." + ) + unit = { + "qudt:hasUnit": [ + {"@value": uri, "@type": "xsd:anyURI"} for uri in match + ] + } + else: + unit = { + "qudt:hasUnit": {"@value": match.pop(), "@type": "xsd:anyURI"} + } + else: + unit = {} + return unit diff --git a/data2rdf/rdf_generation.py b/data2rdf/rdf_generation.py deleted file mode 100755 index 0c98036d..00000000 --- a/data2rdf/rdf_generation.py +++ /dev/null @@ -1,204 +0,0 @@ -import json - -import pandas as pd -from rdflib import Graph - -from data2rdf.annotation_confs import annotations -from data2rdf.emmo_lib import emmo_utils - - -class RDFGenerator: - - """ - Transforms the generic excel sheet to RDF - """ - - def __init__(self, f_path, only_use_base_iri, data_download_iri): - self.file_meta_df = pd.read_excel( - f_path, sheet_name="file", engine="openpyxl" - ) - - self.file_meta_df.set_index("index", inplace=True) - self.column_meta = pd.read_excel( - f_path, sheet_name="column_meta", engine="openpyxl" - ) - # self.column_meta.set_index("index", inplace = True) - self.meta = pd.read_excel(f_path, sheet_name="meta", engine="openpyxl") - - self.meta["value"] = self.meta["value"].astype( - str - ) # solves bug, when datetime is not rendered as string - self.column_meta["unit"] = self.column_meta["unit"].fillna( - "" - ) # nan triggers error for simple_unit_lookup - - self.json = {} - - self.only_use_base_iri = only_use_base_iri - self.data_download_iri = data_download_iri - - def generate_file_json(self): - """ - Generates the basic json-ld data model schema - """ - - # schema - self.json["@context"] = { - "csvw": "http://www.w3.org/ns/csvw#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "dcat": "http://www.w3.org/ns/dcat#", - "xsd": "http://www.w3.org/2001/XMLSchema#", - } - - if self.only_use_base_iri: - file_uri = self.file_meta_df.loc["namespace", "value"] + "/" - else: - file_uri = ( - "/".join( - [ - self.file_meta_df.loc["namespace", "value"], - self.file_meta_df.loc["uuid", "value"], - ] - ) - + "#" - ) - self.json["@context"]["fileid"] = file_uri - - # #add dcat file description - self.json["@id"] = "fileid:dataset" - self.json["@type"] = "dcat:Dataset" - - self.json["dcat:downloadURL"] = self.file_meta_df.loc[ - "server_file_path", "value" - ] - - return file_uri # return file uri to be used for the abox template - - def generate_meta_json(self): - # all meta data is stored using the notes relation of the file - self.json[annotations["hasMetaData"]] = [] - - ############################## - # add description meta data to the json - ############################## - - meta_quantity_df = self.meta.loc[~(self.meta["unit"].isna()), :] - meta_description_df = self.meta.loc[(self.meta["unit"].isna()), :] - - for idx, meta_desc in meta_description_df.iterrows(): - row_id = meta_desc[ - "index" - ] # idx for increasing id of individuals, row_id for labels - - self.json[annotations["hasMetaData"]].append( - { - "@id": f"fileid:metadata-{idx}", - "rdfs:label": row_id, - "@type": annotations["meta_data_type"], - annotations["meta_data_value_annotation"]: { - # all meta data as string - "@value": meta_desc["value"], - "@type": "xsd:string", - }, - } - ) - - ############################## - # add quantity meta data to the json - ############################## - for idx, meta_desc in meta_quantity_df.iterrows(): - row_id = meta_desc[ - "index" - ] # idx for increasing id of individuals, row_id for labels - - self.json[annotations["hasMetaData"]].append( - { - "@id": f"fileid:metadata-{idx}", - "rdfs:label": row_id, - "@type": [ - annotations["quantity_class"], - annotations["meta_data_type"], - ], - annotations["meta_data_quantity_annotation"]: { - "@type": annotations[ - "numeric_class" - ], # could also be float or any other class - "@id": f"fileid:numeric-{idx}", - annotations[ - "meta_data_numeric_annotation" - ]: { # todo use different relation depending on the data type - "@value": meta_desc[ - "value" - ], # todo function that detects the data type (assume float atm) - "@type": "xsd:float", - }, - annotations["meta_data_unit_annotation"]: [ - emmo_utils.generate_unit_individuals( - meta_desc["unit"], idx - ), # function that assigns EMMO units - { - # Additional to the EMMO Unit system, a UnitLiteral is added, this helper individual just stores the - # Name of the unit, allows for simple query construction - "@id": f"fileid:unitliteral-{idx}", - "@type": annotations["UnitLiteral"], - annotations["meta_data_value_annotation"]: { - "@value": meta_desc["unit"], - "@type": "xsd:string", - }, - }, - ] - # { - # "@value":meta_desc['Unit'] #todo add function that assigns EMMO unit - # } - }, - } - ) - - def generate_column_json(self): - # self.json["hasMetaData"] = [] - # currently use same relation for columns and meta data since datamodel - # ontology -> http://emmo.info/datamodel#composition - - for idx, col_desc in self.column_meta.iterrows(): - if self.data_download_iri: - download_url = self.data_download_iri + "/" + f"column-{idx}" - else: - download_url = None - - # col_id = col_desc["index"] - - self.json[annotations["hasMetaData"]].append( - { - "@id": f"fileid:column-{idx}", - "@type": annotations["column_class"], - "rdfs:label": col_desc["titles"], - "dcat:downloadURL": download_url, - annotations["meta_data_unit_annotation"]: [ - emmo_utils.generate_unit_individuals( - col_desc["unit"], idx - ), # function that assigns EMMO units - { - # Additional to the EMMO Unit system, a UnitLiteral is added, this helper individual just stores the - # Name of the unit, allows for simple query construction - "@id": f"fileid:unitliteral-{idx}", - "@type": annotations["UnitLiteral"], - annotations["meta_data_unit_annotation"]: { - "@value": col_desc["unit"], - "@type": "xsd:string", - }, - }, - ] - # { - # "@value":unit #todo add function that assings EMMO unit - # } - } - ) - - def to_json_ld(self, f_path): - with open(f_path, "w") as output_file: - json.dump(self.json, output_file, indent=4) - - def to_ttl(self, f_path): - g = Graph() - graph = g.parse(data=json.dumps(self.json), format="json-ld") - graph.serialize(f_path, format="ttl") diff --git a/data2rdf/utils.py b/data2rdf/utils.py new file mode 100644 index 00000000..007627f6 --- /dev/null +++ b/data2rdf/utils.py @@ -0,0 +1,30 @@ +"""General data2rdf utils""" + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from data2rdf.config import Config + + +def is_integer(s): + try: + int(s) + return True + except ValueError: + return False + + +def is_float(s): + try: + float(s) + return True + except ValueError: + return False + + +def make_prefix(config: "Config") -> str: + if not str(config.base_iri).endswith(config.separator): + prefix = str(config.base_iri) + config.separator + else: + prefix = str(config.base_iri) + return prefix diff --git a/data2rdf/warnings.py b/data2rdf/warnings.py new file mode 100644 index 00000000..807e987b --- /dev/null +++ b/data2rdf/warnings.py @@ -0,0 +1,9 @@ +"""DSMS Warnings""" + + +class MappingMissmatchWarning(UserWarning): + """A missmatch warning if a value or a concept was not corrently mapped""" + + +class ParserWarning(UserWarning): + """A warning raised for a specific context set for a parser""" diff --git a/docs/workflow.md b/docs/workflow.md index bb8835a2..15df90db 100755 --- a/docs/workflow.md +++ b/docs/workflow.md @@ -35,7 +35,7 @@ It's a quick fix but for the moment a workaround is to add a mock-up column with ![details](assets/img/docu/CSV-Parser.png) The CSV Parser parses the meta data represented in rows on top of the actual column data. The parser expects the meta data to be represented as 3 columns [Name/Value/Unit(Optional)] where the unit does not have to be present. After the meta data the column data is parsed. -The number of columns is variable. The parser requires, that the column separator of the meta data **header_sep**, the number of meta data rows **column_sep** and the separator of the columns **column_sep** are supplied as arguments as shown in the example below. +The number of columns is variable. The parser requires, that the column separator of the meta data **metadata_sep**, the number of meta data rows **time_series_sep** and the separator of the columns **time_series_sep** are supplied as arguments as shown in the example below. ```python working_folder = os.path.join("tests", "tensile_test_example") @@ -47,9 +47,9 @@ raw_data = os.path.join(working_folder,"DX56_D_FZ2_WR00_43.TXT") parser = "csv" parser_args = { - "header_sep":"\t", - "column_sep":"\t", - "header_length":20 + "metadata_sep":"\t", + "time_series_sep":"\t", + "metadata_legnth":20 } pipeline = Annotation_Pipeline( diff --git a/examples/pipeline_demo.ipynb b/examples/pipeline_demo.ipynb index 2e52fc04..b9d80101 100755 --- a/examples/pipeline_demo.ipynb +++ b/examples/pipeline_demo.ipynb @@ -4,100 +4,39 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Download Chowlk as submodule and install the package using pip " + "# Install the package using pip " ] }, { - "cell_type": "code", - "execution_count": 1, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Processing /root/2023/data2rdf\n", - " Preparing metadata (setup.py) ... \u001b[?25ldone\n", - "\u001b[?25hCollecting beautifulsoup4==4.11.2\n", - " Using cached beautifulsoup4-4.11.2-py3-none-any.whl (129 kB)\n", - "Requirement already satisfied: chardet in /usr/lib/python3/dist-packages (from data2rdf==0.1.4) (4.0.0)\n", - "Requirement already satisfied: openpyxl in /usr/local/lib/python3.10/dist-packages (from data2rdf==0.1.4) (3.0.10)\n", - "Collecting pandas==1.1.5\n", - " Using cached pandas-1.1.5-cp310-cp310-linux_x86_64.whl\n", - "Requirement already satisfied: python-dotenv in /usr/local/lib/python3.10/dist-packages (from data2rdf==0.1.4) (0.20.0)\n", - "Requirement already satisfied: rdflib in /usr/local/lib/python3.10/dist-packages (from data2rdf==0.1.4) (6.2.0)\n", - "Collecting sqlalchemy==1.4.46\n", - " Downloading SQLAlchemy-1.4.46-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB)\n", - "\u001b[2K \u001b[90m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m9.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0mta \u001b[36m0:00:01\u001b[0m\n", - "\u001b[?25hRequirement already satisfied: tables in /usr/local/lib/python3.10/dist-packages (from data2rdf==0.1.4) (3.7.0)\n", - "Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4==4.11.2->data2rdf==0.1.4) (2.3.2.post1)\n", - "Requirement already satisfied: pytz>=2017.2 in /usr/lib/python3/dist-packages (from pandas==1.1.5->data2rdf==0.1.4) (2022.1)\n", - "Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.10/dist-packages (from pandas==1.1.5->data2rdf==0.1.4) (2.8.2)\n", - "Requirement already satisfied: numpy>=1.15.4 in /usr/local/lib/python3.10/dist-packages (from pandas==1.1.5->data2rdf==0.1.4) (1.23.2)\n", - "Requirement already satisfied: greenlet!=0.4.17 in /usr/local/lib/python3.10/dist-packages (from sqlalchemy==1.4.46->data2rdf==0.1.4) (1.1.2)\n", - "Requirement already satisfied: et-xmlfile in /usr/local/lib/python3.10/dist-packages (from openpyxl->data2rdf==0.1.4) (1.1.0)\n", - "Requirement already satisfied: isodate in /usr/local/lib/python3.10/dist-packages (from rdflib->data2rdf==0.1.4) (0.6.1)\n", - "Requirement already satisfied: pyparsing in /usr/lib/python3/dist-packages (from rdflib->data2rdf==0.1.4) (2.4.7)\n", - "Requirement already satisfied: setuptools in /usr/local/lib/python3.10/dist-packages (from rdflib->data2rdf==0.1.4) (67.3.2)\n", - "Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from tables->data2rdf==0.1.4) (21.3)\n", - "Requirement already satisfied: numexpr>=2.6.2 in /usr/local/lib/python3.10/dist-packages (from tables->data2rdf==0.1.4) (2.8.3)\n", - "Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil>=2.7.3->pandas==1.1.5->data2rdf==0.1.4) (1.16.0)\n", - "Building wheels for collected packages: data2rdf\n", - " Building wheel for data2rdf (setup.py) ... \u001b[?25ldone\n", - "\u001b[?25h Created wheel for data2rdf: filename=data2rdf-0.1.4-py3-none-any.whl size=779245 sha256=850b5b354a64edf787326efbb05c2220118c96244d6d788b4685be18fcaa94c3\n", - " Stored in directory: /tmp/pip-ephem-wheel-cache-8aqk1y9p/wheels/63/77/ba/e2b1cfbd920f8dd47039dbebb3329a0aae3ac74dc0b281c324\n", - "Successfully built data2rdf\n", - "Installing collected packages: sqlalchemy, beautifulsoup4, pandas, data2rdf\n", - " Attempting uninstall: sqlalchemy\n", - " Found existing installation: SQLAlchemy 1.4.40\n", - " Uninstalling SQLAlchemy-1.4.40:\n", - " Successfully uninstalled SQLAlchemy-1.4.40\n", - " Attempting uninstall: beautifulsoup4\n", - " Found existing installation: beautifulsoup4 4.11.1\n", - " Uninstalling beautifulsoup4-4.11.1:\n", - " Successfully uninstalled beautifulsoup4-4.11.1\n", - " Attempting uninstall: pandas\n", - " Found existing installation: pandas 1.5.2\n", - " Uninstalling pandas-1.5.2:\n", - " Successfully uninstalled pandas-1.5.2\n", - " Attempting uninstall: data2rdf\n", - " Found existing installation: data2rdf 0.1.4\n", - " Uninstalling data2rdf-0.1.4:\n", - " Successfully uninstalled data2rdf-0.1.4\n", - "Successfully installed beautifulsoup4-4.11.2 data2rdf-0.1.4 pandas-1.1.5 sqlalchemy-1.4.46\n", - "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n", - "\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.0.1\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" - ] - } - ], "source": [ - "!git submodule update --init --recursive\n", - "!pip install .." + "# Load packages" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 1, "metadata": {}, + "outputs": [], "source": [ - "# Load packages" + "import os\n", + "from data2rdf import AnnotationPipeline, Parser" ] }, { - "cell_type": "code", - "execution_count": 2, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "%load_ext autoreload\n", - "%autoreload 2\n", + "Following is an example of running the pipeline which demonstrates the required input files:\n", "\n", - "from data2rdf.cli.abox_conversion import run_abox_pipeline_for_folder \n", - "from data2rdf.annotation_pipeline import AnnotationPipeline\n", - "import warnings\n", - "import os\n", - "warnings.filterwarnings('ignore')\n" + "* `raw_data`: the path to the raw data to be processed: \n", + " * either a csv-, xlsx-/xlsm-, json-file or a python-`dict`\n", + " * `mapping_file`: either a csv-, xlsx-/xlsm- or json-file or a python-`dict` with a mapping from a concept in the `raw_data`-file to class - iri.\n", + "* `extra_triples`[optional]: a ttl-file with extra triples which are put on top of the produced graph from the `mapping_file`.\n", + "* `parser_args`[optional]: a python-`dict` with additional arguments needed by the parser, e.g. `metadata_length` for the `Parser.csv`\n", + "* `config`[optional]: a python-`dict` with additonal arguments to set for the pipeline run, e.g. `graph_identifier` for the identifier of the `rdflib.Graph`\n", + "\n" ] }, { @@ -109,19 +48,370 @@ ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 2, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "@prefix csvw: .\n", + "@prefix dcat: .\n", + "@prefix dcterms: .\n", + "@prefix fileid: .\n", + "@prefix foaf1: .\n", + "@prefix prov: .\n", + "@prefix qudt: .\n", + "@prefix rdfs: .\n", + "@prefix xsd: .\n", + "\n", + "fileid:TensileTestExperiment a prov:Activity ;\n", + " prov:generated fileid:AbsoluteCrossheadTravel,\n", + " fileid:Extension,\n", + " fileid:Remark,\n", + " fileid:StandardForce,\n", + " fileid:TimeStamp,\n", + " fileid:dataset ;\n", + " prov:hadPlan fileid:TestStandard ;\n", + " prov:used fileid:DisplacementTransducer,\n", + " fileid:ForceMeasuringDevice,\n", + " fileid:TensileTestSpecimen,\n", + " fileid:TensileTestingMachine,\n", + " fileid:TestingFacility ;\n", + " prov:wasAssociatedWith fileid:Tester ;\n", + " prov:wasInfluencedBy fileid:ExperimentPreparation .\n", + "\n", + "fileid:TestingStandard a prov:Plan .\n", + "\n", + "fileid:Elongation a ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI .\n", + "\n", + "fileid:ExperimentPreparation a prov:Activity ;\n", + " prov:atLocation fileid:TestingLab ;\n", + " prov:generated fileid:OriginalGaugeLength,\n", + " fileid:Preload,\n", + " fileid:TestingRate ;\n", + " prov:wasAssociatedWith fileid:DisplacementTransducer,\n", + " fileid:ForceMeasuringDevice,\n", + " fileid:TensileTestSpecimen,\n", + " fileid:TensileTestingMachine,\n", + " fileid:Tester ;\n", + " prov:wasInfluencedBy fileid:SamplePreparatation .\n", + "\n", + "fileid:MachineData a ;\n", + " rdfs:label \"maschine_1\" .\n", + "\n", + "fileid:Project a prov:Activity ;\n", + " prov:generated fileid:ProjectName,\n", + " fileid:ProjectNumber ;\n", + " prov:wasAssociatedWith fileid:TestingFacility .\n", + "\n", + "fileid:SampleIdentifier-2 a ;\n", + " rdfs:label \"Probentyp_2\" .\n", + "\n", + "fileid:SamplePreparatation a prov:Activity ;\n", + " prov:generated fileid:ParallelLength,\n", + " fileid:SpecimenThickness,\n", + " fileid:SpecimenType,\n", + " fileid:SpecimenWidth ;\n", + " prov:wasAssociatedWith fileid:Material,\n", + " fileid:TensileTestSpecimen ;\n", + " prov:wasInfluencedBy fileid:Project .\n", + "\n", + "fileid:Temperature a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/DEG_C\"^^xsd:anyURI ;\n", + " qudt:value \"22.0\"^^xsd:float ;\n", + " prov:wasAttributedTo fileid:TestingLab .\n", + "\n", + "fileid:TestTime a ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/SEC\"^^xsd:anyURI .\n", + "\n", + "fileid:WidthChange a ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI .\n", + "\n", + "fileid:dataset a dcat:Dataset,\n", + " prov:Entity ;\n", + " dcterms:hasPart fileid:tableGroup ;\n", + " dcat:distribution [ a dcat:Distribution ;\n", + " dcat:accessURL \"https://www.example.org/download\"^^xsd:anyURI ;\n", + " dcat:mediaType \"http://www.iana.org/assignments/media-types/text/csv\"^^xsd:anyURI ] .\n", + "\n", + "fileid:tableGroup a csvw:TableGroup ;\n", + " csvw:table [ a csvw:Table ;\n", + " rdfs:label \"Metadata\" ;\n", + " csvw:row [ a csvw:Row ;\n", + " csvw:describes fileid:Material ;\n", + " csvw:rownum 8 ;\n", + " csvw:titles \"Werkstoff\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " qudt:quantity fileid:SpecimenThickness ;\n", + " csvw:rownum 14 ;\n", + " csvw:titles \"Probendicke\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " qudt:quantity fileid:Preload ;\n", + " csvw:rownum 17 ;\n", + " csvw:titles \"Vorkraft\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:ProjectName ;\n", + " csvw:rownum 2 ;\n", + " csvw:titles \"Projektname\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:ForceMeasuringDevice ;\n", + " csvw:rownum 5 ;\n", + " csvw:titles \"Kraftaufnehmer\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:SpecimenType ;\n", + " csvw:rownum 9 ;\n", + " csvw:titles \"Probentyp\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:TimeStamp ;\n", + " csvw:rownum 3 ;\n", + " csvw:titles \"Datum/Uhrzeit\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:Remark ;\n", + " csvw:rownum 19 ;\n", + " csvw:titles \"Bemerkung\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " qudt:quantity fileid:TestingRate ;\n", + " csvw:rownum 16 ;\n", + " csvw:titles \"Pr\u00fcfgeschwindigkeit\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:SampleIdentifier-2 ;\n", + " csvw:rownum 11 ;\n", + " csvw:titles \"Probenkennung 2\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:TestingFacility ;\n", + " csvw:rownum 0 ;\n", + " csvw:titles \"Pr\u00fcfinstitut\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:Tester ;\n", + " csvw:rownum 10 ;\n", + " csvw:titles \"Pr\u00fcfer\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:TestStandard ;\n", + " csvw:rownum 7 ;\n", + " csvw:titles \"Pr\u00fcfnorm\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:DisplacementTransducer ;\n", + " csvw:rownum 6 ;\n", + " csvw:titles \"Wegaufnehmer\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " qudt:quantity fileid:Temperature ;\n", + " csvw:rownum 18 ;\n", + " csvw:titles \"Temperatur\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " qudt:quantity fileid:ParallelLength ;\n", + " csvw:rownum 13 ;\n", + " csvw:titles \"Versuchsl\u00e4nge\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:ProjectNumber ;\n", + " csvw:rownum 1 ;\n", + " csvw:titles \"Projektnummer\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:MachineData ;\n", + " csvw:rownum 4 ;\n", + " csvw:titles \"Maschinendaten\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " qudt:quantity fileid:OriginalGaugeLength ;\n", + " csvw:rownum 12 ;\n", + " csvw:titles \"Messl\u00e4nge Standardweg\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " qudt:quantity fileid:SpecimenWidth ;\n", + " csvw:rownum 15 ;\n", + " csvw:titles \"Probenbreite\"^^xsd:string ] ],\n", + " [ a csvw:Table ;\n", + " rdfs:label \"Time series data\" ;\n", + " csvw:tableSchema [ a csvw:Schema ;\n", + " csvw:column [ a csvw:Column ;\n", + " qudt:quantity fileid:StandardForce ;\n", + " csvw:titles \"Standardkraft\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-1\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:WidthChange ;\n", + " csvw:titles \"Breiten\u00e4nderung\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-4\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:TestTime ;\n", + " csvw:titles \"Pr\u00fcfzeit\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-0\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:AbsoluteCrossheadTravel ;\n", + " csvw:titles \"Traversenweg absolut\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-2\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:Elongation ;\n", + " csvw:titles \"Dehnung\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-5\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:Extension ;\n", + " csvw:titles \"Standardweg\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-3\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ] ] ] .\n", + "\n", + "fileid:AbsoluteCrossheadTravel a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI ;\n", + " prov:wasDerivedFrom fileid:DisplacementTransducer .\n", + "\n", + "fileid:Extension a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI ;\n", + " prov:wasDerivedFrom fileid:DisplacementTransducer .\n", + "\n", + "fileid:Material a prov:Agent,\n", + " ,\n", + " ;\n", + " rdfs:label \"Werkstoff_1\" .\n", + "\n", + "fileid:OriginalGaugeLength a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI ;\n", + " qudt:value \"80.0\"^^xsd:float ;\n", + " prov:wasAttributedTo fileid:DisplacementTransducer .\n", + "\n", + "fileid:ParallelLength a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI ;\n", + " qudt:value \"120.0\"^^xsd:float ;\n", + " prov:wasAttributedTo fileid:TensileTestSpecimen .\n", + "\n", + "fileid:Preload a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MegaPA\"^^xsd:anyURI ;\n", + " qudt:value \"2.0\"^^xsd:float ;\n", + " prov:wasAttributedTo fileid:TensileTestingMachine .\n", + "\n", + "fileid:ProjectName a prov:Entity,\n", + " ;\n", + " rdfs:label \"proj_name_1\" .\n", + "\n", + "fileid:ProjectNumber a prov:Entity,\n", + " ;\n", + " rdfs:label \"123456\" .\n", + "\n", + "fileid:Remark a ;\n", + " rdfs:label \"\" .\n", + "\n", + "fileid:SpecimenThickness a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI ;\n", + " qudt:value \"1.55\"^^xsd:float ;\n", + " prov:wasAttributedTo fileid:TensileTestSpecimen .\n", + "\n", + "fileid:SpecimenType a prov:Entity,\n", + " ;\n", + " rdfs:label \"Probentyp_1\" ;\n", + " prov:wasAttributedTo fileid:TensileTestSpecimen .\n", + "\n", + "fileid:SpecimenWidth a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI ;\n", + " qudt:value \"20.04\"^^xsd:float ;\n", + " prov:wasAttributedTo fileid:TensileTestSpecimen .\n", + "\n", + "fileid:StandardForce a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/N\"^^xsd:anyURI ;\n", + " prov:wasDerivedFrom fileid:ForceMeasuringDevice .\n", + "\n", + "fileid:TestStandard a ;\n", + " rdfs:label \"ISO-XX\" .\n", + "\n", + "fileid:TestingRate a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM-PER-SEC\"^^xsd:anyURI ;\n", + " qudt:value \"0.1\"^^xsd:float ;\n", + " prov:wasAttributedTo fileid:TensileTestingMachine .\n", + "\n", + "fileid:TimeStamp a ;\n", + " rdfs:label \"44335.4\" .\n", + "\n", + "fileid:Tester a prov:Agent,\n", + " ;\n", + " rdfs:label \"abc\" ;\n", + " prov:actedOnBehalfOf fileid:TestingFacility ;\n", + " prov:atLocation fileid:TestingLab .\n", + "\n", + "fileid:ForceMeasuringDevice a prov:Agent,\n", + " prov:Entity,\n", + " ;\n", + " rdfs:label \"Kraftaufnehmer_1\" ;\n", + " prov:atLocation fileid:TestingLab .\n", + "\n", + "fileid:TensileTestingMachine a prov:Agent,\n", + " prov:Entity ;\n", + " prov:atLocation fileid:TestingLab .\n", + "\n", + "fileid:TestingFacility a prov:Location,\n", + " prov:Organization,\n", + " ;\n", + " rdfs:label \"institute_1\" .\n", + "\n", + "fileid:DisplacementTransducer a prov:Agent,\n", + " prov:Entity,\n", + " ;\n", + " rdfs:label \"Wegaufnehmer_1\" ;\n", + " prov:atLocation fileid:TestingLab .\n", + "\n", + "fileid:TestingLab a prov:Agent,\n", + " prov:Location ;\n", + " prov:atLocation fileid:TestingFacility .\n", + "\n", + "fileid:TensileTestSpecimen a prov:Agent,\n", + " prov:Entity .\n", + "\n", + "\n" + ] + } + ], "source": [ - "Following is a sample of running the pipeline which demonstrates the required input files.\n", - "These include:\n", - "- The raw **data**\n", - "- a **method graph** which defines the abox in the experiment's scope; It is initially a .drawio that defines the relationship among entities in the data and their properties; Please refer to [this tutorial](https://data2rdf.readthedocs.io/en/latest/workflow.html#abox-skeleton) on the complete process of creating a method graph\n", - "- a [**mapping**](https://data2rdf.readthedocs.io/en/latest/workflow.html#data-method-mapping) is required to associates entities in the data with their equivalent entity within the method graph \n", + "working_folder = os.path.join(\"../\" ,\"tests\", \"csv_pipeline_test\")\n", "\n", - "There are a number of intermediate files created within the pipeline:\n", - "- `run_abox_pipeline_for_folder` creates a .ttl file of the defined abox\n", + "extra = os.path.join(working_folder, \"input\" , \"method-graph\", \"tensile_test_method_v6.mod.ttl\")\n", + "mapping_file = os.path.join(working_folder,\"input\" , \"mapping\" ,\"tensile_test_mapping.csv\")\n", + "raw_data = os.path.join(working_folder, \"input\" , \"data\" ,\"DX56_D_FZ2_WR00_43.TXT\")\n", "\n", - "Finally, the pipeline creates an rdf graph of the column data " + "parser_args = {\n", + " \"metadata_sep\":\"\\t\",\n", + " \"time_series_sep\":\"\\t\",\n", + " \"metadata_length\":20\n", + " }\n", + "\n", + "pipeline = AnnotationPipeline(\n", + " raw_data=raw_data,\n", + " parser=Parser.csv,\n", + " mapping=mapping_file,\n", + " parser_args=parser_args,\n", + " extra_triples=extra,\n", + ")\n", + "\n", + "print(pipeline.graph.serialize())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Excel parser example" ] }, { @@ -129,85 +419,536 @@ "execution_count": 3, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\bue\\data2rdf\\data2rdf\\parsers\\excel.py:274: MappingMissmatchWarning: Concept with key `Bemerkungen`\n", + " does not have a value at location `UU31`.\n", + " Concept will be omitted in graph.\n", + " \n", + " warnings.warn(message, MappingMissmatchWarning)\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "Of 29 data individuals, 13 were successfully mapped to the method. See the data.mapping-result.xlsx file for mapping results.\n" + "@prefix csvw: .\n", + "@prefix dcat: .\n", + "@prefix dcterms: .\n", + "@prefix fileid: .\n", + "@prefix foaf1: .\n", + "@prefix prov: .\n", + "@prefix qudt: .\n", + "@prefix rdfs: .\n", + "@prefix xsd: .\n", + "\n", + "fileid:TensileTestExperiment a prov:Activity ;\n", + " prov:generated fileid:AbsoluteCrossheadTravel,\n", + " fileid:Extension,\n", + " fileid:Remark,\n", + " fileid:StandardForce,\n", + " fileid:TimeStamp,\n", + " fileid:dataset ;\n", + " prov:hadPlan fileid:TestStandard ;\n", + " prov:used fileid:DisplacementTransducer,\n", + " fileid:ForceMeasuringDevice,\n", + " fileid:TensileTestSpecimen,\n", + " fileid:TensileTestingMachine,\n", + " fileid:TestingFacility ;\n", + " prov:wasAssociatedWith fileid:Tester ;\n", + " prov:wasInfluencedBy fileid:ExperimentPreparation .\n", + "\n", + "fileid:TestingStandard a prov:Plan .\n", + "\n", + "fileid:ExperimentPreparation a prov:Activity ;\n", + " prov:atLocation fileid:TestingLab ;\n", + " prov:generated fileid:OriginalGaugeLength,\n", + " fileid:Preload,\n", + " fileid:TestingRate ;\n", + " prov:wasAssociatedWith fileid:DisplacementTransducer,\n", + " fileid:ForceMeasuringDevice,\n", + " fileid:TensileTestSpecimen,\n", + " fileid:TensileTestingMachine,\n", + " fileid:Tester ;\n", + " prov:wasInfluencedBy fileid:SamplePreparatation .\n", + "\n", + "fileid:MachineData a ;\n", + " rdfs:label \"M_1\" .\n", + "\n", + "fileid:ParallelLength a prov:Entity ;\n", + " prov:wasAttributedTo fileid:TensileTestSpecimen .\n", + "\n", + "fileid:PercentageElongation a ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/FRACTION\"^^xsd:anyURI .\n", + "\n", + "fileid:Preload a prov:Entity ;\n", + " prov:wasAttributedTo fileid:TensileTestingMachine .\n", + "\n", + "fileid:Project a prov:Activity ;\n", + " prov:generated fileid:ProjectName,\n", + " fileid:ProjectNumber ;\n", + " prov:wasAssociatedWith fileid:TestingFacility .\n", + "\n", + "fileid:ProjectName a prov:Entity .\n", + "\n", + "fileid:SampleIdentifier-2 a ;\n", + " rdfs:label \"123456\" .\n", + "\n", + "fileid:SamplePreparatation a prov:Activity ;\n", + " prov:generated fileid:ParallelLength,\n", + " fileid:SpecimenThickness,\n", + " fileid:SpecimenType,\n", + " fileid:SpecimenWidth ;\n", + " prov:wasAssociatedWith fileid:Material,\n", + " fileid:TensileTestSpecimen ;\n", + " prov:wasInfluencedBy fileid:Project .\n", + "\n", + "fileid:Temperature a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/DEG_C\"^^xsd:anyURI ;\n", + " qudt:value \"25.0\"^^xsd:float ;\n", + " prov:wasAttributedTo fileid:TestingLab .\n", + "\n", + "fileid:TestTime a ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/SEC\"^^xsd:anyURI .\n", + "\n", + "fileid:WidthChange a ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI .\n", + "\n", + "fileid:dataset a dcat:Dataset,\n", + " prov:Entity ;\n", + " dcterms:hasPart fileid:tableGroup ;\n", + " dcat:distribution [ a dcat:Distribution ;\n", + " dcat:accessURL \"https://www.example.org/download\"^^xsd:anyURI ;\n", + " dcat:mediaType \"https://www.iana.org/assignments/media-types/application/vnd.ms-excel\"^^xsd:anyURI ] .\n", + "\n", + "fileid:tableGroup a csvw:TableGroup ;\n", + " csvw:table [ a csvw:Table ;\n", + " rdfs:label \"Metadata\" ;\n", + " csvw:row [ a csvw:Row ;\n", + " csvw:describes fileid:Tester ;\n", + " csvw:titles \"Pr\u00fcfer\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:SampleIdentifier-2 ;\n", + " csvw:titles \"Probenkennung 2\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:SpecimenType ;\n", + " csvw:titles \"Probenform\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " qudt:quantity fileid:OriginalGaugeLength ;\n", + " csvw:titles \"Messl\u00e4nge Standardweg\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:Material ;\n", + " csvw:titles \"Werkstoff\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " qudt:quantity fileid:SpecimenWidth ;\n", + " csvw:titles \"Probenbreite b\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:MachineData ;\n", + " csvw:titles \"Pr\u00fcfmaschine\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " qudt:quantity fileid:SpecimenThickness ;\n", + " csvw:titles \"Probendicke a\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " qudt:quantity fileid:Temperature ;\n", + " csvw:titles \"Pr\u00fcftemperatur\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:ProjectNumber ;\n", + " csvw:titles \"Projekt\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " csvw:describes fileid:TimeStamp ;\n", + " csvw:titles \"Datum\"^^xsd:string ],\n", + " [ a csvw:Row ;\n", + " qudt:quantity fileid:TestingRate ;\n", + " csvw:titles \"Pr\u00fcfgeschwindigkeit\"^^xsd:string ] ],\n", + " [ a csvw:Table ;\n", + " rdfs:label \"Time series data\" ;\n", + " csvw:tableSchema [ a csvw:Schema ;\n", + " csvw:column [ a csvw:Column ;\n", + " qudt:quantity fileid:Extension ;\n", + " csvw:titles \"Standardweg\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-3\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:TestTime ;\n", + " csvw:titles \"Zeit\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-0\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:PercentageElongation ;\n", + " csvw:titles \"Dehnung\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-5\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:StandardForce ;\n", + " csvw:titles \"Standardkraft\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-1\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:AbsoluteCrossheadTravel ;\n", + " csvw:titles \"Traversenweg absolut\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-2\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:WidthChange ;\n", + " csvw:titles \"Breiten\u00e4nderung\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-4\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ] ] ] .\n", + "\n", + "fileid:AbsoluteCrossheadTravel a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI ;\n", + " prov:wasDerivedFrom fileid:DisplacementTransducer .\n", + "\n", + "fileid:Extension a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI ;\n", + " prov:wasDerivedFrom fileid:DisplacementTransducer .\n", + "\n", + "fileid:Material a prov:Agent,\n", + " ,\n", + " ;\n", + " rdfs:label \"Werkstoff_1\" .\n", + "\n", + "fileid:OriginalGaugeLength a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI ;\n", + " qudt:value \"15.0\"^^xsd:float ;\n", + " prov:wasAttributedTo fileid:DisplacementTransducer .\n", + "\n", + "fileid:ProjectNumber a prov:Entity,\n", + " ;\n", + " rdfs:label \"Projekt_1\" .\n", + "\n", + "fileid:SpecimenThickness a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI ;\n", + " qudt:value \"1.5\"^^xsd:float ;\n", + " prov:wasAttributedTo fileid:TensileTestSpecimen .\n", + "\n", + "fileid:SpecimenType a prov:Entity,\n", + " ;\n", + " rdfs:label \"Fz 10x20\" ;\n", + " prov:wasAttributedTo fileid:TensileTestSpecimen .\n", + "\n", + "fileid:SpecimenWidth a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI ;\n", + " qudt:value \"9.5\"^^xsd:float ;\n", + " prov:wasAttributedTo fileid:TensileTestSpecimen .\n", + "\n", + "fileid:StandardForce a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/KiloN\"^^xsd:anyURI ;\n", + " prov:wasDerivedFrom fileid:ForceMeasuringDevice .\n", + "\n", + "fileid:TestingRate a prov:Entity,\n", + " ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM-PER-SEC\"^^xsd:anyURI ;\n", + " qudt:value \"0.02\"^^xsd:float ;\n", + " prov:wasAttributedTo fileid:TensileTestingMachine .\n", + "\n", + "fileid:TimeStamp a ;\n", + " rdfs:label \"2016-10-11 00:00:00\" .\n", + "\n", + "fileid:ForceMeasuringDevice a prov:Agent,\n", + " prov:Entity ;\n", + " prov:atLocation fileid:TestingLab .\n", + "\n", + "fileid:Tester a prov:Agent,\n", + " ;\n", + " rdfs:label \"Fe\" ;\n", + " prov:actedOnBehalfOf fileid:TestingFacility ;\n", + " prov:atLocation fileid:TestingLab .\n", + "\n", + "fileid:TensileTestingMachine a prov:Agent,\n", + " prov:Entity ;\n", + " prov:atLocation fileid:TestingLab .\n", + "\n", + "fileid:TestingFacility a prov:Location,\n", + " prov:Organization .\n", + "\n", + "fileid:DisplacementTransducer a prov:Agent,\n", + " prov:Entity ;\n", + " prov:atLocation fileid:TestingLab .\n", + "\n", + "fileid:TestingLab a prov:Agent,\n", + " prov:Location ;\n", + " prov:atLocation fileid:TestingFacility .\n", + "\n", + "fileid:TensileTestSpecimen a prov:Agent,\n", + " prov:Entity .\n", + "\n", + "\n" ] } ], "source": [ - "working_folder = os.path.join(\"../\" ,\"tests\", \"csv_pipeline_test\")\n", + "working_folder = os.path.join(\"../\" ,\"tests\", \"xls_pipeline_test\")\n", "\n", - "abox_folder_path = os.path.join(working_folder,\"input\" , \"method-graph\")\n", - "run_abox_pipeline_for_folder(abox_folder_path)\n", + "extra = os.path.join(working_folder, \"input\" , \"method-graph\", \"tensile_test_method_v6.mod.ttl\")\n", + "raw_data = os.path.join(working_folder,\"input\" , \"data\" ,\"AFZ1-Fz-S1Q.xlsm\")\n", + "mapping = os.path.join(working_folder, \"input\" , \"mapping\" ,\"tensile_test_mapping.csv\")\n", "\n", - "output_folder = os.path.join(working_folder,\"output\")\n", - "template = os.path.join(abox_folder_path, \"tensile_test_method_v6\",\"tensile_test_method_v6.mod.ttl\")\n", - "mapping_file = os.path.join(working_folder,\"input\" , \"mapping\" ,\"tensile_test_mapping.xlsx\")\n", - "raw_data = os.path.join(working_folder, \"input\" , \"data\" ,\"DX56_D_FZ2_WR00_43.TXT\")\n", + "parser = \"excel\"\n", "\n", - "parser = \"csv\"\n", - "parser_args = {\n", - " \"header_sep\":\"\\t\",\n", - " \"column_sep\":\"\\t\",\n", - " \"header_length\":20\n", - " }\n", "\n", "pipeline = AnnotationPipeline(\n", - " raw_data,\n", - " parser,\n", - " parser_args,\n", - " template,\n", - " mapping_file,\n", - " output_folder,\n", - " data_download_iri = \"https://127.0.0.1/id\",\n", + " raw_data=raw_data,\n", + " parser=Parser.excel,\n", + " mapping=mapping,\n", + " extra_triples=extra,\n", ")\n", "\n", - "pipeline.run_pipeline()" + "print(pipeline.graph.serialize())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## JSON Example" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "merged_graph.ttl\n", - "DX56_D_FZ2_WR00_43.generic.xlsx\n", - ".gitkeep\n", - "DX56_D_FZ2_WR00_43.metadata.ttl\n", - "DX56_D_FZ2_WR00_43.abox.ttl\n", - "DX56_D_FZ2_WR00_43.mapping.ttl\n", - "DX56_D_FZ2_WR00_43.mapping-result.xlsx\n", - "DX56_D_FZ2_WR00_43.datastorage.hdf5\n" + "@prefix dcat: .\n", + "@prefix dcterms: .\n", + "@prefix fileid: .\n", + "@prefix foaf1: .\n", + "@prefix ns1: .\n", + "@prefix qudt: .\n", + "@prefix rdfs: .\n", + "@prefix xsd: .\n", + "\n", + "fileid:dataset a dcat:Dataset ;\n", + " dcterms:hasPart fileid:Dictionary ;\n", + " dcat:distribution [ a dcat:Distribution ;\n", + " dcat:accessURL \"https://www.example.org/download\"^^xsd:anyURI ;\n", + " dcat:mediaType \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ] .\n", + "\n", + "fileid:Dictionary a ns1:Dictionary ;\n", + " ns1:hadDictionaryMember [ a ns1:KeyEntityPair ;\n", + " ns1:pairEntity [ a ns1:Entity ;\n", + " qudt:quantity fileid:PercentageElongation ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-0\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ] ;\n", + " ns1:pairKey \"Dehnung\"^^xsd:string ],\n", + " [ a ns1:KeyEntityPair ;\n", + " ns1:pairEntity [ a ns1:Entity ;\n", + " dcterms:hasPart fileid:Remark ] ;\n", + " ns1:pairKey \"Bemerkungen\"^^xsd:string ],\n", + " [ a ns1:KeyEntityPair ;\n", + " ns1:pairEntity [ a ns1:Entity ;\n", + " qudt:quantity fileid:Force ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-1\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ] ;\n", + " ns1:pairKey \"Standardkraft\"^^xsd:string ],\n", + " [ a ns1:KeyEntityPair ;\n", + " ns1:pairEntity [ a ns1:Entity ;\n", + " qudt:quantity fileid:WidthChange ] ;\n", + " ns1:pairKey \"Breitenaenderung\"^^xsd:string ] .\n", + "\n", + "fileid:Force a ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/KiloN\"^^xsd:anyURI .\n", + "\n", + "fileid:PercentageElongation a ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/PERCENT\"^^xsd:anyURI .\n", + "\n", + "fileid:Remark a ;\n", + " rdfs:label \"foobar\" .\n", + "\n", + "fileid:WidthChange a ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI ;\n", + " qudt:value \"1.0\"^^xsd:float .\n", + "\n", + "\n" ] } ], "source": [ - "for file in os.listdir(output_folder):\n", - " print(file)\n", - " " + "working_folder = os.path.join(\"../\" ,\"tests\", \"json_pipeline_test\")\n", + "\n", + "mapping_file = os.path.join(working_folder,\"input\" , \"mapping\" ,\"tensile_test_mapping.csv\")\n", + "raw_data = os.path.join(working_folder, \"input\" , \"data\" ,\"sample_data.json\")\n", + "\n", + "\n", + "pipeline = AnnotationPipeline(\n", + " raw_data=raw_data,\n", + " parser=Parser.json,\n", + " mapping=mapping_file\n", + ")\n", + "\n", + "print(pipeline.graph.serialize())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# The final complete graph including data graph, mapping graph and process graph can be used as rdflib object or exported as ttl.\n", - "## The ttl export can be used as input for the DSMS or any triplstore." + "## Dict Example " ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "@prefix dcat: .\n", + "@prefix dcterms: .\n", + "@prefix fileid: .\n", + "@prefix foaf1: .\n", + "@prefix ns1: .\n", + "@prefix qudt: .\n", + "@prefix rdfs: .\n", + "@prefix xsd: .\n", + "\n", + "fileid:dataset a dcat:Dataset ;\n", + " dcterms:hasPart fileid:Dictionary ;\n", + " dcat:distribution [ a dcat:Distribution ;\n", + " dcat:accessURL \"https://www.example.org/download\"^^xsd:anyURI ;\n", + " dcat:mediaType \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ] .\n", + "\n", + "fileid:Dictionary a ns1:Dictionary ;\n", + " ns1:hadDictionaryMember [ a ns1:KeyEntityPair ;\n", + " ns1:pairEntity [ a ns1:Entity ;\n", + " qudt:quantity fileid:Force ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-1\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ] ;\n", + " ns1:pairKey \"Standardkraft\"^^xsd:string ],\n", + " [ a ns1:KeyEntityPair ;\n", + " ns1:pairEntity [ a ns1:Entity ;\n", + " qudt:quantity fileid:WidthChange ] ;\n", + " ns1:pairKey \"Breitenaenderung\"^^xsd:string ],\n", + " [ a ns1:KeyEntityPair ;\n", + " ns1:pairEntity [ a ns1:Entity ;\n", + " dcterms:hasPart fileid:Remark ] ;\n", + " ns1:pairKey \"Bemerkungen\"^^xsd:string ],\n", + " [ a ns1:KeyEntityPair ;\n", + " ns1:pairEntity [ a ns1:Entity ;\n", + " qudt:quantity fileid:PercentageElongation ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-0\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ] ;\n", + " ns1:pairKey \"Dehnung\"^^xsd:string ] .\n", + "\n", + "fileid:Force a ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/KiloN\"^^xsd:anyURI .\n", + "\n", + "fileid:PercentageElongation a ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/PERCENT\"^^xsd:anyURI .\n", + "\n", + "fileid:Remark a ;\n", + " rdfs:label \"foobar\" .\n", + "\n", + "fileid:WidthChange a ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/MilliM\"^^xsd:anyURI ;\n", + " qudt:value \"1.0\"^^xsd:float .\n", + "\n", + "\n" + ] + } + ], + "source": [ + "raw_data = {\n", + " \"data\": {\n", + " \"Breitenaenderung\": {\n", + " \"unit\": \"mm\",\n", + " \"value\": 1.0\n", + " },\n", + " \"Dehnung\": [\n", + " 1.0,\n", + " 2.0,\n", + " 3.0\n", + " ],\n", + " \"Standardkraft\": {\n", + " \"array\": [\n", + " 2.0,\n", + " 3.0,\n", + " 4.0\n", + " ],\n", + " \"unit\": \"kN\"\n", + " }\n", + " },\n", + " \"details\": {\n", + " \"Bemerkungen\": \"foobar\"\n", + " }\n", + "}\n", + "\n", + "mapping = {\n", + " \"Bemerkungen\": {\n", + " \"iri\": \"https://w3id.org/steel/ProcessOntology/Remark\",\n", + " \"key\": \"Bemerkungen\",\n", + " \"value_location\": \"details.Bemerkungen\"\n", + " },\n", + " \"Breitenaenderung\": {\n", + " \"iri\": \"https://w3id.org/steel/ProcessOntology/WidthChange\",\n", + " \"key\": \"Breitenaenderung\",\n", + " \"unit_location\": \"data.Breitenaenderung.unit\",\n", + " \"value_location\": \"data.Breitenaenderung.value\"\n", + " },\n", + " \"Dehnung\": {\n", + " \"iri\": \"https://w3id.org/steel/ProcessOntology/PercentageElongation\",\n", + " \"key\": \"Dehnung\",\n", + " \"unit\": \"%\",\n", + " \"value_location\": \"data.Dehnung\"\n", + " },\n", + " \"Standardkraft\": {\n", + " \"iri\": \"https://w3id.org/steel/ProcessOntology/Force\",\n", + " \"key\": \"Standardkraft\",\n", + " \"unit_location\": \"data.Standardkraft.unit\",\n", + " \"value_location\": \"data.Standardkraft.array\"\n", + " }\n", + "}\n", + "\n", + "\n", + "pipeline = AnnotationPipeline(\n", + " raw_data=raw_data,\n", + " parser=Parser.json,\n", + " mapping=mapping_file\n", + ")\n", + "\n", + "print(pipeline.graph.serialize())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Example with CSV without metadata, only time series" + ] }, { "cell_type": "code", @@ -218,32 +959,89 @@ "name": "stdout", "output_type": "stream", "text": [ - "475\n" + "@prefix csvw: .\n", + "@prefix dcat: .\n", + "@prefix dcterms: .\n", + "@prefix fileid: .\n", + "@prefix foaf1: .\n", + "@prefix qudt: .\n", + "@prefix rdfs: .\n", + "@prefix xsd: .\n", + "\n", + "fileid:dataset a dcat:Dataset ;\n", + " dcterms:hasPart fileid:tableGroup ;\n", + " dcat:distribution [ a dcat:Distribution ;\n", + " dcat:accessURL \"https://www.example.org/download\"^^xsd:anyURI ;\n", + " dcat:mediaType \"http://www.iana.org/assignments/media-types/text/csv\"^^xsd:anyURI ] .\n", + "\n", + "fileid:Sensor1 a .\n", + "\n", + "fileid:Sensor2 a .\n", + "\n", + "fileid:Sensor3 a .\n", + "\n", + "fileid:TestTime a .\n", + "\n", + "fileid:tableGroup a csvw:TableGroup ;\n", + " csvw:table [ a csvw:Table ;\n", + " rdfs:label \"Time series data\" ;\n", + " csvw:tableSchema [ a csvw:Schema ;\n", + " csvw:column [ a csvw:Column ;\n", + " qudt:quantity fileid:Sensor3 ;\n", + " csvw:titles \"column_03\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-3\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:Sensor1 ;\n", + " csvw:titles \"column_01\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-1\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:TestTime ;\n", + " csvw:titles \"time\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-0\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:Sensor2 ;\n", + " csvw:titles \"column_02\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-2\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ] ] ] .\n", + "\n", + "\n" ] } ], "source": [ + "working_folder = os.path.join(\"..\" ,\"tests\", \"csv_without_header\")\n", + "\n", + "mapping_file = os.path.join(working_folder,\"input\" , \"mapping\" ,\"mapping.json\")\n", + "raw_data = os.path.join(working_folder, \"input\" , \"data\" ,\"test.csv\")\n", + "parser_args = {\"metadata_sep\": \",\", \"time_series_sep\": \",\", \"metadata_length\": 0, \"time_series_header_length\": 1}\n", + "\n", + "\n", "pipeline = AnnotationPipeline(\n", - " raw_data,\n", - " parser,\n", - " parser_args,\n", - " template,\n", - " mapping_file,\n", - " output_folder,\n", + " raw_data=raw_data,\n", + " parser=Parser.csv,\n", + " mapping=mapping_file,\n", + " parser_args=parser_args,\n", ")\n", "\n", - "pipeline.create_output() #set all paths but don't run the pipeline (since it was run in the block before)\n", - "\n", - "g = pipeline.export_graph()\n", - "print(len(g))\n", - "pipeline.export_ttl(os.path.join(output_folder, 'merged_graph.ttl'))\n" + "print(pipeline.graph.serialize())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Excel parser example" + "# A CSV Example with Nan values" ] }, { @@ -255,37 +1053,122 @@ "name": "stdout", "output_type": "stream", "text": [ - "Of 49 data individuals, 1 were successfully mapped to the method. See the data.mapping-result.xlsx file for mapping results.\n" + "@prefix csvw: .\n", + "@prefix dcat: .\n", + "@prefix dcterms: .\n", + "@prefix fileid: .\n", + "@prefix foaf1: .\n", + "@prefix qudt: .\n", + "@prefix rdfs: .\n", + "@prefix xsd: .\n", + "\n", + "fileid:dataset a dcat:Dataset ;\n", + " dcterms:hasPart fileid:tableGroup ;\n", + " dcat:distribution [ a dcat:Distribution ;\n", + " dcat:accessURL \"https://www.example.org/download\"^^xsd:anyURI ;\n", + " dcat:mediaType \"http://www.iana.org/assignments/media-types/text/csv\"^^xsd:anyURI ] .\n", + "\n", + "fileid:MassDensity a ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/KiloGM-PER-M3\"^^xsd:anyURI .\n", + "\n", + "fileid:ModulusOfElasticity a ;\n", + " qudt:hasUnit \"https://qudt.org/vocab/unit/PA\"^^xsd:anyURI .\n", + "\n", + "fileid:PoissonRatio a ;\n", + " qudt:hasUnit \"https://qudt.org/vocab/unit/NUM\"^^xsd:anyURI .\n", + "\n", + "fileid:SpecificHeatCapacity a ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/J-PER-KiloGM-K\"^^xsd:anyURI .\n", + "\n", + "fileid:Temperature a ;\n", + " qudt:hasUnit \"https://qudt.org/vocab/unit/DEG_C\"^^xsd:anyURI .\n", + "\n", + "fileid:ThermalConductivity a ;\n", + " qudt:hasUnit \"http://qudt.org/vocab/unit/KiloW-PER-M-K\"^^xsd:anyURI .\n", + "\n", + "fileid:ThermalExpansionCoefficient a ;\n", + " qudt:hasUnit \"https://qudt.org/vocab/unit/PERCENT-PER-K\"^^xsd:anyURI .\n", + "\n", + "fileid:tableGroup a csvw:TableGroup ;\n", + " csvw:table [ a csvw:Table ;\n", + " rdfs:label \"Time series data\" ;\n", + " csvw:tableSchema [ a csvw:Schema ;\n", + " csvw:column [ a csvw:Column ;\n", + " qudt:quantity fileid:ThermalConductivity ;\n", + " csvw:titles \"Thermal conductivity[W/mK]\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-5\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:SpecificHeatCapacity ;\n", + " csvw:titles \"Specific heat[J/kgK]\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-2\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:Temperature ;\n", + " csvw:titles \"Temperature[\u00b0C]\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-0\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:ThermalExpansionCoefficient ;\n", + " csvw:titles \"Coefficient of thermal exapansion[1/K]\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-1\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:PoissonRatio ;\n", + " csvw:titles \"Poison's ratio[-]\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-4\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:MassDensity ;\n", + " csvw:titles \"Density[kg/m3]\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-6\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ],\n", + " [ a csvw:Column ;\n", + " qudt:quantity fileid:ModulusOfElasticity ;\n", + " csvw:titles \"Young's modulus[Pa]\"^^xsd:string ;\n", + " foaf1:page [ a foaf1:Document ;\n", + " dcterms:format \"https://www.iana.org/assignments/media-types/application/json\"^^xsd:anyURI ;\n", + " dcterms:identifier \"https://www.example.org/column-3\"^^xsd:anyURI ;\n", + " dcterms:type \"http://purl.org/dc/terms/Dataset\"^^xsd:anyURI ] ] ] ] .\n", + "\n", + "\n" ] } ], "source": [ - "working_folder = os.path.join(\"../\" ,\"tests\", \"xls_pipeline_test\")\n", - "abox_folder_path = os.path.join(working_folder,\"input\" , \"method-graph\")\n", - "run_abox_pipeline_for_folder(abox_folder_path)\n", + "working_folder = os.path.join(\"..\" ,\"tests\", \"csv_empty_rows\")\n", "\n", - "output_folder = os.path.join(working_folder,\"output\")\n", - "template = os.path.join(abox_folder_path, \"tensile_test_method_v6\",\"tensile_test_method_v6.mod.ttl\")\n", - "mapping_file = os.path.join(working_folder, \"input\" , \"mapping\",\"mapping.xlsx\")\n", - "raw_data = os.path.join(working_folder,\"input\" , \"data\" ,\"AFZ1-Fz-S1Q.xlsm\")\n", - "location_mapping = os.path.join(working_folder, \"input\" , \"mapping\" ,\"location_mapping.xlsx\")\n", + "mapping_file = os.path.join(working_folder,\"input\" , \"mapping\" ,\"mapping.json\")\n", + "raw_data = os.path.join(working_folder, \"input\" , \"data\" ,\"data.csv\")\n", "\n", - "parser = \"excel\"\n", "parser_args = {\n", - " \"location_mapping_f_path\":location_mapping,\n", - " }\n", + " \"time_series_sep\": \";\",\n", + " \"metadata_length\": 0,\n", + " \"time_series_header_length\": 1,\n", + " \"drop_na\": False,\n", + "}\n", + "\n", "\n", "pipeline = AnnotationPipeline(\n", - " raw_data,\n", - " parser,\n", - " parser_args,\n", - " template,\n", - " mapping_file,\n", - " output_folder,\n", - " base_iri = \"http://www.test4.de\"\n", + " raw_data=raw_data,\n", + " parser=Parser.csv,\n", + " mapping=mapping_file,\n", + " parser_args=parser_args,\n", ")\n", "\n", - "pipeline.run_pipeline()" + "print(pipeline.graph.serialize())" ] } ], @@ -305,7 +1188,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.16" + "version": "3.12.2" }, "vscode": { "interpreter": { diff --git a/setup.cfg b/setup.cfg index 2fa6848e..5af99f17 100755 --- a/setup.cfg +++ b/setup.cfg @@ -1,12 +1,12 @@ [metadata] name = data2rdf -version = v1.1.0 +version = v2.0.0rc15 description = A generic pipeline that can be used to map raw data to RDF. long_description = file: README.md long_description_content_type = text/markdown url = https://github.com/MI-FraunhoferIWM/data2rdf -author = Paul Zierep, Yoav Nahshon, Pablo de Andres, Deepu Krishnareddy -author_email = matthias.bueschelberger@iwm.fraunhofer.de, yoav.nahshon@iwm.fraunhofer.de, pablo.de.andres@iwm.fraunhofer.de, deepu.krishnareddy@iwm.fraunhofer.de +author = Paul Zierep, Yoav Nahshon, Pablo de Andres, Deepu Krishnareddy, Matthias Büschelberger +author_email = matthias.bueschelberger@iwm.fraunhofer.de, yoav.nahshon@iwm.fraunhofer.de, pablo.de.andres@iwm.fraunhofer.de, deepu.krishnareddy@iwm.fraunhofer.de, matthias.bueschelberger@iwm.fraunhofer.de license = BSD-3-Clause license_files = LICENSE classifiers = @@ -20,13 +20,16 @@ classifiers = packages = find: install_requires = beautifulsoup4>=4.0.0 - chowlk-unofficial-fork==0.0.2 + jsonpath-ng~=1.6.1 + lru-cache<1 openpyxl>=3,<4 pandas>=2,<3 + pydantic>=2,<3 + pydantic-settings python-dotenv - python-magic==0.4.27 - rdflib==6.2.0 - tables==3.8.0 + rdflib>=6,<7 + requests + tables>=3,<4 python_requires = >=3.8 include_package_data = True @@ -39,6 +42,7 @@ dev = bumpver==2021.1114 dunamai==1.7.0 docs = + html5lib==1.1 ipython==8.12.3 jinja2==3.1.3 jupyter==1.0.0 @@ -53,7 +57,7 @@ docs = pre_commit = pre-commit==2.15.0 tests = - pytest==6.2.5 + pytest==8.2.2 [options.package_data] * = *.csv diff --git a/data2rdf/emmo_lib/__init__.py b/tests/csv_empty_rows/__init__.py old mode 100755 new mode 100644 similarity index 100% rename from data2rdf/emmo_lib/__init__.py rename to tests/csv_empty_rows/__init__.py diff --git a/tests/csv_empty_rows/input/__ini__.py b/tests/csv_empty_rows/input/__ini__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/csv_empty_rows/input/data/__init__.py b/tests/csv_empty_rows/input/data/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/csv_empty_rows/input/data/data.csv b/tests/csv_empty_rows/input/data/data.csv new file mode 100644 index 00000000..6209b882 --- /dev/null +++ b/tests/csv_empty_rows/input/data/data.csv @@ -0,0 +1,32 @@ +Temperature[°C];Coefficient of thermal exapansion[1/K];Specific heat[J/kgK];Young's modulus[Pa];Poison's ratio[-];Thermal conductivity[W/mK];Density[kg/m3] +20;8.70E-06;8.46E+02;7.47E+10;0.218;0.99;2.47E+03 +100;9.00E-06;8.70E+02;7.43E+10;0.223;1.06; +200;9.20E-06;9.00E+02;7.34E+10;0.232;1.15; +300;9.50E-06;9.35E+02;7.25E+10;0.241;1.23; +400;9.80E-06;9.77E+02;7.11E+10;0.251;1.32; +450;1.03E-05;1.03E+03;6.98E+10;0.258;; +460;1.05E-05;1.06E+03;6.94E+10;0.26;; +470;1.08E-05;1.13E+03;6.88E+10;0.262;; +490;1.15E-05;1.28E+03;6.78E+10;0.267;; +500;1.20E-05;1.36E+03;6.70E+10;0.269;1.4; +510;1.29E-05;1.42E+03;6.64E+10;0.275;; +520;1.40E-05;1.44E+03;6.55E+10;0.284;; +530;1.52E-05;1.45E+03;6.48E+10;0.295;; +543;1.80E-05;1.44E+03;6.36E+10;0.309;; +550;1.95E-05;1.43E+03;6.28E+10;0.316;1.45; +560;2.20E-05;1.42E+03;6.16E+10;0.326;; +570;2.40E-05;1.42E+03;6.01E+10;0.335;; +580;2.53E-05;1.41E+03;5.83E+10;0.343;; +590;2.62E-05;1.40E+03;5.66E+10;0.351;; +600;2.68E-05;1.40E+03;5.46E+10;0.359;1.49; +610;2.72E-05;1.40E+03;5.23E+10;0.366;; +635;2.76E-05;1.38E+03;4.60E+10;0.383;; +650;;;;;1.53; +670;2.78E-05;1.37E+03;3.80E+10;0.4;; +700;2.79E-05;1.36E+03;3.15E+10;0.414;1.58; +770;2.79E-05;1.35E+03;2.13E+10;0.438;; +800;2.80E-05;1.35E+03;1.86E+10;0.444;1.66; +900;2.80E-05;1.34E+03;1.26E+10;0.463;1.75; +1000;2.80E-05;1.34E+03;8.70E+09;0.476;1.83; +1100;2.80E-05;1.34E+03;6.00E+09;0.486;1.92; +1200;2.80E-05;1.34E+03;3.80E+09;0.494;2; diff --git a/tests/csv_empty_rows/input/mapping/__init__.py b/tests/csv_empty_rows/input/mapping/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/csv_empty_rows/input/mapping/mapping.json b/tests/csv_empty_rows/input/mapping/mapping.json new file mode 100644 index 00000000..9a5a6d62 --- /dev/null +++ b/tests/csv_empty_rows/input/mapping/mapping.json @@ -0,0 +1,37 @@ +{ + "Coefficient of thermal exapansion[1/K]": { + "iri": "https://w3id.org/steel/ProcessOntology/ThermalExpansionCoefficient", + "key": "Coefficient of thermal exapansion[1/K]", + "unit": "https://qudt.org/vocab/unit/PERCENT-PER-K" + }, + "Density[kg/m3]": { + "iri": "https://w3id.org/steel/ProcessOntology/MassDensity", + "key": "Density[kg/m3]", + "unit": "http://qudt.org/vocab/unit/KiloGM-PER-M3" + }, + "Poison's ratio[-]": { + "iri": "https://w3id.org/steel/ProcessOntology/PoissonRatio", + "key": "Poison's ratio[-]", + "unit": "https://qudt.org/vocab/unit/NUM" + }, + "Specific heat[J/kgK]": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecificHeatCapacity", + "key": "Specific heat[J/kgK]", + "unit": "http://qudt.org/vocab/unit/J-PER-KiloGM-K" + }, + "Temperature[\u00b0C]": { + "iri": "https://w3id.org/steel/ProcessOntology/Temperature", + "key": "Temperature[\u00b0C]", + "unit": "https://qudt.org/vocab/unit/DEG_C" + }, + "Thermal conductivity[W/mK]": { + "iri": "https://w3id.org/steel/ProcessOntology/ThermalConductivity", + "key": "Thermal conductivity[W/mK]", + "unit": "http://qudt.org/vocab/unit/KiloW-PER-M-K" + }, + "Young's modulus[Pa]": { + "iri": "https://w3id.org/steel/ProcessOntology/ModulusOfElasticity", + "key": "Young's modulus[Pa]", + "unit": "https://qudt.org/vocab/unit/PA" + } +} diff --git a/tests/csv_empty_rows/output/__init__.py b/tests/csv_empty_rows/output/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/csv_empty_rows/output/output_csv_parser.ttl b/tests/csv_empty_rows/output/output_csv_parser.ttl new file mode 100644 index 00000000..7aecc8b2 --- /dev/null +++ b/tests/csv_empty_rows/output/output_csv_parser.ttl @@ -0,0 +1,82 @@ +@prefix csvw: . +@prefix dcterms: . +@prefix fileid: . +@prefix foaf1: . +@prefix qudt: . +@prefix rdfs: . +@prefix xsd: . + +fileid:tableGroup a csvw:TableGroup ; + csvw:table [ a csvw:Table ; + rdfs:label "Time series data" ; + csvw:tableSchema [ a csvw:Schema ; + csvw:column [ a csvw:Column ; + qudt:quantity fileid:Temperature ; + csvw:titles "Temperature[°C]"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-0"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:PoissonRatio ; + csvw:titles "Poison's ratio[-]"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-4"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:MassDensity ; + csvw:titles "Density[kg/m3]"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-6"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:ModulusOfElasticity ; + csvw:titles "Young's modulus[Pa]"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-3"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:ThermalConductivity ; + csvw:titles "Thermal conductivity[W/mK]"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-5"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:SpecificHeatCapacity ; + csvw:titles "Specific heat[J/kgK]"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-2"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:ThermalExpansionCoefficient ; + csvw:titles "Coefficient of thermal exapansion[1/K]"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-1"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ] ] ] . + +fileid:MassDensity a ; + qudt:hasUnit "http://qudt.org/vocab/unit/KiloGM-PER-M3"^^xsd:anyURI . + +fileid:ModulusOfElasticity a ; + qudt:hasUnit "https://qudt.org/vocab/unit/PA"^^xsd:anyURI . + +fileid:PoissonRatio a ; + qudt:hasUnit "https://qudt.org/vocab/unit/NUM"^^xsd:anyURI . + +fileid:SpecificHeatCapacity a ; + qudt:hasUnit "http://qudt.org/vocab/unit/J-PER-KiloGM-K"^^xsd:anyURI . + +fileid:Temperature a ; + qudt:hasUnit "https://qudt.org/vocab/unit/DEG_C"^^xsd:anyURI . + +fileid:ThermalConductivity a ; + qudt:hasUnit "http://qudt.org/vocab/unit/KiloW-PER-M-K"^^xsd:anyURI . + +fileid:ThermalExpansionCoefficient a ; + qudt:hasUnit "https://qudt.org/vocab/unit/PERCENT-PER-K"^^xsd:anyURI . diff --git a/tests/csv_empty_rows/output/output_csv_pipeline.ttl b/tests/csv_empty_rows/output/output_csv_pipeline.ttl new file mode 100644 index 00000000..f721f01c --- /dev/null +++ b/tests/csv_empty_rows/output/output_csv_pipeline.ttl @@ -0,0 +1,89 @@ +@prefix csvw: . +@prefix dcat: . +@prefix dcterms: . +@prefix fileid: . +@prefix foaf1: . +@prefix qudt: . +@prefix rdfs: . +@prefix xsd: . + +fileid:dataset a dcat:Dataset ; + dcterms:hasPart fileid:tableGroup ; + dcat:distribution [ a dcat:Distribution ; + dcat:accessURL "https://www.example.org/download"^^xsd:anyURI ; + dcat:mediaType "http://www.iana.org/assignments/media-types/text/csv"^^xsd:anyURI ] . + +fileid:MassDensity a ; + qudt:hasUnit "http://qudt.org/vocab/unit/KiloGM-PER-M3"^^xsd:anyURI . + +fileid:ModulusOfElasticity a ; + qudt:hasUnit "https://qudt.org/vocab/unit/PA"^^xsd:anyURI . + +fileid:PoissonRatio a ; + qudt:hasUnit "https://qudt.org/vocab/unit/NUM"^^xsd:anyURI . + +fileid:SpecificHeatCapacity a ; + qudt:hasUnit "http://qudt.org/vocab/unit/J-PER-KiloGM-K"^^xsd:anyURI . + +fileid:Temperature a ; + qudt:hasUnit "https://qudt.org/vocab/unit/DEG_C"^^xsd:anyURI . + +fileid:ThermalConductivity a ; + qudt:hasUnit "http://qudt.org/vocab/unit/KiloW-PER-M-K"^^xsd:anyURI . + +fileid:ThermalExpansionCoefficient a ; + qudt:hasUnit "https://qudt.org/vocab/unit/PERCENT-PER-K"^^xsd:anyURI . + +fileid:tableGroup a csvw:TableGroup ; + csvw:table [ a csvw:Table ; + rdfs:label "Time series data" ; + csvw:tableSchema [ a csvw:Schema ; + csvw:column [ a csvw:Column ; + qudt:quantity fileid:Temperature ; + csvw:titles "Temperature[°C]"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-0"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:SpecificHeatCapacity ; + csvw:titles "Specific heat[J/kgK]"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-2"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:ThermalConductivity ; + csvw:titles "Thermal conductivity[W/mK]"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-5"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:MassDensity ; + csvw:titles "Density[kg/m3]"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-6"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:ModulusOfElasticity ; + csvw:titles "Young's modulus[Pa]"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-3"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:ThermalExpansionCoefficient ; + csvw:titles "Coefficient of thermal exapansion[1/K]"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-1"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:PoissonRatio ; + csvw:titles "Poison's ratio[-]"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-4"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ] ] ] . diff --git a/tests/csv_empty_rows/test_parser.py b/tests/csv_empty_rows/test_parser.py new file mode 100644 index 00000000..06866046 --- /dev/null +++ b/tests/csv_empty_rows/test_parser.py @@ -0,0 +1,67 @@ +"""Test the csv parser when rows might be empty""" + +import os + +test_folder = os.path.dirname(os.path.abspath(__file__)) +working_folder = os.path.join(test_folder, "input") +output_folder = os.path.join(test_folder, "output") + +mapping_folder = os.path.join(working_folder, "mapping") +raw_data = os.path.join(working_folder, "data", "data.csv") +expected = os.path.join(output_folder, "output_csv_parser.ttl") + +parser_args = { + "time_series_sep": ";", + "metadata_length": 0, + "time_series_header_length": 1, + "drop_na": False, +} + +columns = [ + "Temperature", + "ThermalExpansionCoefficient", + "SpecificHeatCapacity", + "ModulusOfElasticity", + "PoissonRatio", + "ThermalConductivity", + "MassDensity", +] + + +config = {"graph_identifier": "https://www.example.org"} + + +def test_csv_nan_vals() -> None: + from rdflib import Graph + + from data2rdf import QuantityMapping + from data2rdf.parsers import CSVParser + + parser = CSVParser( + raw_data=raw_data, + mapping=os.path.join(mapping_folder, "mapping.json"), + **parser_args, + config=config, + ) + + expected_graph = Graph() + expected_graph.parse(expected) + + assert len(parser.general_metadata) == 0 + + assert len(parser.time_series_metadata) == 7 + for row in parser.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(parser.time_series.columns) == 7 + assert sorted(list(parser.time_series.columns)) == sorted(columns) + + for name, column in parser.time_series.items(): + assert len(column) == 31 + + assert parser.graph.isomorphic(expected_graph) + assert parser.plain_metadata == {} + + +if __name__ == "__main__": + test_csv_nan_vals() diff --git a/tests/csv_empty_rows/test_pipeline.py b/tests/csv_empty_rows/test_pipeline.py new file mode 100644 index 00000000..0ea944a9 --- /dev/null +++ b/tests/csv_empty_rows/test_pipeline.py @@ -0,0 +1,74 @@ +"""CSV Pipeline pytest""" + +import os + +test_folder = os.path.dirname(os.path.abspath(__file__)) +working_folder = os.path.join(test_folder, "input") +output_folder = os.path.join(test_folder, "output") + +mapping_folder = os.path.join(working_folder, "mapping") +raw_data = os.path.join(working_folder, "data", "data.csv") +expected = os.path.join(output_folder, "output_csv_pipeline.ttl") + + +parser_args = { + "time_series_sep": ";", + "metadata_length": 0, + "time_series_header_length": 1, + "drop_na": False, +} + +columns = [ + "Temperature", + "ThermalExpansionCoefficient", + "SpecificHeatCapacity", + "ModulusOfElasticity", + "PoissonRatio", + "ThermalConductivity", + "MassDensity", +] + +config = {"graph_identifier": "https://www.example.org"} + + +def test_csv_na_values_pipeline() -> None: + from rdflib import Graph + + from data2rdf import ( # isort:skip + AnnotationPipeline, + Parser, + QuantityMapping, + ) + + pipeline = AnnotationPipeline( + raw_data=raw_data, + mapping=os.path.join(mapping_folder, "mapping.json"), + parser=Parser.csv, + parser_args=parser_args, + config=config, + ) + + expected_graph = Graph() + expected_graph.parse(expected) + + assert pipeline.graph.isomorphic(expected_graph) + assert str(pipeline.graph.identifier) == config["graph_identifier"] + assert sorted(list(pipeline.time_series.columns)) == sorted(columns) + + assert len(pipeline.general_metadata) == 0 + + assert len(pipeline.time_series_metadata) == 7 + for row in pipeline.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(pipeline.time_series.columns) == 7 + assert sorted(list(pipeline.time_series.columns)) == sorted(columns) + for name, column in pipeline.time_series.items(): + assert len(column) == 31 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert pipeline.graph.isomorphic(expected_graph) + + assert pipeline.plain_metadata == {} diff --git a/tests/csv_pipeline_test/input/data/BAD_DX56_D_FZ2_WR00_43.TXT b/tests/csv_pipeline_test/input/data/BAD_DX56_D_FZ2_WR00_43.TXT new file mode 100755 index 00000000..ed8d0c03 --- /dev/null +++ b/tests/csv_pipeline_test/input/data/BAD_DX56_D_FZ2_WR00_43.TXT @@ -0,0 +1,5757 @@ +"Prüfinstitut" "institute_1" +"Projektnummer" "123456" +"Projektname" "proj_name_1" +"Datum/Uhrzeit" 44335.4 "" +"Maschinendaten" "maschine_1" +"Kraftaufnehmer" "Kraftaufnehmer_1" +"Wegaufnehmer" "Wegaufnehmer_1" +"Prüfnorm" "ISO-XX" +"Werkstoff" "Werkstoff_1" +"Probentyp" "Probentyp_1" +"Prüfer" "abc" +"Probenkennung 2" "Probentyp_2" +"Messlänge Standardweg" 80 "mm" +"Versuchslänge" 120 "mm" +"Probendicke" 1.55 "mm" +"Probenbreite" 20.04 "mm" +"Prüfgeschwindigkeit" 0.1 "mm/s" +"Vorkraft" 2 "MPa" +"Temperatur" 22 "°C" +"Bemerkung" "" +"foo" "bar" +"Prüfzeit" "Standardkraft" "Traversenweg absolut" "Standardweg" "Breitenänderung" "Dehnung" +"s" "N" "mm" "mm" "mm" "mm" +0.902359827 0.576537916 0.261094396 0.767421407 0.950183725 0.035807567 +0.440620562 0.989528723 0.983277189 0.765300358 0.83547718 0.86967659 +0.534511863 0.174351389 0.964046052 0.908144146 0.196001376 0.777251975 +0.077564232 0.483112915 0.043854329 0.235058804 0.162114934 0.17809479 +0.747648914 0.563390673 0.791011895 0.851891125 0.133555843 0.150183086 +0.290519566 0.50761779 0.251250803 0.339549835 0.581404705 0.18957134 +0.94014275 0.019307096 0.000430385 0.334206988 0.796205038 0.284730471 +0.02484182 0.498115846 0.116693561 0.991365858 0.913819806 0.938140356 +0.165443419 0.414653073 0.020563144 0.625691245 0.283343278 0.600546943 +0.548349446 0.452678668 0.069561692 0.511602895 0.463011782 0.556961718 +0.570830493 0.225851614 0.918251233 0.722547001 0.785348411 0.286103893 +0.073946108 0.428404178 0.835742251 0.889219267 0.030228149 0.773432393 +0.1621075 0.64351969 0.12520841 0.761580371 0.738473107 0.462466552 +0.811681943 0.838398394 0.26663855 0.170984692 0.495202553 0.510563428 +0.150012552 0.978613715 0.14637605 0.966269168 0.417332062 0.513575745 +0.123542444 0.495876027 0.254010966 0.589699366 0.118804964 0.255007671 +0.794738327 0.742086696 0.218257188 0.081672798 0.845851413 0.528595926 +0.852535724 0.635215572 0.356998387 0.903553291 0.674848966 0.765053353 +0.249024943 0.063416113 0.352951048 0.337906162 0.556927105 0.713662477 +0.021247674 0.324737741 0.842564632 0.858725987 0.830083383 0.436358841 +0.862319962 0.50346146 0.325682291 0.296748993 0.366532601 0.736979846 +0.370424678 0.939685724 0.125268479 0.364249044 0.594707724 0.930456983 +0.455902161 0.114160663 0.604140716 0.8643204 0.404614632 0.910292715 +0.736170125 0.810372508 0.041147344 0.010189088 0.080704342 0.69689396 +0.906373109 0.715680068 0.810994867 0.016184938 0.975821032 0.487966511 +0.566349554 0.485935838 0.409727571 0.246711757 0.084176983 0.476156344 +0.592852828 0.199803323 0.729168999 0.081817369 0.237756302 0.494651507 +0.981403142 0.697789686 0.570618379 0.986328767 0.067223911 0.007781463 +0.505596487 0.829063897 0.772455955 0.126366357 0.711561497 0.808458224 +0.379653636 0.000693422 0.417227695 0.523411795 0.057363331 0.283976831 +0.655103133 0.171898406 0.294676142 0.49665724 0.869817791 0.809847174 +0.296318318 0.409286464 0.710480249 0.500099951 0.283969409 0.774395259 +0.708826975 0.525230998 0.176572896 0.425845525 0.493184379 0.083267575 +0.517276564 0.894084968 0.537938184 0.074662302 0.636032697 0.485683788 +0.871099986 0.067549198 0.218696916 0.732117713 0.829432854 0.477756114 +0.935911598 0.966898143 0.132087724 0.049101637 0.595376252 0.683842228 +0.467912526 0.229079497 0.027447832 0.986074298 0.037083998 0.066855603 +0.754828719 0.867355351 0.611279301 0.386333807 0.062603554 0.335094071 +0.764533065 0.338859628 0.862559726 0.798457814 0.158243567 0.789056382 +0.696969273 0.149126119 0.796445387 0.308111652 0.613286105 0.599729088 +0.249782909 0.62777788 0.626122113 0.590353951 0.557471016 0.706057847 +0.390856772 0.730972848 0.623643662 0.441773622 0.354053992 0.728961922 +0.885168252 0.936287148 0.701422943 0.181552023 0.195590682 0.431028329 +0.60507147 0.140129289 0.787857006 0.348270812 0.964353907 0.447156006 +0.361807288 0.923182448 0.565764715 0.165418825 0.029994153 0.798772487 +0.685126591 0.556100307 0.58887119 0.46167019 0.458856921 0.807394603 +0.404687991 0.180797024 0.394747245 0.253235209 0.079893716 0.86827847 +0.003624897 0.120396342 0.397884475 0.721005634 0.553229223 0.9370079 +0.413796146 0.603728497 0.007277489 0.891226297 0.506676024 0.149997587 +0.394977023 0.07935689 0.045790312 0.100602372 0.087874 0.830931242 +0.964785186 0.146688444 0.940867331 0.446931061 0.433277039 0.211510339 +0.647087772 0.539527855 0.833360205 0.356668523 0.42142238 0.366811165 +0.28588578 0.701161514 0.870898489 0.762270438 0.304023044 0.833429581 +0.336364994 0.47173624 0.05382454 0.597993043 0.487900845 0.463269535 +0.786968856 0.935410855 0.433411261 0.857798797 0.817145214 0.269755023 +0.178637514 0.020038322 0.380612182 0.629796094 0.754382847 0.45217044 +0.585453549 0.641289732 0.63288581 0.359137357 0.633951342 0.870899505 +0.182297835 0.834666445 0.261712821 0.528885833 0.946687458 0.12214314 +0.015973255 0.560404595 0.685077335 0.560443932 0.352838162 0.772450137 +0.597244185 0.754281081 0.702237594 0.578895334 0.02867277 0.668132885 +0.340609673 0.01506623 0.743160432 0.281589928 0.276667647 0.430116064 +0.020215079 0.207442477 0.720955414 0.687811949 0.198984787 0.167078361 +0.587354648 0.731158688 0.145542877 0.730388651 0.942424187 0.554627137 +0.521758691 0.145173127 0.017609469 0.001866328 0.007616135 0.169434213 +0.412188114 0.586760792 0.44207192 0.333614749 0.432728427 0.40851315 +0.982378012 0.03881787 0.914307202 0.67608573 0.094454709 0.022774347 +0.39315298 0.552151691 0.539846806 0.174060697 0.109607167 0.324494635 +0.987792955 0.895492195 0.756642664 0.965643781 0.40151362 0.926631888 +0.079705103 0.426056374 0.610921917 0.266260487 0.027913059 0.520714611 +0.168059686 0.724412927 0.155664398 0.757204351 0.061013696 0.168590901 +0.461887626 0.923737785 0.174806538 0.538426565 0.722245859 0.618261024 +0.691111134 0.692714814 0.970808122 0.17985437 0.739531568 0.255061379 +0.421532539 0.340063619 0.997343476 0.315691693 0.920892947 0.429237566 +0.510971683 0.700209855 0.488484546 0.888455233 0.034034013 0.321862788 +0.54879229 0.267732025 0.278500602 0.850714315 0.671120914 0.120990182 +0.50968898 0.3858269 0.639362879 0.558074075 0.513897567 0.861285446 +0.411560532 0.192405134 0.216240341 0.81831773 0.398976244 0.443007316 +0.118882332 0.659194328 0.191027469 0.704801605 0.808960609 0.442540436 +0.819994104 0.580573649 0.891869415 0.729357349 0.317040664 0.712975127 +0.318672864 0.304154668 0.822036144 0.39481871 0.415913448 0.937029036 +0.599160851 0.810834054 0.150632514 0.867168204 0.406698528 0.804147104 +0.988705142 0.104199029 0.261440753 0.879186709 0.347024156 0.415849013 +0.422452417 0.55937001 0.666976383 0.179885996 0.793477736 0.800826153 +0.429899124 0.384307958 0.780350352 0.508673742 0.005135768 0.122665959 +0.469480415 0.13047312 0.083720393 0.140545911 0.449380913 0.798358629 +0.770941102 0.685743445 0.520940085 0.073272187 0.014488468 0.3521169 +0.522667671 0.327917424 0.884013015 0.115648202 0.620112725 0.806460871 +0.339625635 0.678949633 0.220686119 0.551812858 0.806969373 0.882507957 +0.976623805 0.375408793 0.284026824 0.217966654 0.426386444 0.434240513 +0.135327239 0.990623412 0.939514965 0.626143842 0.245025994 0.393598949 +0.051826795 0.611728348 0.395092632 0.198482559 0.031037114 0.365826955 +0.868026469 0.705410572 0.917384139 0.095436467 0.174233963 0.537698164 +0.423424513 0.937255109 0.325801452 0.536714062 0.114534693 0.75795815 +0.71497439 0.784329043 0.446368609 0.578983281 0.7178906 0.714070824 +0.996559983 0.27236968 0.125658409 0.222475075 0.548154 0.891240823 +0.214621472 0.584874654 0.228701414 0.443078292 0.486757959 0.62439726 +0.078566723 0.413866342 0.731593564 0.130645812 0.243271043 0.828394104 +0.036388415 0.777367332 0.84347512 0.056626761 0.073308057 0.551381195 +0.294309698 0.309208456 0.254623977 0.201853431 0.214878535 0.040514978 +0.271422452 0.648333553 0.35955653 0.245998233 0.294313784 0.355631603 +0.340719813 0.126395243 0.022886494 0.035901999 0.561383626 0.220916706 +0.284522786 0.349836146 0.198029567 0.619871871 0.263590792 0.414370267 +0.08321737 0.52503655 0.910969252 0.119452399 0.699596056 0.513898696 +0.758752985 0.483869784 0.741635992 0.789562384 0.258940946 0.405348314 +0.456051719 0.788796151 0.298620137 0.187820397 0.011578177 0.960439386 +0.667679157 0.093194606 0.800431418 0.864336187 0.211920568 0.842467293 +0.652568837 0.093279043 0.056859267 0.434962652 0.315323559 0.565676377 +0.159399733 0.058009499 0.759476083 0.417198683 0.364790446 0.880706858 +0.359472833 0.759023994 0.954644536 0.146798513 0.092888398 0.209601489 +0.752567897 0.539937839 0.881771367 0.029287598 0.295006544 0.7598312 +0.436300973 0.951384776 0.681088981 0.179035176 0.21081277 0.241002793 +0.538780655 0.121510665 0.482125634 0.303278045 0.467426755 0.655998378 +0.066042282 0.705525522 0.009070403 0.290114276 0.342311112 0.188491236 +0.794069356 0.66044968 0.516399298 0.132041062 0.161666064 0.76129108 +0.426095491 0.958772445 0.162713974 0.23033631 0.588903794 0.944461802 +0.596328054 0.924271932 0.967548381 0.326497478 0.271300796 0.969240499 +0.018741682 0.98098788 0.255791021 0.727313499 0.813806864 0.790396273 +0.829263039 0.278063236 0.210032102 0.798700391 0.803932614 0.367642208 +0.925112557 0.415525673 0.995768401 0.182638715 0.864505917 0.909787587 +0.008597503 0.814206764 0.706147021 0.835623252 0.279352006 0.841723784 +0.30941995 0.199355141 0.844047819 0.933741057 0.137620431 0.378622083 +0.302510973 0.911614748 0.97524547 0.99221014 0.136097368 0.328493151 +0.677979383 0.275695188 0.722349083 0.046964685 0.633612902 0.059475342 +0.626611481 0.745900375 0.690677356 0.174367103 0.883517029 0.078625911 +0.885318427 0.799849524 0.711740912 0.899924294 0.093247035 0.724223545 +0.364330636 0.456804369 0.497659229 0.956368387 0.941721277 0.598574379 +0.552211786 0.063881859 0.623878629 0.168151993 0.507509245 0.786835938 +0.458304588 0.073038905 0.46466642 0.253475948 0.49539488 0.303640601 +0.86435477 0.039066958 0.845259283 0.962861098 0.384144242 0.416779289 +0.415471279 0.741553407 0.334057863 0.214795998 0.016792437 0.809818189 +0.695753758 0.475502044 0.733678497 0.180797089 0.661259182 0.257540717 +0.459512325 0.965061652 0.069084726 0.128219013 0.133880838 0.22786068 +0.588060431 0.451333737 0.384950102 0.143199507 0.442045566 0.641440515 +0.334035985 0.216289722 0.274692265 0.511016211 0.875975547 0.609876884 +0.608257966 0.134959925 0.63559592 0.498632717 0.16933581 0.249707524 +0.596057232 0.536352098 0.394067424 0.248860628 0.977025857 0.80658459 +0.689771919 0.989120689 0.07467357 0.70186726 0.823033573 0.552272496 +0.895740025 0.859264919 0.387956107 0.940037428 0.400689933 0.953834291 +0.484925444 0.087294137 0.543132022 0.167162597 0.796240925 0.676889361 +0.804543214 0.542379816 0.898933121 0.438567402 0.697972718 0.270304788 +0.104393891 0.385656086 0.462436437 0.344543755 0.23492118 0.782379869 +0.277829237 0.564781588 0.867922413 0.630834779 0.238436896 0.478038149 +0.697316618 0.406582816 0.940477098 0.883456222 0.049695121 0.987977599 +0.992316922 0.440408072 0.231511108 0.481699125 0.30466503 0.804267217 +0.104971027 0.309404671 0.381946146 0.773283876 0.105455124 0.478768871 +0.806577172 0.892811635 0.451103181 0.287895558 0.389792227 0.256216743 +0.105813949 0.207754415 0.491326356 0.990249778 0.68624676 0.189070813 +0.327859264 0.414222882 0.896811046 0.573332196 0.602182524 0.552937862 +0.207796177 0.369035141 0.106224914 0.42142184 0.134703765 0.91421542 +0.763571589 0.239793384 0.247960883 0.512017483 0.653734549 0.357903482 +0.33235685 0.885006503 0.329076228 0.250911396 0.717969197 0.287863956 +0.382958002 0.036697826 0.968179952 0.605429666 0.248024576 0.969368844 +0.035033189 0.923051938 0.520099686 0.140489445 0.695447422 0.823047863 +0.706009152 0.379600836 0.10801097 0.249186808 0.679876963 0.930760414 +0.988647723 0.307735777 0.523665721 0.882428276 0.411676332 0.154286621 +0.436099617 0.936678937 0.019693628 0.035149895 0.812346765 0.157321153 +0.662534142 0.427360856 0.944182558 0.247899796 0.932244301 0.06060919 +0.468194049 0.453786562 0.429619467 0.326648045 0.251450613 0.824550269 +0.17103503 0.51136242 0.864834998 0.190707083 0.594986532 0.86050901 +0.292613124 0.48202254 0.616472087 0.516821956 0.011771744 0.507523196 +0.954640602 0.11713839 0.12394835 0.636274639 0.787832924 0.408435988 +0.573662056 0.30823071 0.239604995 0.18466576 0.589753763 0.89364204 +0.006246685 0.27983933 0.89586351 0.625364518 0.446608661 0.623042047 +0.405576717 0.212401072 0.529391567 0.195144627 0.855981937 0.466580934 +0.872347389 0.106142669 0.477662976 0.303958359 0.264383792 0.324783343 +0.182441292 0.698950573 0.248644977 0.705191808 0.342380988 0.855669505 +0.912305273 0.604536013 0.929196382 0.233416058 0.415894193 0.513469606 +0.936222625 0.559389491 0.350123029 0.248294215 0.145873894 0.802544211 +0.178640671 0.405259343 0.079121252 0.753122462 0.659697779 0.103718003 +0.475250566 0.704529385 0.118386966 0.648102742 0.624158053 0.686733425 +0.543420792 0.782431653 0.234066853 0.511300485 0.136024449 0.558252241 +0.516027472 0.329935976 0.582415802 0.332845481 0.256728957 0.861560068 +0.370856826 0.625547525 0.515397559 0.000756994 0.623136808 0.397455493 +0.881865601 0.357263705 0.726150224 0.917922131 0.546650435 0.416972152 +0.503844591 0.969008884 0.91827173 0.441934981 0.18128912 0.725773268 +0.926499858 0.933171032 0.083857493 0.156217788 0.589026986 0.462545505 +0.130180212 0.091966997 0.761352576 0.142331782 0.036314854 0.602530489 +0.924355221 0.283681905 0.812938779 0.211920138 0.372658464 0.109065531 +0.278621496 0.968276023 0.651084582 0.492240213 0.261479689 0.215483429 +0.046718278 0.874615867 0.035383932 0.821143719 0.873247687 0.57203111 +0.789333153 0.763946841 0.324166501 0.572076455 0.969504417 0.845172252 +0.541249531 0.685946654 0.494807458 0.668450577 0.566579897 0.897383561 +0.06072166 0.832715443 0.281432939 0.859100377 0.374931408 0.55396272 +0.715374543 0.676710442 0.229167666 0.059197704 0.50908922 0.150098888 +0.898140952 0.151420588 0.906983163 0.893381346 0.899222411 0.347574822 +0.72055902 0.673032181 0.717806901 0.372563212 0.931281213 0.053497689 +0.14039226 0.566321783 0.46488891 0.273340325 0.471464128 0.468247217 +0.330906641 0.370288858 0.793193505 0.253746647 0.30234032 0.599794014 +0.324334126 0.938863652 0.491261556 0.20235775 0.812098897 0.410516859 +0.474643976 0.044059933 0.824845649 0.008808479 0.772925506 0.921598286 +0.270535288 0.114076234 0.607778867 0.925237981 0.916483847 0.942927534 +0.239125901 0.005607397 0.983545277 0.214795449 0.138801465 0.906365816 +0.059498868 0.456883984 0.730142056 0.218342343 0.984003481 0.766913363 +0.745888321 0.412120385 0.587788219 0.47860767 0.828060186 0.688553174 +0.834222436 0.820451834 0.912976973 0.633490118 0.352250886 0.460690493 +0.970952184 0.541368054 0.200609863 0.783319694 0.773540276 0.182969162 +0.476391946 0.267931295 0.706836107 0.656193096 0.576963025 0.268209061 +0.285574981 0.946529743 0.722605078 0.440590811 0.432830087 0.976636356 +0.698021404 0.286095289 0.478515845 0.684216414 0.375649057 0.959318846 +0.395510983 0.533500407 0.303680088 0.866706594 0.715701055 0.630847714 +0.659678403 0.312324721 0.000583207 0.815394425 0.14557803 0.655130694 +0.274668761 0.693508001 0.267684647 0.233902319 0.305037685 0.0093884 +0.07812501 0.357138824 0.90331823 0.253718309 0.089540631 0.048223761 +0.979318287 0.422420103 0.396921447 0.857485066 0.09121446 0.938641766 +0.538977866 0.052329053 0.091285862 0.076005553 0.647211546 0.824086849 +0.096734887 0.133185114 0.989251952 0.697266915 0.388393828 0.706757115 +0.258656519 0.013935459 0.547658194 0.58294739 0.508564986 0.905680452 +0.195773602 0.932315665 0.529498903 0.951356827 0.166069074 0.255013525 +0.478244077 0.33533616 0.677566613 0.687047307 0.397093153 0.958913708 +0.874683546 0.532383616 0.235906892 0.174066653 0.968958698 0.961368054 +0.245946743 0.775684102 0.673534955 0.587170523 0.450394097 0.033497621 +0.202935779 0.227115453 0.504306683 0.302745462 0.967449809 0.176016938 +0.352526946 0.100215106 0.598328812 0.986024982 0.826530935 0.474761774 +0.367762654 0.236342648 0.526030518 0.47883104 0.044363127 0.80808919 +0.35859226 0.244857967 0.137204273 0.489119065 0.123409705 0.770861895 +0.213468372 0.785745396 0.002724154 0.591422971 0.816785298 0.927637111 +0.592321216 0.807728004 0.010701393 0.12870086 0.54165755 0.979772441 +0.687177191 0.209143597 0.840229761 0.8400181 0.403977428 0.300688109 +0.334435551 0.908110559 0.330432842 0.744776914 0.019050995 0.154479395 +0.017156195 0.934478579 0.838785393 0.492123695 0.448390546 0.125095314 +0.095529662 0.397557283 0.087411629 0.726130278 0.078739875 0.391443888 +0.966371577 0.64541292 0.122430984 0.17003524 0.543147034 0.275508723 +0.461601198 0.625020962 0.364312914 0.454331172 0.577679672 0.861448614 +0.284006291 0.952671836 0.269881317 0.181746818 0.077864775 0.054803674 +0.083561303 0.287584609 0.344246874 0.902679364 0.068360758 0.572421248 +0.901063546 0.345208854 0.007793485 0.619514908 0.946805543 0.354566663 +0.565360372 0.237234715 0.264569874 0.102818266 0.167917192 0.083318064 +0.389965376 0.738279346 0.686058398 0.176126919 0.602917002 0.451704359 +0.202456505 0.062762434 0.715307691 0.311784389 0.902388035 0.407003115 +0.777645321 0.456901264 0.599437858 0.517634797 0.70569771 0.058142961 +0.533863765 0.170818939 0.664197205 0.391261403 0.696338474 0.924094765 +0.077582728 0.062246326 0.344344398 0.121676283 0.890470823 0.736753363 +0.140906294 0.278813988 0.598257609 0.781901454 0.090242877 0.894434116 +0.603620894 0.00133196 0.431129879 0.823608432 0.03435085 0.37260212 +0.149267104 0.840080037 0.538661069 0.403103529 0.803140008 0.957599554 +0.354048886 0.607685292 0.041263077 0.733734439 0.021304759 0.680844715 +0.61698367 0.261143151 0.567605716 0.36438394 0.53102163 0.177803122 +0.87358544 0.433394807 0.215924463 0.85251563 0.036654314 0.654194513 +0.58758548 0.565357066 0.038625995 0.467981173 0.033378798 0.355194978 +0.884227386 0.375383376 0.944929573 0.201684696 0.316618681 0.875416523 +0.417703727 0.915848931 0.821427362 0.329992373 0.073173415 0.10768813 +0.08562677 0.544386307 0.214899343 0.645785328 0.243903915 0.044370624 +0.166373481 0.346149221 0.635179628 0.139567028 0.045041477 0.335599881 +0.25645172 0.121606653 0.763105641 0.587759164 0.855144482 0.496656277 +0.352497317 0.593576872 0.602885251 0.441429707 0.773191185 0.735758785 +0.520995063 0.416834809 0.482873278 0.087771803 0.688157653 0.619538794 +0.770915833 0.470334854 0.599351936 0.438275591 0.18888284 0.367346451 +0.84183971 0.720289157 0.504396765 0.001593025 0.200707325 0.845473637 +0.297719653 0.216306732 0.00186291 0.916438518 0.760603159 0.804926248 +0.633693013 0.349349062 0.529430155 0.907056538 0.477080607 0.751763599 +0.226664355 0.121241349 0.82923231 0.822714446 0.998024293 0.688228307 +0.664007662 0.764433639 0.854980308 0.15281391 0.375814211 0.370759832 +0.752757085 0.436916567 0.817261617 0.425650489 0.405674794 0.619646665 +0.006227907 0.081253358 0.736606512 0.913745429 0.493169768 0.15143659 +0.043817253 0.026672528 0.629509257 0.58442389 0.02377955 0.068004422 +0.252913106 0.267180047 0.565006306 0.435639423 0.444647689 0.271509287 +0.996527489 0.40741256 0.451320818 0.919580717 0.600961843 0.299669248 +0.369664536 0.992908376 0.292349671 0.783551534 0.807607172 0.162874258 +0.821655641 0.143672097 0.129724247 0.192739388 0.884643482 0.846788776 +0.174674132 0.084026122 0.670739764 0.248644327 0.328711393 0.566712862 +0.030729397 0.945998203 0.774810241 0.389176289 0.763101841 0.329017313 +0.517801066 0.012074654 0.407765509 0.538665189 0.878972324 0.272769164 +0.237784608 0.415069237 0.778236422 0.402254719 0.177890317 0.198030855 +0.228841547 0.327791851 0.791465868 0.405491696 0.213906737 0.042888831 +0.792101042 0.758638106 0.542701073 0.197115045 0.548515014 0.489468395 +0.597970772 0.046487167 0.23356609 0.641711459 0.003021679 0.0648601 +0.593026769 0.107454907 0.240604081 0.751169339 0.231461343 0.466537167 +0.401358649 0.28296158 0.355450844 0.640964304 0.406326658 0.350613229 +0.05777478 0.387799722 0.224646849 0.098794691 0.190970409 0.945054945 +0.973016499 0.755169783 0.851695889 0.361420088 0.433194796 0.85566326 +0.091477801 0.974661199 0.483417752 0.285499351 0.849093141 0.667300706 +0.647888836 0.603870423 0.562550298 0.510475893 0.404565351 0.747290762 +0.586466917 0.539001312 0.819378948 0.979938383 0.832778571 0.680178785 +0.808367852 0.917870267 0.410157837 0.524487197 0.024258034 0.392063422 +0.236970339 0.097487499 0.79918925 0.477058458 0.891268973 0.805119687 +0.037903069 0.490849644 0.981874047 0.512485074 0.657454223 0.593635682 +0.548025394 0.231067032 0.079097364 0.799020968 0.456077549 0.481957891 +0.706983622 0.860816473 0.69678374 0.906239424 0.165714017 0.563385479 +0.963003137 0.050799883 0.754911001 0.691769997 0.469645988 0.780558022 +0.670341068 0.870067204 0.165696066 0.887480519 0.506449636 0.239813389 +0.260198117 0.010455572 0.004211535 0.904952881 0.512037604 0.795006132 +0.725866245 0.49115863 0.937855458 0.770910714 0.759918801 0.526562714 +0.398447738 0.957562395 0.739840437 0.625076317 0.657907933 0.769045558 +0.506861238 0.156595482 0.460197605 0.895507806 0.744218149 0.594237627 +0.145598459 0.078407514 0.408721362 0.918241892 0.172566386 0.441445866 +0.52256563 0.398826259 0.253446618 0.186664566 0.70799968 0.869187216 +0.004168073 0.872406245 0.728213065 0.162894325 0.965032604 0.053818005 +0.068384642 0.499366973 0.933791094 0.733206028 0.504958351 0.834500396 +0.917455082 0.983371753 0.788598063 0.2231365 0.432050209 0.391304241 +0.20789929 0.00841191 0.552049224 0.341204061 0.595413081 0.294981397 +0.250787181 0.563421182 0.417935878 0.820579929 0.004863509 0.486634621 +0.802113145 0.032519838 0.796461371 0.810428591 0.395058008 0.91576744 +0.935913654 0.436687725 0.532052547 0.381332016 0.893887983 0.066874389 +0.895136713 0.47166716 0.773688059 0.878446529 0.332941146 0.151142431 +0.319680189 0.965357371 0.617128394 0.485682784 0.147044811 0.932033931 +0.437257819 0.983859248 0.948214397 0.543981855 0.945485527 0.780801206 +0.965972442 0.238174049 0.970040395 0.222068139 0.157223116 0.554095694 +0.152334175 0.50201667 0.910660304 0.719737775 0.358852533 0.256366045 +0.974518962 0.077318488 0.924021755 0.087311604 0.884680175 0.459152178 +0.971031451 0.034396464 0.092980237 0.951999661 0.668182713 0.528681872 +0.10599612 0.888750795 0.748625396 0.84379982 0.712564398 0.9187475 +0.306365013 0.192516082 0.420765499 0.265771191 0.595036672 0.604605306 +0.889590216 0.276788388 0.58282546 0.128993321 0.245649404 0.875480402 +0.493862584 0.228528267 0.916933374 0.812676843 0.361426515 0.09823843 +0.308219783 0.701210307 0.84541716 0.6309272 0.404177234 0.994033258 +0.777332621 0.187903007 0.152155265 0.521960028 0.500329505 0.611797464 +0.644111454 0.858629439 0.242717867 0.869044673 0.576222921 0.571141535 +0.710025179 0.143779112 0.66494659 0.87767073 0.362759089 0.323553975 +0.467278297 0.654859934 0.262961369 0.536260394 0.677661354 0.293021164 +0.822074666 0.069826748 0.193474903 0.711632273 0.691229558 0.414282086 +0.720565713 0.004545045 0.082594808 0.424552421 0.789442407 0.00723548 +0.737124324 0.164543222 0.581777714 0.04078816 0.479085042 0.820568634 +0.385659602 0.997011078 0.612527643 0.255350425 0.790722219 0.476732844 +0.03536632 0.227391095 0.884784834 0.140458845 0.120308165 0.897594162 +0.98349719 0.743451135 0.851168387 0.149059667 0.408865952 0.832035 +0.892691734 0.418235211 0.44312453 0.290782871 0.32245663 0.624190049 +0.764821372 0.960391829 0.425143441 0.719823029 0.152289995 0.366709118 +0.097446856 0.380589551 0.296285617 0.702053778 0.327999101 0.126790138 +0.087748801 0.72544363 0.883383203 0.800904507 0.550527441 0.851637433 +0.411220586 0.272384305 0.924627724 0.062350747 0.224829017 0.002192718 +0.599153917 0.04422759 0.59142047 0.554716698 0.635518736 0.625163253 +0.388083627 0.939877406 0.160113849 0.302680866 0.302468705 0.538592606 +0.302992608 0.02727071 0.699512507 0.610362994 0.778220282 0.350532094 +0.79998756 0.166412907 0.605376356 0.600824632 0.382162951 0.872948332 +0.473226004 0.427229835 0.364859974 0.201410742 0.389514322 0.000136767 +0.552923683 0.870378683 0.834218783 0.480814808 0.108121353 0.676553917 +0.990587073 0.706023741 0.82319081 0.305925427 0.917058337 0.049984376 +0.140340423 0.161766716 0.334700577 0.283908191 0.989882404 0.969257002 +0.865281874 0.923913593 0.18317574 0.370209287 0.432341785 0.969365064 +0.664828127 0.706832208 0.630015151 0.732034087 0.366357944 0.468557504 +0.035797342 0.791024165 0.184855673 0.385214767 0.882928905 0.621808997 +0.581429117 0.318686586 0.133927212 0.042014495 0.621709722 0.095798628 +0.789941701 0.166119285 0.217363128 0.783680182 0.652568616 0.187204017 +0.900324299 0.667806425 0.494556557 0.453175623 0.153098244 0.737916808 +0.135186997 0.330671866 0.536777564 0.554163541 0.619124942 0.894481493 +0.735082511 0.017636469 0.755983445 0.137896774 0.68415628 0.463069879 +0.009068611 0.121244634 0.087229788 0.019569736 0.595010262 0.159438358 +0.303534706 0.861241535 0.958319723 0.580222255 0.049606958 0.819656599 +0.218252677 0.978988651 0.836656141 0.118640562 0.927321408 0.787273951 +0.217978697 0.401935719 0.198751743 0.592339365 0.403109089 0.724402511 +0.38950318 0.79139422 0.50817204 0.09558571 0.374234662 0.941856071 +0.182610203 0.518485985 0.845799051 0.519008905 0.128689713 0.550518146 +0.161620716 0.032223946 0.208337267 0.952769473 0.350965413 0.544003176 +0.797311301 0.08238528 0.637581967 0.30347281 0.805091149 0.064327266 +0.89893987 0.581441755 0.781832384 0.179541791 0.852480806 0.212428847 +0.99145697 0.82348312 0.819449327 0.033320931 0.020517789 0.313786342 +0.51236776 0.223402167 0.504121298 0.970408385 0.647655465 0.955124002 +0.953731567 0.157247476 0.440386865 0.66291103 0.411094428 0.116487179 +0.071946673 0.242310911 0.319478397 0.17107094 0.963546938 0.97611085 +0.708603954 0.056363978 0.60659838 0.947098453 0.946551078 0.9924632 +0.32616346 0.097727605 0.998499713 0.03387367 0.456639419 0.12106857 +0.125151735 0.447643309 0.527377333 0.532702033 0.987577456 0.444859587 +0.537418482 0.132014552 0.052178287 0.300590004 0.59278708 0.776772085 +0.077120844 0.086000282 0.887011963 0.780811071 0.935014942 0.998864084 +0.321854385 0.52985864 0.67008304 0.968116374 0.26195412 0.290333251 +0.889490567 0.883820188 0.695304054 0.442582923 0.034387975 0.892066264 +0.074267533 0.629890111 0.601061869 0.34811223 0.457235119 0.481101339 +0.831598208 0.889875801 0.230655373 0.835347797 0.584096281 0.347279086 +0.226422278 0.12935817 0.869840083 0.440692411 0.162645173 0.662494184 +0.071804651 0.214705866 0.92350895 0.905748311 0.949400926 0.337665833 +0.167907245 0.359624108 0.072549422 0.246884239 0.002391255 0.50845657 +0.504232094 0.903945885 0.371042249 0.858947703 0.202672091 0.213525012 +0.768242446 0.438640908 0.531738535 0.532502829 0.548137924 0.149432768 +0.18390222 0.617463232 0.559128824 0.378284094 0.978617804 0.042938818 +0.493305369 0.786183554 0.354748058 0.987531633 0.035087495 0.104854241 +0.413962254 0.741696664 0.472397999 0.605336995 0.340323185 0.12963062 +0.844384184 0.025497416 0.85982854 0.822339492 0.80243059 0.010924212 +0.518409526 0.528869268 0.180540428 0.013091045 0.184921765 0.039764108 +0.644748105 0.736737922 0.7480409 0.914339356 0.789629775 0.601651673 +0.456272131 0.268913788 0.241392218 0.953858369 0.487103474 0.941162565 +0.69987162 0.107907276 0.116624449 0.461248428 0.799709113 0.126517319 +0.553663982 0.691844519 0.577012121 0.090249267 0.628004011 0.42623753 +0.747385435 0.439496632 0.463182429 0.485825298 0.995295988 0.428993689 +0.091252772 0.159792509 0.504135304 0.049712568 0.411482949 0.479648038 +0.097678883 0.91050282 0.318938347 0.91431329 0.638665177 0.391656113 +0.62836735 0.993790196 0.398320838 0.968682457 0.572838189 0.65150309 +0.027945145 0.690814098 0.704356055 0.516113284 0.015508981 0.524544807 +0.928912571 0.940167821 0.179453733 0.173136925 0.996478197 0.899563875 +0.158430462 0.600121866 0.12507534 0.429697172 0.82326198 0.389940639 +0.225861938 0.175785448 0.467227962 0.617429987 0.124306115 0.017259979 +0.780284347 0.260796839 0.785013463 0.928020176 0.474486685 0.836286538 +0.740191033 0.279951944 0.26571954 0.761756342 0.678000616 0.339636265 +0.458842427 0.817477606 0.837672695 0.633839242 0.58279078 0.4201531 +0.937448907 0.013860865 0.027485858 0.254216144 0.263441111 0.645891705 +0.309474574 0.460274276 0.263365223 0.108722434 0.182752242 0.093828386 +0.546190297 0.748961492 0.483598322 0.963003672 0.758445132 0.063344621 +0.880766223 0.390510101 0.00939017 0.780618523 0.483550267 0.294806564 +0.085460702 0.925330893 0.401940281 0.300231382 0.323231583 0.712414849 +0.563970419 0.935798544 0.777509564 0.830409317 0.094617899 0.155905037 +0.878695098 0.939894966 0.750846421 0.948709782 0.466667013 0.56582314 +0.379589615 0.64898804 0.339299175 0.97306259 0.886791515 0.034658795 +0.889302842 0.558037017 0.888599409 0.171061305 0.396914068 0.795991402 +0.324954922 0.322491097 0.248464396 0.202686204 0.246875138 0.914024795 +0.885185163 0.825301559 0.915609252 0.196311499 0.902790076 0.477379984 +0.882732156 0.427202563 0.082932979 0.654716444 0.463668587 0.341221811 +0.113763029 0.197670904 0.872022001 0.693910071 0.483051246 0.395682745 +0.502166669 0.908552736 0.321405878 0.874853404 0.584227124 0.338832989 +0.241860659 0.795943937 0.174447884 0.635004026 0.639245138 0.989612262 +0.242137854 0.766759628 0.952719562 0.108701549 0.811339134 0.485395759 +0.288598018 0.83153182 0.11316808 0.29256074 0.549091766 0.969521704 +0.228218096 0.955275745 0.020417981 0.496378361 0.769617818 0.872405771 +0.470366628 0.736788665 0.62921468 0.125427896 0.268326368 0.541073892 +0.464029025 0.201160704 0.400055076 0.259734694 0.488926081 0.944119628 +0.222737103 0.243319474 0.476418574 0.100705935 0.834681665 0.91570088 +0.140951631 0.243435946 0.954538944 0.528937812 0.710901066 0.403572953 +0.155559719 0.490795183 0.91466688 0.922215841 0.488065531 0.443972714 +0.121935628 0.867015375 0.934898062 0.426325953 0.865188597 0.444233281 +0.852475235 0.110587706 0.820229323 0.614712496 0.365294716 0.634369846 +0.159115192 0.917815151 0.074377218 0.109617047 0.002372168 0.05809506 +0.492632783 0.005668089 0.856490669 0.66146631 0.525456991 0.60643636 +0.115385976 0.723197864 0.9302034 0.488339934 0.567714581 0.486031164 +0.219129367 0.003653046 0.995519502 0.529023956 0.253446603 0.270807017 +0.930909695 0.593052598 0.103462959 0.069207143 0.247781698 0.368837793 +0.574619456 0.726964301 0.984909218 0.432499828 0.495808351 0.307598287 +0.741877694 0.896303305 0.690559691 0.131215886 0.836899381 0.935303621 +0.411646889 0.417008022 0.194774396 0.021013381 0.189595628 0.877241437 +0.892894952 0.46123144 0.172474403 0.726282429 0.613853469 0.367195225 +0.732517524 0.948265906 0.664910369 0.640876057 0.123795682 0.384686492 +0.35721145 0.130996207 0.333851806 0.373797178 0.869796712 0.612441351 +0.778280279 0.042328523 0.849173454 0.704346352 0.947781281 0.09980451 +0.557545192 0.152797431 0.221998979 0.30490978 0.478611988 0.970926441 +0.467542547 0.6162963 0.599523712 0.675826458 0.8745187 0.447355704 +0.547329953 0.343514493 0.04059344 0.76588794 0.007624427 0.465426244 +0.246791352 0.847062599 0.009346025 0.68450724 0.365841279 0.304147223 +0.585002326 0.085911344 0.987929448 0.462059107 0.642176042 0.944716338 +0.059071854 0.604348626 0.784442126 0.31818086 0.816327197 0.411787625 +0.18414937 0.084417053 0.505133461 0.215274692 0.589574891 0.291268055 +0.578155381 0.997323082 0.990993944 0.861707419 0.793301844 0.009377522 +0.836526414 0.06759294 0.249470758 0.004244678 0.830220696 0.932917307 +0.716450154 0.589895785 0.779368056 0.779778642 0.745400885 0.411623741 +0.570146669 0.189975018 0.653730156 0.065385486 0.403461319 0.399249915 +0.01689439 0.949945286 0.527163639 0.34735028 0.971770903 0.08698034 +0.113426243 0.952029455 0.715083675 0.108643894 0.88633877 0.13043001 +0.020429715 0.375887586 0.805161105 0.770683447 0.82245005 0.423721993 +0.310148111 0.250163749 0.398843352 0.870548259 0.970345395 0.539357734 +0.097974038 0.349907034 0.138990004 0.476488032 0.071993755 0.635259043 +0.778211507 0.396047063 0.881207765 0.357323973 0.945633495 0.328062612 +0.519889382 0.245936642 0.261623496 0.399735978 0.731523279 0.864466004 +0.379593024 0.518713438 0.246223373 0.998273017 0.457530454 0.434941951 +0.688078477 0.10842755 0.641458405 0.85350944 0.626485797 0.126686973 +0.788241933 0.661273825 0.183542116 0.026367126 0.188443613 0.310684506 +0.155930977 0.648605003 0.566942718 0.935456921 0.809344494 0.250947401 +0.868725696 0.879892852 0.061553521 0.196009483 0.65258243 0.194678215 +0.488990872 0.808699649 0.278361783 0.880851382 0.764179529 0.26211711 +0.024796738 0.658889109 0.44495221 0.465795168 0.233364395 0.741429643 +0.565910708 0.972469974 0.704588108 0.873434698 0.685838087 0.29180954 +0.752392619 0.282997653 0.613384431 0.958699928 0.422574288 0.225182647 +0.15887173 0.995976757 0.931185486 0.097678427 0.22940262 0.830871307 +0.251834495 0.804481494 0.14201746 0.312654287 0.202345823 0.19694849 +0.513673121 0.680551188 0.933096858 0.333024264 0.401788753 0.465790898 +0.685339274 0.253083584 0.865211025 0.887433575 0.275154602 0.488491968 +0.807668055 0.380367992 0.087382347 0.460276677 0.18061058 0.468073467 +0.179006975 0.78451498 0.77482625 0.804000714 0.503820837 0.498581061 +0.801415885 0.223646081 0.232619395 0.470771118 0.763548185 0.833292574 +0.688813874 0.841247009 0.581687029 0.021399066 0.903875393 0.334870376 +0.539622509 0.560669593 0.017879578 0.944673982 0.180951612 0.974034398 +0.810605691 0.857689909 0.440330927 0.561700113 0.409100498 0.072735471 +0.22555943 0.517491577 0.780410464 0.337336671 0.021136624 0.513374487 +0.994637343 0.92982989 0.378303903 0.964644241 0.272678501 0.788174403 +0.437395507 0.414950308 0.530228626 0.942218518 0.498719404 0.914525688 +0.904133779 0.298828014 0.467821192 0.760913685 0.143467999 0.068313073 +0.249815502 0.799046982 0.196416691 0.957714597 0.956543932 0.947012118 +0.524049781 0.08369442 0.01992732 0.629624962 0.06603113 0.053702844 +0.32668477 0.557146065 0.670294473 0.686981822 0.272634934 0.459860037 +0.549052772 0.147403157 0.915952747 0.300146038 0.96807427 0.354268375 +0.556862599 0.392478941 0.32595285 0.939826877 0.954680353 0.808755557 +0.554637042 0.0055247 0.591463053 0.077655406 0.942827101 0.269992535 +0.642647172 0.74693401 0.836901175 0.571267632 0.170796249 0.819914735 +0.551331147 0.797843182 0.784420699 0.969965598 0.775072475 0.030868106 +0.22383294 0.803674687 0.370710895 0.834206667 0.376643568 0.133615765 +0.050389651 0.108477809 0.688822405 0.206903203 0.054934446 0.656109474 +0.255401825 0.848460141 0.589641101 0.885993215 0.815405022 0.39833815 +0.863862793 0.731254401 0.705906504 0.918686334 0.37673874 0.957295393 +0.386535028 0.233215677 0.898710879 0.634498259 0.206661672 0.787222407 +0.540874751 0.674894296 0.330346915 0.278226525 0.277853961 0.824657341 +0.171767556 0.663542007 0.552524076 0.580338876 0.093453118 0.70459761 +0.115967986 0.288115321 0.560676463 0.561479867 0.853341903 0.495105098 +0.069562296 0.43764671 0.005634712 0.03328525 0.856596101 0.946887898 +0.610520563 0.608629947 0.688392702 0.998903114 0.082817037 0.451281663 +0.552403409 0.587582303 0.1005782 0.568471223 0.493023317 0.297631583 +0.980596158 0.361295363 0.57315543 0.625013142 0.966170992 0.788190854 +0.631246341 0.213319788 0.589065557 0.071991001 0.103866197 0.845167095 +0.425815011 0.946182838 0.532803336 0.97864376 0.308070542 0.829456359 +0.247629207 0.07726425 0.239558493 0.090214133 0.043199078 0.545704049 +0.261076869 0.879877571 0.995081837 0.661246324 0.622895661 0.108469801 +0.727868175 0.676740602 0.750510726 0.566713355 0.356855644 0.277167937 +0.38451458 0.918496309 0.193663696 0.716505564 0.41216397 0.393458308 +0.331528464 0.097453428 0.830897177 0.679294248 0.240620854 0.244412621 +0.731239822 0.70888437 0.895261749 0.885241587 0.827166495 0.60243994 +0.828770118 0.619103842 0.123712412 0.675707912 0.743415794 0.926928467 +0.501192265 0.107047782 0.719860602 0.147288621 0.251076381 0.794846771 +0.582377166 0.894957318 0.488815875 0.82261741 0.717498425 0.050957593 +0.91247406 0.161145644 0.868599079 0.174419517 0.255250655 0.018235972 +0.525217021 0.277928346 0.975097519 0.848728329 0.957132372 0.696966935 +0.672867443 0.133578774 0.744822066 0.846400059 0.521587996 0.360404733 +0.16042751 0.210511387 0.319748175 0.325603746 0.172669782 0.371187573 +0.990583791 0.331664761 0.075139873 0.454409355 0.944660469 0.179219309 +0.152646184 0.38056148 0.507549588 0.495034596 0.404885685 0.717121861 +0.329827045 0.656743783 0.61029025 0.114097314 0.128294634 0.110497465 +0.347472123 0.689392649 0.421941242 0.047079063 0.55153316 0.886117746 +0.457445278 0.351829313 0.038086494 0.276427597 0.087563931 0.37535789 +0.116682112 0.333560589 0.901743652 0.789422712 0.070014489 0.364008628 +0.337248708 0.623892164 0.814111586 0.0890063 0.724498373 0.929048088 +0.072867188 0.722113549 0.357360856 0.422967207 0.160604339 0.266934969 +0.888031312 0.548790419 0.164400443 0.425125454 0.213769002 0.427795748 +0.00987344 0.246166023 0.17903223 0.217985994 0.206356206 0.42476631 +0.984661745 0.800952572 0.058737409 0.925546432 0.741426793 0.110504467 +0.12139749 0.160760918 0.5436568 0.964658901 0.403050951 0.560330384 +0.07951183 0.898532364 0.940019944 0.705799354 0.020003067 0.531339406 +0.928757931 0.342892061 0.614662035 0.710277136 0.819363553 0.146496937 +0.11295841 0.425383903 0.775271057 0.379391556 0.63951374 0.834574931 +0.508285213 0.400367426 0.901115252 0.320577387 0.30308887 0.148352447 +0.820677118 0.158515868 0.227675583 0.842103346 0.853784017 0.660488901 +0.570904869 0.800479511 0.315954786 0.243515905 0.880651427 0.445002736 +0.279823859 0.445878872 0.488583571 0.997238968 0.286814286 0.603060393 +0.282984309 0.708242672 0.079446223 0.621200877 0.938642747 0.452725474 +0.780426514 0.363584261 0.717992932 0.523485613 0.896085928 0.361497237 +0.807712629 0.474407087 0.792440478 0.067810877 0.588940503 0.03304324 +0.994369221 0.948675866 0.739099131 0.67376904 0.885901418 0.730966735 +0.802599019 0.970500158 0.197848945 0.110467428 0.465177682 0.101662698 +0.881808587 0.441553329 0.528567321 0.092880604 0.712185679 0.34763768 +0.031950683 0.014074372 0.999287437 0.900623741 0.787037196 0.521912545 +0.835905219 0.640797046 0.724398659 0.936082813 0.643313631 0.40632152 +0.972648337 0.031924834 0.790360423 0.963351286 0.099648335 0.409592721 +0.093712752 0.573391717 0.8564201 0.464913567 0.307760561 0.295542438 +0.539400459 0.097910982 0.263889249 0.490737561 0.558079021 0.937511895 +0.155693624 0.916337882 0.764493301 0.113121051 0.635702889 0.738588599 +0.366240832 0.756312722 0.046558236 0.159645791 0.918417326 0.110753681 +0.619114243 0.809348733 0.424509942 0.025473 0.908507371 0.984042697 +0.235127777 0.410689609 0.93320749 0.8308808 0.19426045 0.877599791 +0.333082596 0.815504803 0.727214451 0.426373249 0.798717958 0.12913966 +0.919096745 0.602673346 0.847495231 0.799569796 0.559914769 0.444861654 +0.066263306 0.083591263 0.494849401 0.713867159 0.992938459 0.902143833 +0.081247152 0.922802418 0.76514314 0.840409515 0.430243972 0.421823594 +0.652500323 0.555327384 0.631431744 0.673453949 0.757270373 0.644114723 +0.971348394 0.183351205 0.300093707 0.417637395 0.127413637 0.760717782 +0.371938249 0.090223125 0.293152501 0.459810634 0.799878197 0.176810775 +0.037669454 0.413902444 0.75377045 0.185370122 0.929215923 0.779408777 +0.534282846 0.382379606 0.281474662 0.191266587 0.681806958 0.235463048 +0.731439352 0.427243423 0.611322272 0.077049699 0.447243921 0.078208214 +0.617357622 0.917412034 0.969543463 0.894143222 0.676484114 0.049839021 +0.927550447 0.661937646 0.114345579 0.745038896 0.229050323 0.809722265 +0.340725678 0.9451364 0.170381105 0.543275079 0.494865592 0.681437038 +0.45416161 0.652328263 0.377436724 0.243023556 0.32529143 0.523471663 +0.499569808 0.411145244 0.066358547 0.497442989 0.801484347 0.802382973 +0.948967236 0.868107466 0.115536488 0.333304267 0.034277289 0.009564108 +0.895623548 0.149760098 0.401131035 0.82376857 0.703095421 0.668828468 +0.17986778 0.404245719 0.267702392 0.515763915 0.13383991 0.173141123 +0.223143718 0.53081235 0.444428619 0.096724394 0.087127724 0.663762495 +0.149354062 0.219378623 0.679953401 0.57886684 0.084129558 0.769700919 +0.173324575 0.066204486 0.539739558 0.062753822 0.806031647 0.888679976 +0.825285185 0.116190802 0.227114631 0.227125462 0.12170263 0.436916196 +0.28630527 0.372962203 0.562242663 0.899462884 0.815104337 0.074592466 +0.193254788 0.140960835 0.452663022 0.873381645 0.318780463 0.923867112 +0.732860638 0.723455039 0.252932476 0.715293388 0.775156854 0.485407436 +0.369955092 0.066212954 0.755726748 0.830920799 0.537644218 0.501366116 +0.339624269 0.053204636 0.811311904 0.560323578 0.053331702 0.84991703 +0.799646729 0.251453463 0.786335382 0.493755724 0.64323892 0.152904356 +0.79760619 0.057352014 0.127656401 0.587471972 0.950839731 0.406172158 +0.730585523 0.237674162 0.396991702 0.934206354 0.076757998 0.908644033 +0.77088804 0.350455854 0.456982794 0.622140095 0.454702701 0.870284225 +0.262957885 0.913260193 0.235096451 0.797452492 0.91858217 0.886222681 +0.267102437 0.946252599 0.652540056 0.397080238 0.90816275 0.660804403 +0.066856018 0.257603783 0.741310545 0.029185342 0.328150443 0.895739723 +0.030085509 0.14759922 0.307962075 0.068425718 0.40207172 0.864996308 +0.199589593 0.368272772 0.482862616 0.311586148 0.438629305 0.2223858 +0.883660439 0.470725103 0.499700477 0.392646503 0.29382189 0.868386745 +0.108699017 0.23647921 0.064767221 0.46515943 0.568104616 0.21862851 +0.028247401 0.153622628 0.822962085 0.013728853 0.831031764 0.229416995 +0.434549546 0.591739112 0.636748209 0.088589527 0.615657475 0.415563183 +0.309481104 0.260219993 0.632257783 0.760741281 0.640375878 0.304868202 +0.780329693 0.277823095 0.312376969 0.799981777 0.755546993 0.033487128 +0.936673899 0.949985619 0.388465205 0.11770785 0.307850187 0.491780374 +0.179415675 0.191492026 0.849090043 0.18654437 0.337583929 0.887473133 +0.129452778 0.244445549 0.493670974 0.837456012 0.900150088 0.617608824 +0.261835018 0.711788817 0.300049016 0.319524782 0.532296926 0.881438061 +0.163428654 0.786530722 0.43263763 0.046034922 0.819568519 0.308616679 +0.508386186 0.800045808 0.021575644 0.057298005 0.787936146 0.337491282 +0.152786426 0.309112143 0.140622382 0.528910429 0.58269909 0.668134157 +0.539686926 0.372619406 0.518146437 0.30304617 0.872960025 0.077517149 +0.557681137 0.958079172 0.974872317 0.55397203 0.812037336 0.816696316 +0.476983404 0.447445298 0.690069043 0.916071838 0.016963492 0.740512585 +0.923942533 0.042136751 0.184526428 0.817024724 0.338087765 0.366876021 +0.122281774 0.990326598 0.391313267 0.22985919 0.028832235 0.118528285 +0.058629171 0.901553148 0.698123789 0.206439981 0.312053518 0.428360573 +0.254220806 0.867385009 0.380019345 0.312407927 0.052822679 0.315969262 +0.111039665 0.219600533 0.251294783 0.899087102 0.790752713 0.097448672 +0.291035985 0.905848929 0.101547242 0.725196789 0.634550571 0.140998182 +0.535483368 0.077901118 0.72113245 0.080513781 0.738432284 0.859234874 +0.836653681 0.922158716 0.973906291 0.014254291 0.665168905 0.92689054 +0.111390809 0.440064826 0.170883918 0.605626806 0.397192351 0.973700454 +0.163338267 0.188365551 0.389374004 0.80265834 0.954278451 0.767767046 +0.15790071 0.115373348 0.326470861 0.461240135 0.133514609 0.305868055 +0.821529992 0.621781336 0.478997923 0.557515667 0.05718655 0.802128822 +0.577113337 0.593705689 0.837266039 0.343199612 0.379806082 0.703873811 +0.36865386 0.177751265 0.122663979 0.700889951 0.58215241 0.73639781 +0.148074974 0.933857789 0.553355281 0.347605045 0.845524931 0.759138986 +0.267165074 0.303399181 0.21132232 0.489212341 0.517752919 0.896403589 +0.33711806 0.948295969 0.868431498 0.927800501 0.090826929 0.198556135 +0.629086465 0.51549284 0.90443803 0.345307953 0.654532449 0.436205877 +0.899101433 0.788129154 0.173801413 0.249864088 0.258931665 0.488159289 +0.647290297 0.332897315 0.065169203 0.168335957 0.515015227 0.643120857 +0.968123008 0.406870993 0.051713987 0.470002038 0.795429483 0.3677348 +0.421616657 0.732975418 0.783383182 0.792846433 0.795522039 0.081037235 +0.434238716 0.16079232 0.584383965 0.81835244 0.911555918 0.608325949 +0.827365237 0.902688024 0.666834651 0.802388095 0.568807316 0.09304609 +0.617306794 0.055249216 0.527464105 0.123989327 0.653719834 0.947340319 +0.046837411 0.429975718 0.64193551 0.859682956 0.98440366 0.717146574 +0.094781051 0.110694716 0.422264758 0.756316987 0.91492247 0.70127518 +0.346755082 0.148188256 0.985408877 0.335688835 0.678042664 0.192827647 +0.240187824 0.195732965 0.960780366 0.930782416 0.620082062 0.731399747 +0.743516981 0.884445119 0.381126185 0.133506754 0.760468985 0.75590381 +0.749128373 0.669977528 0.158319906 0.436316448 0.181122883 0.716774648 +0.440738254 0.593930335 0.040100949 0.342291062 0.504449315 0.079784025 +0.629169341 0.567346205 0.938410984 0.274653947 0.924955081 0.999158416 +0.832547212 0.563522061 0.884761329 0.287788445 0.609363742 0.822762444 +0.484236364 0.336764308 0.428784208 0.206268945 0.547124664 0.398686728 +0.159796903 0.825318405 0.11097648 0.70918044 0.134666753 0.510981616 +0.753398424 0.493179847 0.323280138 0.116962174 0.032973371 0.301977346 +0.935774572 0.971509856 0.434713799 0.258936014 0.748406641 0.550057954 +0.364906998 0.867993764 0.929986162 0.566259984 0.201561598 0.088899642 +0.694806019 0.841160098 0.529488241 0.748511288 0.281359308 0.359758405 +0.246869853 0.571768615 0.962346049 0.46619152 0.036815275 0.052344286 +0.969290616 0.081606543 0.006041286 0.39291871 0.258062784 0.754469193 +0.149363065 0.588885481 0.737322401 0.839671693 0.187464021 0.040584343 +0.238442824 0.002256131 0.496423983 0.855190841 0.933920545 0.616686395 +0.672924319 0.19246898 0.339731494 0.290725086 0.682201485 0.622502334 +0.82771845 0.860853158 0.023129877 0.439149012 0.420368873 0.619585249 +0.718088417 0.61636129 0.294744506 0.048755734 0.147826544 0.71409911 +0.016242917 0.03754194 0.135964548 0.274955515 0.425776635 0.105288733 +0.698634702 0.214652383 0.766444363 0.856935965 0.038810434 0.053084927 +0.082542283 0.776942833 0.87829508 0.380977651 0.579063828 0.749446631 +0.473423683 0.728823934 0.97655134 0.509366429 0.469038669 0.305920004 +0.001923166 0.815399437 0.335515583 0.99241361 0.951585053 0.05625475 +0.238803785 0.839943814 0.181281755 0.719849414 0.752287409 0.64448126 +0.570774675 0.454002304 0.174839227 0.581440343 0.937516288 0.183942841 +0.420498211 0.573988333 0.054154384 0.711186679 0.840398491 0.56798638 +0.358774609 0.722140419 0.993386859 0.892889895 0.618949594 0.330076479 +0.09014432 0.969458469 0.820519407 0.028238777 0.403203241 0.66752155 +0.686571095 0.940369875 0.259934668 0.426646752 0.354474242 0.065774085 +0.199534456 0.213930712 0.593752646 0.801165557 0.630179602 0.936670549 +0.793752255 0.247008025 0.755108652 0.940756209 0.799436791 0.792822235 +0.30038066 0.534186275 0.930274515 0.472220192 0.870708258 0.703444473 +0.878689525 0.258136256 0.826224397 0.449838943 0.800463803 0.44882119 +0.230228966 0.084058155 0.272991521 0.914052588 0.392670019 0.275763148 +0.175848788 0.255663055 0.617513991 0.547614257 0.799882239 0.563693054 +0.855101853 0.184586922 0.503620344 0.865045494 0.357569266 0.362222611 +0.55742683 0.714365598 0.141813555 0.628815706 0.122215219 0.036845644 +0.882105515 0.931969073 0.096395731 0.255241295 0.311710013 0.584732484 +0.919661399 0.106472023 0.745378714 0.569432045 0.953233145 0.28483251 +0.907071899 0.239393223 0.730945974 0.573060621 0.412368504 0.04145396 +0.228743256 0.934175025 0.841620833 0.666606186 0.036384653 0.32249202 +0.230207443 0.117413081 0.168304504 0.454932444 0.643309753 0.110738772 +0.291345041 0.683625101 0.66013166 0.784181194 0.849617545 0.675346656 +0.71379554 0.214035641 0.750973642 0.228101633 0.909387814 0.537898162 +0.778913735 0.473211394 0.447189667 0.089892441 0.239383654 0.063330192 +0.294274068 0.655032717 0.7424942 0.465583467 0.306690599 0.93202795 +0.553688731 0.87773332 0.736437321 0.994326701 0.385872446 0.886847995 +0.184515451 0.849822315 0.618881501 0.647357996 0.492658613 0.153144301 +0.879445124 0.003654166 0.436405713 0.66298746 0.629076823 0.303381033 +0.10296337 0.611499943 0.669929288 0.763845341 0.26832897 0.274742866 +0.610003765 0.985719872 0.306705604 0.306363807 0.013349759 0.369775565 +0.95735974 0.993222564 0.129004792 0.935076474 0.318670641 0.170728894 +0.417324499 0.483757936 0.751870463 0.311802749 0.772180086 0.89002636 +0.929266924 0.241696764 0.949240421 0.772877922 0.807736066 0.29561212 +0.079994622 0.500997809 0.672887569 0.503128247 0.858519545 0.99249716 +0.566716943 0.911390503 0.229493775 0.705474074 0.910075537 0.033650195 +0.596731761 0.438866416 0.622271191 0.687072667 0.068072716 0.285268463 +0.953284484 0.628910855 0.456041386 0.009311058 0.252335932 0.383763002 +0.934412488 0.402073856 0.768332712 0.650630163 0.52672138 0.714061112 +0.352257999 0.057787182 0.184637227 0.866199114 0.449447335 0.429548129 +0.539634558 0.65590204 0.703669301 0.511501953 0.100032929 0.770091122 +0.603082994 0.008121144 0.779602812 0.226856822 0.248709453 0.361457043 +0.683816192 0.847150009 0.595383037 0.127195635 0.313987625 0.73191044 +0.543154941 0.953333697 0.977157383 0.288789842 0.143460921 0.656994212 +0.742312736 0.125415231 0.489249763 0.525440614 0.947500481 0.926572368 +0.11847914 0.120095328 0.698359863 0.242221184 0.715777481 0.495847217 +0.98901806 0.322854552 0.49519034 0.341020728 0.414197743 0.55783959 +0.904165493 0.02778472 0.596882304 0.820501378 0.594678796 0.245952252 +0.222392663 0.132880572 0.789794551 0.050263489 0.956949663 0.658799867 +0.730687654 0.20523514 0.487855507 0.368382756 0.51484373 0.377115141 +0.746039076 0.994375437 0.968154489 0.497580462 0.054485211 0.845356389 +0.543207288 0.121938652 0.14083028 0.543845522 0.060691795 0.818292805 +0.18091418 0.522425555 0.041272675 0.258249992 0.743529639 0.428255341 +0.011321902 0.072976435 0.524697895 0.350516947 0.703029308 0.500739021 +0.540917605 0.344127215 0.28552638 0.316633362 0.934393505 0.267121689 +0.643672849 0.634552554 0.376877964 0.175370649 0.111189172 0.357395212 +0.883833474 0.529558157 0.324532748 0.745785257 0.722158919 0.74281303 +0.513370126 0.04401823 0.988922514 0.432169526 0.619467782 0.333816981 +0.596419887 0.51149076 0.486915224 0.905531626 0.867345524 0.356971478 +0.769645464 0.892293892 0.242320386 0.271512092 0.984660359 0.059011013 +0.43462748 0.545269606 0.159365696 0.444764321 0.924919225 0.850523164 +0.326918384 0.510076676 0.708646796 0.134910854 0.359375188 0.135221329 +0.586975674 0.070612381 0.781674754 0.460516364 0.391273083 0.67721199 +0.696979078 0.768276089 0.637509309 0.436112986 0.536122839 0.870050677 +0.077889519 0.126619406 0.367258516 0.300483766 0.552271611 0.430149991 +0.289510359 0.815742417 0.75555843 0.975771347 0.996795813 0.62567777 +0.954081863 0.305918814 0.530306999 0.618565318 0.448330755 0.105339276 +0.49021608 0.237678197 0.062645869 0.663599064 0.302911905 0.052536209 +0.692729512 0.806118139 0.60023992 0.094364575 0.185907234 0.949391163 +0.553806978 0.509322472 0.275105533 0.026431137 0.578765298 0.914646946 +0.44026852 0.481123073 0.462288272 0.730838253 0.460073068 0.318882329 +0.264079208 0.963647663 0.283207319 0.920612376 0.95924555 0.508713407 +0.695876827 0.669454965 0.852025952 0.058904078 0.2700294 0.811005059 +0.517971989 0.482337308 0.447995121 0.605770372 0.518099798 0.91464282 +0.627649775 0.828014505 0.082559434 0.500723922 0.218771161 0.726398616 +0.943663317 0.029424205 0.541107406 0.497656517 0.611386654 0.355196046 +0.551975032 0.481485089 0.079830882 0.681572393 0.726148367 0.70484483 +0.690861599 0.186669832 0.620455427 0.084192605 0.333303802 0.506129619 +0.126412815 0.878165876 0.049944914 0.46442928 0.400345942 0.464585209 +0.843564312 0.196422861 0.467086817 0.015287624 0.685972767 0.780155381 +0.408864418 0.545321653 0.799024264 0.071117038 0.794816913 0.714960049 +0.278788009 0.395833182 0.268366918 0.065709587 0.428022303 0.611974627 +0.00477107 0.04683236 0.935689428 0.625058534 0.573866064 0.94741231 +0.371370125 0.34383613 0.615127086 0.698870303 0.738676337 0.052967699 +0.415064932 0.343188976 0.768714385 0.452616905 0.3371997 0.081936638 +0.763125077 0.653528965 0.674281678 0.844023472 0.725108159 0.930557801 +0.245087466 0.963986992 0.577728006 0.374220284 0.280465108 0.550886474 +0.221090957 0.168039191 0.465725432 0.422318859 0.864826518 0.378235657 +0.603698742 0.604374217 0.26009353 0.688329408 0.990649409 0.358047249 +0.053657475 0.031555764 0.703624997 0.722755638 0.972840877 0.92133485 +0.888618182 0.798459664 0.86588239 0.328770077 0.00631752 0.49285684 +0.192614227 0.104936273 0.645917696 0.615532748 0.046485808 0.588497821 +0.677042247 0.193700736 0.425630254 0.743205707 0.43803071 0.81292256 +0.826681553 0.157787973 0.52480258 0.269676625 0.881446056 0.323611391 +0.935039406 0.65614243 0.946998886 0.310593021 0.30854196 0.433989682 +0.448295354 0.584081161 0.818871241 0.485845095 0.918249229 0.342610829 +0.053426915 0.331607444 0.019110349 0.33734838 0.686889701 0.557804378 +0.696726071 0.528943016 0.020061841 0.068646748 0.723553257 0.392077153 +0.75685735 0.539415579 0.276619807 0.753055387 0.390767326 0.752930409 +0.587710794 0.033872278 0.287094454 0.138072549 0.064612418 0.780456071 +0.622850772 0.826268662 0.432435445 0.220340631 0.063409926 0.940841943 +0.686054687 0.586843864 0.167794893 0.069862028 0.172410831 0.506215403 +0.661745359 0.175948023 0.955054168 0.559070123 0.008412685 0.810334691 +0.312936147 0.269282832 0.423450003 0.686039392 0.145973423 0.548498098 +0.508477722 0.838733053 0.944276007 0.188899171 0.791349077 0.824637479 +0.766041075 0.331100629 0.209707048 0.275743887 0.474027815 0.339012896 +0.79711349 0.31534748 0.579549401 0.993667936 0.586332751 0.480717146 +0.914365001 0.720787816 0.978632014 0.379535001 0.902459214 0.116816271 +0.362675212 0.055209323 0.767392687 0.064930858 0.765691072 0.447221694 +0.1584596 0.912869334 0.498549253 0.283476634 0.72039509 0.275014893 +0.270858766 0.812767744 0.295623387 0.88494839 0.226973025 0.311042324 +0.952195394 0.875314954 0.158188095 0.658240622 0.552383767 0.704734643 +0.593084294 0.852563481 0.332270522 0.273944312 0.139386799 0.511861421 +0.58892035 0.130860234 0.873371468 0.693831657 0.521311828 0.903908089 +0.268480135 0.909344498 0.32935688 0.240452761 0.28581745 0.173498236 +0.369446889 0.520897012 0.765974006 0.427832127 0.372049338 0.906827457 +0.476114437 0.783799323 0.399173094 0.002299433 0.949303302 0.790002153 +0.102355367 0.300631376 0.979714673 0.854081629 0.417724308 0.027295101 +0.643490681 0.113678205 0.925275742 0.70835727 0.100532609 0.216004115 +0.308434126 0.549282609 0.232698915 0.002100019 0.188007539 0.39622879 +0.335873586 0.657860368 0.048752817 0.325141659 0.73423455 0.174524943 +0.354109923 0.148335196 0.515014567 0.717440505 0.871251843 0.712365943 +0.017099928 0.858599956 0.757134692 0.224287583 0.297543529 0.541791033 +0.922336087 0.867977165 0.011955437 0.133955533 0.449470011 0.972271503 +0.512157573 0.060459392 0.559382801 0.266682839 0.198751028 0.938501453 +0.300552189 0.980296499 0.098198882 0.281332092 0.670203584 0.062005845 +0.158579673 0.817351606 0.434342335 0.129522288 0.451585857 0.437390959 +0.696003956 0.47162333 0.308688396 0.555772962 0.787759508 0.309476464 +0.566497533 0.1475832 0.194498523 0.979760727 0.51189116 0.277012759 +0.544450315 0.03560878 0.612575996 0.059673691 0.015501093 0.936560279 +0.952769167 0.693935796 0.452625886 0.414877684 0.484769172 0.803186786 +0.79106309 0.457184145 0.919599035 0.412043102 0.214511953 0.383602457 +0.410175196 0.414921815 0.924181356 0.259228378 0.009724458 0.862451517 +0.076355701 0.050846659 0.52917898 0.674637351 0.767218806 0.04028677 +0.052680348 0.931155995 0.50758988 0.877333645 0.889909131 0.292068994 +0.264154416 0.197599366 0.295154478 0.054492336 0.657841902 0.103011264 +0.818932042 0.1515135 0.104087995 0.168126273 0.612500076 0.034822007 +0.822815806 0.598616929 0.24915781 0.785478129 0.911505058 0.593588285 +0.806135953 0.352784543 0.846863018 0.716850897 0.697722431 0.409427328 +0.621945 0.818246774 0.553059134 0.124134307 0.586309909 0.117923453 +0.088099271 0.546704319 0.911010988 0.073832579 0.548993666 0.795323507 +0.003665614 0.160101092 0.191670613 0.796170927 0.431953915 0.740680871 +0.481747609 0.74044926 0.586633474 0.915191017 0.821772751 0.369715613 +0.756655129 0.605647337 0.2751643 0.390496566 0.806712301 0.363826223 +0.555929363 0.810577502 0.206157089 0.007793311 0.257439892 0.3308234 +0.43508451 0.837983098 0.633614516 0.808526383 0.854871265 0.015277349 +0.938365806 0.904055869 0.996383524 0.809423392 0.814948065 0.58352082 +0.912725205 0.99738427 0.639908148 0.326205958 0.028829589 0.274546702 +0.650880361 0.80753705 0.094843799 0.755136167 0.663223586 0.954255026 +0.358942853 0.938986333 0.553248793 0.436714722 0.631577472 0.74199916 +0.901775874 0.10237001 0.237965233 0.664707195 0.154853245 0.095336984 +0.475868253 0.132077961 0.77996356 0.797452315 0.501630224 0.174841245 +0.93215664 0.748395105 0.700266885 0.119138135 0.408231209 0.580099327 +0.588402759 0.758966876 0.154543848 0.088122298 0.780912202 0.337721446 +0.521822388 0.202777861 0.030742353 0.944427128 0.261593073 0.739214534 +0.906642711 0.555960071 0.818595855 0.081251735 0.772898263 0.013276292 +0.297191727 0.459363017 0.684583523 0.542724105 0.495403948 0.211292638 +0.800292573 0.592458738 0.427711181 0.656198964 0.012124482 0.09004517 +0.875097246 0.556451109 0.545876823 0.897470393 0.486114872 0.931580443 +0.469652567 0.858390102 0.463255311 0.116140326 0.990614527 0.796466196 +0.787163393 0.463283576 0.602564288 0.950393158 0.017639372 0.69953536 +0.759627499 0.290251169 0.616653611 0.145215962 0.987559274 0.301374936 +0.485311293 0.063625966 0.276167724 0.309075524 0.449378221 0.748424579 +0.975777054 0.702124018 0.831940628 0.846847332 0.623169394 0.843912615 +0.650794355 0.578698182 0.152513483 0.359846287 0.126544988 0.517568708 +0.240531091 0.770677569 0.579616759 0.335374599 0.867755479 0.102446309 +0.410622982 0.706227067 0.642497732 0.079014374 0.420954396 0.870547398 +0.924520937 0.178696312 0.243748018 0.187617758 0.476346388 0.494907197 +0.771532661 0.422837742 0.027219501 0.583320601 0.97008392 0.985487056 +0.163915835 0.128144538 0.466224646 0.279833247 0.049335345 0.606125001 +0.996272347 0.4352029 0.352717316 0.973795287 0.385444793 0.002970382 +0.03239779 0.438450059 0.922141332 0.199394343 0.265483475 0.920891406 +0.508220074 0.161236303 0.205240267 0.410670757 0.229888633 0.230621078 +0.52847331 0.428548356 0.209084182 0.272633643 0.41523402 0.595617614 +0.036861273 0.650367027 0.85075842 0.578894033 0.22149694 0.523764602 +0.602016377 0.581799718 0.801976563 0.262015819 0.327614964 0.319754422 +0.600041341 0.753332426 0.466726157 0.038577384 0.931439104 0.765929062 +0.13467725 0.502584769 0.636161877 0.35725823 0.532571933 0.015376546 +0.359074669 0.579961274 0.596514347 0.260365446 0.321042514 0.136274091 +0.54639503 0.776245383 0.352426499 0.132197583 0.47336899 0.629645713 +0.604473925 0.505325353 0.393504308 0.150794098 0.273818471 0.209743532 +0.408385358 0.470276993 0.303967057 0.159786898 0.892226302 0.0230897 +0.280744744 0.903773083 0.465879568 0.790445975 0.99142746 0.668114039 +0.41179072 0.708634513 0.313588795 0.932023742 0.020024432 0.15865558 +0.026383933 0.644076281 0.876421946 0.728323958 0.273042274 0.250947234 +0.032278299 0.347269627 0.837102288 0.708988156 0.446158377 0.675383749 +0.519990078 0.423854796 0.452292292 0.34913865 0.465215533 0.626970425 +0.161522353 0.815183521 0.120674268 0.080927306 0.91537052 0.05108326 +0.06384726 0.633067793 0.349692312 0.004412913 0.335949786 0.122743055 +0.199691076 0.22652619 0.99103602 0.415333833 0.691914525 0.534439027 +0.230403522 0.307745567 0.175796622 0.405767576 0.585184945 0.840179823 +0.181014144 0.463548584 0.456540105 0.957041148 0.726460919 0.04573425 +0.679267856 0.288748439 0.22010396 0.072436156 0.749360576 0.142263067 +0.86102742 0.581840236 0.007255827 0.379946186 0.449860013 0.525395914 +0.812713802 0.129285743 0.502441121 0.039520682 0.792815962 0.253822365 +0.677098606 0.675195654 0.82411588 0.427947956 0.271606855 0.240274267 +0.272232332 0.171104943 0.939047922 0.127551639 0.190477003 0.852217588 +0.505720594 0.335056419 0.491299374 0.010990817 0.408149623 0.557030107 +0.470092114 0.701238748 0.435922265 0.083140537 0.223356685 0.818412878 +0.286036185 0.563880098 0.85977327 0.42917135 0.315372358 0.351937743 +0.998107814 0.990316247 0.783591056 0.947027742 0.241247795 0.429188444 +0.207640558 0.266451994 0.734075474 0.121479943 0.702228851 0.848567853 +0.312201544 0.881993054 0.259460451 0.060465472 0.053622883 0.24873459 +0.361505734 0.379016245 0.442354179 0.338214143 0.740326154 0.446253829 +0.53741106 0.295636967 0.325632567 0.022723419 0.04678908 0.567368008 +0.923539523 0.777924621 0.175218342 0.065413449 0.717235304 0.198673898 +0.386240062 0.80494776 0.399796894 0.760349836 0.332126455 0.429200947 +0.998606581 0.60380477 0.856003136 0.027027768 0.57105214 0.448437583 +0.902979791 0.064481464 0.390305197 0.633113618 5.6639E-05 0.491307243 +0.745280235 0.690264354 0.332431159 0.268090637 0.727137717 0.361322721 +0.931226585 0.505962286 0.141041506 0.5904782 0.661447098 0.84030767 +0.151752703 0.590408695 0.693604086 0.862160483 0.498202424 0.146787708 +0.293728097 0.09479456 0.420005992 0.281655274 0.214179465 0.212984531 +0.479362254 0.170921575 0.676924673 0.841926278 0.387952671 0.216070246 +0.424485094 0.54296502 0.512982967 0.576313003 0.523778783 0.4316104 +0.217222584 0.991004282 0.597583847 0.571126356 0.187424422 0.123882263 +0.727293315 0.568183386 0.07091242 0.133810333 0.369668881 0.534218869 +0.52900201 0.362120893 0.752855146 0.350097658 0.611960635 0.725261888 +0.43150437 0.451432831 0.982294844 0.147538734 0.030988611 0.750352892 +0.568909942 0.098691972 0.676661552 0.573358499 0.870199645 0.102585025 +0.953511803 0.768542576 0.831663633 0.69187021 0.23951653 0.169904471 +0.781598223 0.77915603 0.509076212 0.414257945 0.451150008 0.273974236 +0.559934119 0.326111151 0.703417286 0.739191748 0.160864418 0.868999665 +0.438152831 0.578436258 0.540795226 0.451598674 0.472903666 0.121305595 +0.465762128 0.668995676 0.316051593 0.826016934 0.693047951 0.240149826 +0.074806681 0.351821951 0.703239189 0.771333898 0.415729409 0.152807951 +0.312635151 0.509885654 0.193271645 0.467948447 0.211666926 0.516958597 +0.569501793 0.644437849 0.948251841 0.966448435 0.941334732 0.149520394 +0.433594875 0.763381685 0.507076287 0.935709039 0.36197374 0.163122719 +0.861734282 0.712876122 0.438569177 0.816187402 0.300989478 0.205700067 +0.840002372 0.598889422 0.816745822 0.755914753 0.605659792 0.156702252 +0.474157686 0.405229192 0.83007746 0.495108453 0.267766593 0.719142797 +0.475358275 0.507594706 0.893371221 0.263285796 0.061638424 0.868475316 +0.776963772 0.440907634 0.027531228 0.180203527 0.995759265 0.813817617 +0.468930732 0.51584846 0.157245988 0.071729222 0.491682291 0.842804012 +0.474271271 0.214972372 0.356295218 0.609811455 0.881794535 0.061549407 +0.712063099 0.647192611 0.147968199 0.101098069 0.391140071 0.110610998 +0.781837506 0.986000044 0.167155271 0.151962739 0.398063626 0.697447108 +0.699531302 0.850699416 0.543165994 0.295251184 0.218203587 0.53786987 +0.642141854 0.671328974 0.77369088 0.391926509 0.640400115 0.780239689 +0.27077553 0.858479973 0.199816689 0.270881997 0.579654259 0.279285306 +0.253033606 0.748003372 0.884522138 0.984952916 0.291216977 0.268845366 +0.538247951 0.417221336 0.682069986 0.552692159 0.343493634 0.389919622 +0.740735587 0.34239936 0.257093106 0.651004213 0.798660408 0.923361021 +0.926808728 0.294122461 0.254957266 0.703780708 0.211777697 0.999607509 +0.858100867 0.026503689 0.297700495 0.209414111 0.681818291 0.80587547 +0.533260841 0.236000348 0.057554017 0.787497321 0.65318456 0.718814232 +0.052758919 0.350662661 0.650236464 0.126588986 0.796045099 0.811328965 +0.893550084 0.49206488 0.811444022 0.121065015 0.129167985 0.025484429 +0.254690886 0.018235053 0.638843032 0.59861786 0.310400856 0.87486371 +0.467750827 0.709928532 0.728740172 0.86283087 0.802219018 0.822543526 +0.997272208 0.658746343 0.572070361 0.983754536 0.92519781 0.149645456 +0.29086755 0.68834812 0.341338452 0.306031533 0.953775722 0.316922331 +0.533588845 0.413622763 0.730304526 0.478728208 0.870800527 0.434258099 +0.978664821 0.327318699 0.188738593 0.691647993 0.770767018 0.270466775 +0.472250589 0.228238707 0.367484118 0.009510238 0.28182811 0.795954597 +0.486802892 0.852542636 0.496622962 0.096234997 0.756742613 0.114813875 +0.358034679 0.925112464 0.941530554 0.679903892 0.152768053 0.570619449 +0.284294092 0.666313827 0.332758264 0.576335512 0.043895934 0.022931778 +0.528900367 0.188152661 0.243599766 0.680793948 0.250264553 0.426863522 +0.09778775 0.283277843 0.06191985 0.979177239 0.320424838 0.958691228 +0.648529795 0.401476123 0.808246771 0.647458146 0.10442577 0.698667771 +0.376813996 0.936548702 0.539186633 0.027361022 0.247261578 0.292768877 +0.209487563 0.378390607 0.845756459 0.310840089 0.317322526 0.568116254 +0.78686803 0.850283809 0.839703511 0.739506295 0.108333615 0.862994125 +0.641240495 0.507357184 0.559930711 0.903267415 0.362295116 0.282307318 +0.048462997 0.504010984 0.791083357 0.905914261 0.369249059 0.735374016 +0.237985578 0.565912468 0.810207748 0.354668831 0.7191722 0.159972729 +0.370433313 0.426154182 0.429044494 0.947208742 0.780390266 0.348588512 +0.495769611 0.502838584 0.960839345 0.944349575 0.289069129 0.178158451 +0.213707899 0.6077601 0.115356813 0.177529637 0.039260575 0.546835116 +0.691808694 0.950023819 0.908392987 0.339684106 0.449646651 0.213521674 +0.492312777 0.060421055 0.31624553 0.951077402 0.231238687 0.124981999 +0.832549017 0.387015917 0.67088034 0.000620656 0.940579504 0.03344697 +0.212996732 0.682815042 0.706545893 0.6921648 0.125923154 0.270772357 +0.761849562 0.801799784 0.570845285 0.558023705 0.949388314 0.957731262 +0.072501705 0.55451666 0.323580073 0.069411802 0.7504771 0.25541459 +0.315192258 0.540095018 0.41783108 0.651432363 0.957200211 0.55249332 +0.636855347 0.156152404 0.126311886 0.956698027 0.131885279 0.526559904 +0.007348392 0.390856544 0.77064608 0.668360556 0.279251237 0.110205639 +0.173498821 0.279008784 0.387373936 0.035352224 0.840881409 0.583475447 +0.628140797 0.694202341 0.840326978 0.544199016 0.565620828 0.564235784 +0.789456234 0.921836653 0.751754976 0.901450482 0.420961076 0.78934368 +0.50242377 0.526461995 0.53045635 0.103771167 0.140111069 0.841934348 +0.402211061 0.861598759 0.359356235 0.228952594 0.888713035 0.969476428 +0.224457804 0.418491014 0.37098792 0.602665139 0.88869933 0.810962875 +0.798415396 0.733947012 0.388486949 0.992661746 0.940739067 0.765041946 +0.804600737 0.687470642 0.785696275 0.78965505 0.052433429 0.765882869 +0.507868679 0.879869689 0.124784256 0.215560283 0.582351001 0.703522651 +0.646661201 0.815299776 0.510490184 0.35496796 0.511171268 0.982801004 +0.81059852 0.729408222 0.684279612 0.316977006 0.750617918 0.662919832 +0.039756955 0.250153415 0.19133002 0.261600945 0.528928699 0.818451236 +0.162431099 0.801444492 0.883316204 0.458840771 0.953073477 0.276353468 +0.023784124 0.792317231 0.026138645 0.675509421 0.234949911 0.920320349 +0.419368833 0.577435143 0.816369987 0.079399903 0.172103795 0.587936215 +0.008328974 0.050990834 0.84073863 0.981323221 0.844908442 0.144907668 +0.523935006 0.953391144 0.416298263 0.409849001 0.205958103 0.882143935 +0.675211246 0.398632614 0.145049245 0.659630054 0.674015439 0.695373426 +0.296253345 0.000152017 0.218953972 0.32494564 0.544726496 0.466546487 +0.943387278 0.91473399 0.361656903 0.426335569 0.382608172 0.088560077 +0.142077123 0.735460947 0.567530693 0.765132301 0.072116216 0.037198764 +0.460152568 0.86351387 0.075605184 0.24834648 0.878601518 0.927990409 +0.501765347 0.166942755 0.119004998 0.438210285 0.922771716 0.35717679 +0.159769243 0.051812827 0.511416165 0.402506006 0.424219946 0.491144041 +0.08523863 0.257267606 0.051937863 0.033189627 0.987423852 0.558724973 +0.091922717 0.905294676 0.027646535 0.728672801 0.18304113 0.263107802 +0.04274788 0.694733151 0.294821262 0.290843416 0.910865361 0.131647142 +0.284817128 0.068294304 0.199330377 0.862873301 0.69195404 0.594186989 +0.900181659 0.462108618 0.165862493 0.557568211 0.545188997 0.366654323 +0.603854571 0.545081715 0.854110138 0.625585388 0.443886964 0.177381534 +0.152464159 0.929380943 0.453883054 0.905222586 0.34994724 0.50559538 +0.357703203 0.970029379 0.487922603 0.338449001 0.428646828 0.673981706 +0.260762764 0.809253573 0.70329663 0.458116857 0.499170794 0.659937165 +0.437901268 0.721561196 0.737754673 0.317657736 0.650399743 0.017214657 +0.242011689 0.399749399 0.086222619 0.164990568 0.677107691 0.447084063 +0.741096414 0.861096407 0.908107363 0.081824702 0.266130008 0.578938095 +0.328193884 0.825636912 0.655212894 0.121341669 0.713871499 0.196691946 +0.704947801 0.484730372 0.804639685 0.01791942 0.082830311 0.308729557 +0.805808354 0.106620594 0.038753957 0.687837607 0.095397711 0.043433118 +0.179567575 0.598106146 0.790442708 0.271364917 0.181574135 0.279642668 +0.847729524 0.71965309 0.077487579 0.885779563 0.050899225 0.913004844 +0.134449739 0.180580631 0.165208709 0.696095233 0.069504895 0.523021746 +0.133408105 0.763589861 0.677135602 0.274836542 0.386649892 0.605103227 +0.985019372 0.472913672 0.559579978 0.143833406 0.269901941 0.539098747 +0.846711621 0.189270789 0.399554948 0.078479378 0.233184019 0.724077381 +0.552848424 0.417430423 0.299348813 0.201849659 0.557733152 0.626154455 +0.082662257 0.026732547 0.480689131 0.609199162 0.870743019 0.425188238 +0.283912119 0.976721481 0.54435803 0.590378009 0.341469539 0.7275769 +0.797176053 0.714950648 0.142004121 0.608389897 0.46529807 0.623109577 +0.126695571 0.024921506 0.698011565 0.540780143 0.489591336 0.368353438 +0.201122213 0.307771603 0.100294969 0.996247806 0.168386071 0.244491551 +0.501185892 0.27611198 0.875081234 0.268253626 0.521096147 0.416228751 +0.384216837 0.392331044 0.85273218 0.095199354 0.587683282 0.097883345 +0.874225409 0.921445127 0.632731495 0.72001499 0.846902285 0.554561049 +0.006165496 0.781992688 0.651998907 0.590434706 0.643266817 0.41281913 +0.207617834 0.857956668 0.300112334 0.742050632 0.776674158 0.709316141 +0.72752474 0.428231238 0.686675124 0.630020912 0.899316936 0.296385039 +0.763663499 0.318328529 0.982333378 0.980004692 0.932870743 0.750307278 +0.004747511 0.724870743 0.540721519 0.474098744 0.24214643 0.728879944 +0.244191824 0.340266565 0.767315617 0.791286441 0.470486247 0.659202394 +0.645466163 0.15088842 0.632776667 0.371359194 0.750210256 0.336780832 +0.104791805 0.552946986 0.817835545 0.060355465 0.294468284 0.177640034 +0.905772625 0.425220037 0.669733749 0.483255571 0.757372044 0.369928599 +0.071252914 0.01991485 0.933777924 0.820409951 0.423919003 0.290690478 +0.13254582 0.164312773 0.149917162 0.999953303 0.474677006 0.841480313 +0.462439727 0.477648756 0.984097879 0.50665243 0.18906281 0.92940925 +0.676778433 0.872818007 0.259114988 0.802533434 0.485527765 0.500675734 +0.298776194 0.786947063 0.032941639 0.27666279 0.704484392 0.689536436 +0.050825859 0.231282147 0.074070661 0.583897365 0.295986122 0.195107408 +0.562292578 0.090698551 0.136513376 0.465281352 0.006521889 0.761270813 +0.482356027 0.439278202 0.989792854 0.905983066 0.627030795 0.377131642 +0.287050545 0.012609891 0.451842193 0.31524791 0.658138925 0.931124426 +0.873353802 0.319671698 0.980193709 0.454936023 0.575030365 0.343915061 +0.700426459 0.047088423 0.17917255 0.640053077 0.541659616 0.870690471 +0.305937731 0.558549878 0.34793075 0.219180003 0.68719692 0.178925585 +0.771716255 0.154276161 0.389739831 0.788192008 0.056103783 0.788649501 +0.889092975 0.064192106 0.672840234 0.004488969 0.872716409 0.05654929 +0.2074965 0.325562865 0.013480748 0.26475122 0.630083546 0.919796288 +0.550250866 0.587886424 0.688948854 0.09467368 0.451483609 0.319250118 +0.171422302 0.784004057 0.817239863 0.145959197 0.063958115 0.848017941 +0.259232759 0.086210741 0.582543187 0.197985919 0.358956467 0.310986092 +0.774642196 0.827539663 0.907887424 0.357693879 0.743879747 0.910717339 +0.388606654 0.714261275 0.740193856 0.332200729 0.257058866 0.359047625 +0.98089717 0.242214401 0.455542774 0.316583779 0.467119289 0.177930269 +0.205551639 0.377142558 0.5443922 0.759592029 0.451427151 0.244827036 +0.401870507 0.789814854 0.760784185 0.931009612 0.095099626 0.33498299 +0.583259183 0.534262944 0.703490536 0.226688808 0.849442998 0.333424241 +0.295280163 0.888036662 0.052961135 0.033834929 0.3013065 0.418736587 +0.51264162 0.615998089 0.629881972 0.383156853 0.242331725 0.382403831 +0.015909514 0.112668029 0.42364389 0.99845063 0.626341553 0.099913338 +0.996945842 0.704878839 0.422398151 0.703730038 0.742518902 0.72944797 +0.129980686 0.830479474 0.177695151 0.707970319 0.741395318 0.747085765 +0.690932217 0.887311559 0.859209952 0.533763595 0.067843093 0.076183947 +0.175973611 0.399054739 0.978019296 0.600111028 0.274828321 0.988757371 +0.807482816 0.094630361 0.98569514 0.030258382 0.115386102 0.147188009 +0.998897127 0.334448054 0.275839072 0.421718101 0.161794807 0.291513785 +0.937847343 0.04448444 0.324856355 0.342335871 0.162611526 0.367960113 +0.593269677 0.963812127 0.342126224 0.975796755 0.169419816 0.789414403 +0.80213725 0.137197483 0.432520432 0.308640309 0.041445597 0.348819417 +0.68412408 0.699851778 0.234472211 0.621161004 0.520879682 0.333041103 +0.277010412 0.487314481 0.883149648 0.820078126 0.863493152 0.988942102 +0.748197505 0.892938682 0.101701879 0.958958332 0.913227413 0.703540937 +0.232042044 0.248854781 0.027687019 0.217524785 0.134593731 0.475961394 +0.548188829 0.327568732 0.195919406 0.671349782 0.251781714 0.629369737 +0.659057253 0.26066087 0.250637246 0.202605898 0.993860072 0.461520385 +0.324488311 0.616811006 0.81803054 0.645931573 0.453208163 0.436899085 +0.900344639 0.740140175 0.886931981 0.158389092 0.418177474 0.889899847 +0.344622737 0.755063268 0.823126376 0.009754357 0.077904538 0.01072324 +0.528313902 0.261450255 0.460486282 0.308148024 0.348315125 0.110034063 +0.718916956 0.835324369 0.052849363 0.274690822 0.325852859 0.478975219 +0.467460072 0.850652711 0.410676071 0.411566742 0.072510864 0.112109953 +0.319971682 0.637489045 0.709887411 0.653090086 0.024770662 0.283437503 +0.643961744 0.027516755 0.414458748 0.41650118 0.586643699 0.432853766 +0.986456602 0.145809914 0.559616479 0.747758248 0.189922276 0.701761914 +0.783268243 0.137716003 0.226046143 0.949147691 0.925443933 0.17268562 +0.569532187 0.823413499 0.031777384 0.955352312 0.724315313 0.870835473 +0.759427124 0.322293789 0.964790968 0.169833044 0.8573088 0.848830157 +0.502166053 0.798384142 0.938778813 0.627935931 0.697535234 0.560768463 +0.835723859 0.7889473 0.750301861 0.564074629 0.384355917 0.330646088 +0.350115615 0.781635432 0.439312714 0.05814958 0.186542038 0.07609762 +0.5370099 0.826427265 0.01135514 0.96121449 0.074678704 0.81915525 +0.311469952 0.795674463 0.885574888 0.610266294 0.483054972 0.540615578 +0.42067192 0.15551722 0.735440988 0.709316411 0.84027772 0.732781628 +0.318720526 0.162349371 0.412558334 0.564209388 0.51940943 0.089664386 +0.475474089 0.201920128 0.216984875 0.747421407 0.68975001 0.25213583 +0.557420025 0.67067797 0.55860433 0.612853417 0.139986728 0.709583044 +0.217563584 0.826566415 0.142696017 0.033770573 0.055281138 0.024990244 +0.515994767 0.384547198 0.127942232 0.869706888 0.36959484 0.91084623 +0.213757258 0.429244187 0.30009253 0.888615534 0.187975274 0.445658811 +0.513275121 0.690824238 0.775152248 0.912854983 0.579998266 0.634372348 +0.420618298 0.976455317 0.804928622 0.045600186 0.841492813 0.041105545 +0.500614599 0.932386535 0.530765713 0.454010561 0.329881395 0.887405914 +0.804604921 0.193740939 0.917091575 0.860486601 0.249629115 0.101334545 +0.732116069 0.986245805 0.914610483 0.90439876 0.383789288 0.457472907 +0.933103195 0.490055941 0.481446045 0.850724735 0.520020659 0.781943039 +0.933424008 0.262674084 0.356046584 0.707778974 0.050205982 0.779100881 +0.104025232 0.691427554 0.231131675 0.97748018 0.381703408 0.453965167 +0.25343554 0.561942973 0.696177731 0.512393009 0.97636112 0.119633674 +0.455623072 0.003821961 0.227769128 0.945654216 0.686451245 0.058316689 +0.388510965 0.927455107 0.530603388 0.691257045 0.498210353 0.476208941 +0.598317119 0.310769873 0.23953278 0.801161669 0.924811275 0.568914611 +0.869719527 0.841345237 0.184318027 0.499769431 0.525446145 0.186065363 +0.318965872 0.843770932 0.726512566 0.667111256 0.030084884 0.337120165 +0.133612513 0.272995004 0.716857234 0.263446685 0.860129019 0.576662242 +0.128729676 0.012235549 0.013663726 0.339421539 0.403501524 0.726040459 +0.205597596 0.837834925 0.072816641 0.818939364 0.132821291 0.794484259 +0.712060392 0.921902071 0.601128021 0.768163406 0.692721592 0.916328766 +0.125516342 0.108331942 0.395162451 0.961890601 0.297343241 0.098371477 +0.253931752 0.078384638 0.787828431 0.544620199 0.80485128 0.314749017 +0.581809111 0.366485247 0.806698333 0.561627887 0.61251122 0.663890668 +0.453069569 0.245100841 0.935921006 0.537364912 0.838520185 0.833138555 +0.530340346 0.120332208 0.77281522 0.890893845 0.292715153 0.476032574 +0.912740974 0.781091628 0.448943126 0.50472631 0.990713437 0.622337324 +0.348224572 0.162127499 0.803649029 0.682553829 0.955511999 0.72313509 +0.549518395 0.919462238 0.831721771 0.113008737 0.050176139 0.934342754 +0.58999516 0.147137818 0.838427146 0.487570755 0.142368977 0.978361467 +0.809535345 0.924822488 0.731603204 0.906420166 0.17791624 0.804958112 +0.094882922 0.596758917 0.153142382 0.985041706 0.800762225 0.957550571 +0.137922139 0.98463691 0.53171568 0.908688944 0.307212243 0.373145911 +0.566147194 0.711260402 0.337157011 0.427018493 0.592374371 0.589875531 +0.504619575 0.749160015 0.236487763 0.933776469 0.514679004 0.573594786 +0.913266147 0.238251557 0.499668238 0.884785276 0.442024917 0.970333165 +0.745605792 0.333269448 0.272540247 0.242135578 0.523303804 0.238343241 +0.098460409 0.31044432 0.848617066 0.0435702 0.745223068 0.155124565 +0.058784328 0.423794619 0.85517418 0.387362482 0.026069201 0.632821045 +0.660823574 0.017511929 0.019743879 0.147667511 0.801654461 0.901730219 +0.540465249 0.902110896 0.402713428 0.214771108 0.763336077 0.611037628 +0.435502211 0.067012481 0.22353234 0.803027694 0.813333052 0.58049892 +0.690405763 0.765838035 0.633893546 0.060524559 0.748772822 0.097453808 +0.621918092 0.666740928 0.292390614 0.824607356 0.814356292 0.913301828 +0.132999636 0.051672386 0.243224313 0.719294563 0.909230431 0.403506724 +0.185416292 0.064542002 0.316790932 0.874590659 0.88458957 0.112771963 +0.917219283 0.630812127 0.6352049 0.052803078 0.425085245 0.139259731 +0.163424539 0.554477418 0.859045458 0.703130359 0.410732348 0.412598299 +0.411461326 0.437333398 0.188797195 0.43265956 0.931143138 0.026604538 +0.76794284 0.450604335 0.147869125 0.541793763 0.405847919 0.339033931 +0.054026809 0.903721808 0.947122867 0.316896234 0.355901816 0.649364398 +0.369188504 0.97653693 0.457707282 0.100949373 0.759689438 0.959232021 +0.534565041 0.777447413 0.563292716 0.381459083 0.73159432 0.286601828 +0.19990225 0.909072677 0.117748127 0.935148056 0.590038832 0.053885009 +0.810689603 0.418525262 0.555652459 0.079111797 0.035475525 0.186580798 +0.695139824 0.043473062 0.62961872 0.369401651 0.567562548 0.214289527 +0.930938644 0.936278287 0.077651611 0.948260087 0.709217453 0.014481351 +0.331979878 0.733278947 0.090820514 0.168787976 0.924952897 0.593761089 +0.336587259 0.614156871 0.737109248 0.535123993 0.500131563 0.589228868 +0.254540743 0.001044413 0.60860183 0.368386975 0.218421497 0.99499504 +0.533398343 0.460718758 0.302849582 0.878271862 0.060211363 0.423934907 +0.045897865 0.880811849 0.298052845 0.311021526 0.409373363 0.141005327 +0.160808121 0.969491225 0.712576009 0.281317221 0.608484474 0.624391741 +0.26825318 0.373168134 0.692663205 0.264498883 0.659609053 0.86224222 +0.604257053 0.471620072 0.535514996 0.848084979 0.719137291 0.625602669 +0.628911188 0.691424443 0.460575367 0.617867675 0.817047746 0.642873344 +0.652546709 0.993027836 0.796036942 0.151523571 0.473307758 0.49865486 +0.524046456 0.362072569 0.265586125 0.602027897 0.302994893 0.028197955 +0.176259368 0.52454423 0.835178724 0.17403914 0.209195872 0.100497793 +0.840300561 0.435203693 0.21511594 0.530331675 0.61169857 0.286583212 +0.939572042 0.003934404 0.890831932 0.371891357 0.172707091 0.561941114 +0.172029217 0.345043804 0.88078438 0.102868058 0.874189734 0.692791646 +0.409994462 0.692877482 0.658880284 0.128173578 0.60236705 0.489005795 +0.057375329 0.009601728 0.409049786 0.249813554 0.749158906 0.677364668 +0.647422533 0.784178847 0.816712201 0.063382631 0.215487334 0.979622671 +0.269372582 0.256285429 0.760832169 0.988228966 0.386836525 0.002342414 +0.177973144 0.30219128 0.161179437 0.170154492 0.945495218 0.794294515 +0.626133052 0.146201549 0.222798737 0.35960112 0.521117243 0.13502833 +0.225358271 0.044357189 0.437116668 0.455201796 0.004283996 0.545094118 +0.082616071 0.241286873 0.748216191 0.951160157 0.935756121 0.505829022 +0.044045387 0.944858014 0.841715157 0.964099752 0.026576374 0.570862691 +0.047400532 0.0554329 0.047054754 0.508457679 0.248999391 0.512097662 +0.744564593 0.230675518 0.523539527 0.244512973 0.180224544 0.971759835 +0.957890149 0.856728525 0.237176408 0.166375375 0.206447842 0.228804784 +0.708090141 0.295228729 0.187180835 0.986416656 0.703045214 0.972241855 +0.891505569 0.952115836 0.000996464 0.049351854 0.182791693 0.244168392 +0.913550139 0.227586981 0.132949005 0.823016555 0.09027635 0.073605505 +0.434822325 0.206919936 0.44826706 0.960642514 0.924682712 0.675522748 +0.127275152 0.165848324 0.713742901 0.774821487 0.155973042 0.373009857 +0.638334502 0.99125048 0.243232023 0.403508501 0.17284988 0.25974012 +0.535642324 0.621537121 0.303660984 0.880235826 0.316460336 0.728048656 +0.783749341 0.453063356 0.140117929 0.548047856 0.707605625 0.626600457 +0.891814822 0.467194482 0.670610515 0.871517718 0.766898989 0.04837224 +0.118120577 0.226581575 0.603878818 0.275159866 0.079103424 0.91853355 +0.285148092 0.703331605 0.197449911 0.429566336 0.370716417 0.576418698 +0.871228421 0.594709359 0.014715077 0.04605495 0.596596892 0.090087157 +0.01534779 0.317740816 0.167555091 0.012528835 0.663026422 0.516614207 +0.453017779 0.987501365 0.770195064 0.6393856 0.882749283 0.460468861 +0.666589527 0.620946987 0.415376865 0.445739413 0.31400371 0.139909222 +0.93146946 0.974523313 0.493908477 0.468428404 0.4243906 0.785528845 +0.1921047 0.163999735 0.229000029 0.626725333 0.656001217 0.387700544 +0.254348132 0.001587666 0.356026439 0.421106805 0.275767602 0.669783746 +0.423188269 0.913803515 0.66716473 0.765969916 0.511129203 0.417834275 +0.370333293 0.183078816 0.781918076 0.952731131 0.400972311 0.170127034 +0.695303164 0.524389458 0.469599728 0.60293318 0.462940211 0.085530574 +0.891925446 0.997463208 0.829880592 0.36554496 0.367881655 0.596771056 +0.638556734 0.295995091 0.006557841 0.66483016 0.221275024 0.974850281 +0.580170275 0.531789559 0.10815384 0.663189382 0.802942632 0.513546091 +0.475866798 0.793417333 0.007284211 0.252398456 0.080640855 0.26700079 +0.337385483 0.056027277 0.894970997 0.031652504 0.517909021 0.607923186 +0.403913158 0.353079094 0.233365327 0.598893785 0.311025354 0.848093987 +0.968288889 0.446124019 0.147754819 0.90187866 0.114534044 0.901905326 +0.521562046 0.912707714 0.790676607 0.242450035 0.109900387 0.922191169 +0.598726217 0.603205139 0.916005153 0.901783028 0.917252344 0.223422909 +0.482025089 0.905977286 0.56737669 0.005225882 0.675611824 0.526213072 +0.488437896 0.330513756 0.377505956 0.990499531 0.526791711 0.331580704 +0.841057586 0.363339709 0.758931529 0.840725698 0.721721553 0.233870642 +0.082346147 0.150835224 0.599219859 0.112792469 0.379817841 0.608278354 +0.572217053 0.994893526 0.99357132 0.183160274 0.444255808 0.60498327 +0.639672884 0.462232188 0.448876616 0.103159699 0.043398436 0.542597323 +0.190438339 0.07942636 0.5490868 0.720944346 0.929375856 0.089815827 +0.521160543 0.113330107 0.63760472 0.270637484 0.777203014 0.108578804 +0.186509355 0.359632925 0.48473884 0.279280555 0.488208565 0.232578565 +0.883378531 0.23525874 0.510598416 0.612069583 0.400695141 0.345771711 +0.900239042 0.460076201 0.096541984 0.922257338 0.89949543 0.127075252 +0.632728903 0.602084327 0.798979775 0.539929399 0.806223675 0.137824172 +0.100525018 0.60668616 0.426885711 0.520187673 0.062712735 0.142352041 +0.088203898 0.312372336 0.155329792 0.816803382 0.313352705 0.917166572 +0.975011317 0.392990282 0.418515374 0.741609341 0.932811853 0.528874648 +0.72304656 0.843960928 0.741921439 0.005955888 0.069327019 0.591059163 +0.983694615 0.821107966 0.144682069 0.995811632 0.523390678 0.014900552 +0.119996743 0.757393199 0.135837902 0.185397283 0.584013464 0.553669481 +0.925986658 0.112237417 0.417137182 0.553747605 0.041657219 0.704982652 +0.521611795 0.427574057 0.279330347 0.091028687 0.614616068 0.742767709 +0.904870153 0.863070259 0.717769766 0.720974455 0.954280938 0.158484605 +0.942623871 0.813812448 0.294767464 0.701598735 0.056568034 0.139421869 +0.459730814 0.386753601 0.152066845 0.663424407 0.915780682 0.60006446 +0.88885899 0.842458566 0.33674622 0.493853599 0.715058536 0.275987888 +0.816963099 0.724524619 0.524912086 0.946937415 0.29802071 0.124059534 +0.489668851 0.108102928 0.407580304 0.944582221 0.593527624 0.19422048 +0.196829594 0.0559857 0.234909266 0.057130768 0.277216488 0.157466701 +0.941485015 0.038015215 0.778325678 0.578994767 0.967508728 0.726780374 +0.001132131 0.577444411 0.670871005 0.599492031 0.657147716 0.327651588 +0.312417202 0.560869314 0.714481646 0.553912027 0.250794778 0.610912466 +0.819208259 0.250558461 0.608939158 0.061228594 0.011289382 0.908403889 +0.950711545 0.477994906 0.817827572 0.861153316 0.695794541 0.802914602 +0.606920298 0.303495779 0.016212225 0.636568262 0.019183779 0.347609204 +0.854713568 0.568749648 0.976532051 0.463163442 0.683417381 0.468880022 +0.860373235 0.222883668 0.981807179 0.307070887 0.078276599 0.706660482 +0.010335629 0.662974269 0.430111009 0.253788533 0.061017285 0.74636054 +0.752170791 0.251741134 0.049102446 0.598464238 0.370644181 0.500832707 +0.766682283 0.820369642 0.397892316 0.819613856 0.007991415 0.13482265 +0.327006007 0.702900722 0.573514754 0.692849955 0.621309644 0.280086434 +0.859772187 0.039881207 0.77907333 0.40364858 0.18989394 0.465175834 +0.82018465 0.15470931 0.599322086 0.783955453 0.311039802 0.179217935 +0.126696706 0.676153295 0.095188188 0.676008339 0.966578993 0.891744606 +0.976872436 0.98557099 0.631416881 0.180597496 0.89779325 0.59863623 +0.870297636 0.143700647 0.970169931 0.767404102 0.856276361 0.92762036 +0.267133 0.474118777 0.957921698 0.588037485 0.774102798 0.644937566 +0.784431664 0.049289167 0.214283721 0.805966428 0.227119388 0.6500616 +0.934401093 0.134216887 0.745907477 0.427993753 0.950212891 0.313497523 +0.320150462 0.22638605 0.045061967 0.875247195 0.98850106 0.216767033 +0.830071679 0.1162482 0.90312476 0.730301381 0.642917672 0.614630052 +0.227823462 0.741118812 0.58932827 0.117400359 0.130770312 0.516546049 +0.349850888 0.032837733 0.287779168 0.557765462 0.106672245 0.608377802 +0.012884733 0.713949859 0.280492858 0.12418911 0.147014738 0.096444078 +0.472886625 0.370277513 0.965160388 0.460856483 0.006755983 0.929499187 +0.856391786 0.964582053 0.426907648 0.836995991 0.383138021 0.500183647 +0.826659824 0.385122356 0.217195928 0.002013147 0.44088576 0.898690106 +0.776305788 0.931687451 0.231902878 0.109878747 0.773381074 0.912036956 +0.709989909 0.076067298 0.278895638 0.317693618 0.237898895 0.314007407 +0.640534503 0.03173477 0.843271666 0.690957458 0.476257443 0.500824953 +0.357435136 0.476816416 0.169878947 0.264774276 0.70238558 0.889496163 +0.744925855 0.40040481 0.362023558 0.015166834 0.281365549 0.251436239 +0.621770625 0.895650953 0.844878034 0.028017947 0.123087603 0.371951801 +0.164760521 0.019293835 0.331392169 0.140635921 0.853644563 0.559331351 +0.605963647 0.921531211 0.472119236 0.573257498 0.403516691 0.731189558 +0.508127721 0.686043522 0.238310458 0.477192753 0.941770085 0.392151909 +0.310231865 0.140265112 0.750771312 0.994928463 0.932068659 0.459581185 +0.292939365 0.531669335 0.063642223 0.166249237 0.191574947 0.278012987 +0.900756341 0.713204681 0.389898114 0.196032045 0.640404162 0.579428347 +0.412985621 0.625483607 0.085422546 0.34818722 0.371511337 0.580066308 +0.062443391 0.420051476 0.935435225 0.431877749 0.318925723 0.798341125 +0.209238106 0.722285448 0.188211817 0.27886053 0.56851137 0.186132939 +0.091847364 0.624385211 0.466426634 0.043804119 0.175065619 0.029937624 +0.895180532 0.717935793 0.32878893 0.498250828 0.439815352 0.423703362 +0.530924684 0.291873776 0.627940909 0.202663699 0.553088598 0.004712161 +0.242137803 0.509401395 0.830725113 0.104473487 0.00459113 0.048585682 +0.134189128 0.616148868 0.589681941 0.666637435 0.861028982 0.122730664 +0.599980489 0.027810608 0.775721886 0.005236839 0.945772964 0.253234909 +0.739781438 0.574227281 0.607282736 0.117789579 0.221887333 0.153009366 +0.290115145 0.128885028 0.069943618 0.673973219 0.053969322 0.976514546 +0.806300319 0.960608579 0.112928107 0.637126219 0.773388281 0.318612745 +0.269317951 0.76171461 0.060081033 0.071408678 0.743845082 0.115716413 +0.715766155 0.481183909 0.470317579 0.22881709 0.71122957 0.007054658 +0.244351017 0.825640765 0.260592115 0.188012216 0.949720819 0.273328956 +0.029167775 0.690918888 0.60790318 0.275191078 0.998795327 0.550666404 +0.052563474 0.98451321 0.345300657 0.714264756 0.274699121 0.03968374 +0.580494619 0.178835351 0.232464684 0.222803277 0.931332157 0.934676998 +0.898050902 0.381399832 0.470698334 0.885318833 0.461159339 0.396427076 +0.096537234 0.926880325 0.527375365 0.754455928 0.996199462 0.574409845 +0.94381659 0.285004687 0.467714975 0.681435979 0.572097901 0.47652241 +0.197652528 0.183479481 0.936486724 0.200072455 0.122777409 0.558624591 +0.280739241 0.560896493 0.002167026 0.114875758 0.960498172 0.412271213 +0.272431489 0.628959567 0.037707889 0.032889243 0.570971501 0.909200731 +0.279758058 0.036334565 0.132738955 0.899074158 0.994008994 0.05779811 +0.588171047 0.926230026 0.873241689 0.934376873 0.714326072 0.921067982 +0.643461906 0.858836202 0.667019416 0.642339853 0.607693555 0.728810745 +0.605681042 0.602469329 0.302569152 0.871135135 0.936863854 0.117486388 +0.953341802 0.927534989 0.559984485 0.291532595 0.800715014 0.699086668 +0.767629948 0.110427297 0.583384748 0.703979101 0.429285179 0.163256825 +0.353323964 0.185574401 0.718304432 0.756192058 0.783687962 0.967018225 +0.099584738 0.376817109 0.592856602 0.126757875 0.688044338 0.812457353 +0.001393564 0.091997408 0.53940866 0.690712389 0.932190494 0.792983686 +0.468263298 0.093920399 0.96023731 0.922759852 0.994812096 0.77899917 +0.29625582 0.617307332 0.052794494 0.683261728 0.977164863 0.116443451 +0.58343656 0.339048043 0.230475782 0.019108347 0.576816693 0.037568309 +0.511987654 0.301761977 0.168043902 0.334846581 0.190314437 0.84224206 +0.586323135 0.646663324 0.431796299 0.780223094 0.924971454 0.819857789 +0.938259206 0.118144365 0.253766124 0.917971336 0.794989601 0.820193788 +0.971518724 0.966790293 0.311761099 0.11938439 0.163305468 0.736276199 +0.69205353 0.719000002 0.941814628 0.095159636 0.869138147 0.903741552 +0.898255293 0.80376927 0.601281867 0.45444322 0.976433974 0.860000681 +0.89611258 0.480762528 0.404385228 0.319008299 0.253785426 0.780621762 +0.295453574 0.389131367 0.111088606 0.350254298 0.658817276 0.230441563 +0.80953762 0.79337975 0.920372743 0.302266888 0.896801613 0.037845596 +0.347287666 0.405443897 0.250328649 0.963386432 0.93816277 0.061917893 +0.594110321 0.035250615 0.28390536 0.324492093 0.189593996 0.64375848 +0.622443648 0.881472747 0.012991663 0.298315032 0.066196243 0.164668336 +0.474820791 0.428105087 0.621789525 0.073075151 0.295394296 0.740128624 +0.782181573 0.913866464 0.171315377 0.79328916 0.077435382 0.3998855 +0.499612008 0.399991237 0.67993809 0.33236137 0.76975399 0.015048178 +0.98027817 0.049173715 0.859136956 0.792111012 0.120985356 0.052623562 +0.241191963 0.459751312 0.125467463 0.408380867 0.497960085 0.293548676 +0.142796943 0.672331297 0.639744439 0.942200531 0.212996677 0.578334872 +0.47243097 0.505298484 0.440412842 0.772256708 0.964727343 0.829361782 +0.08949611 0.027872014 0.553032959 0.582818518 0.472999044 0.793010392 +0.249651005 0.695637599 0.51961882 0.81622572 0.640159782 0.892100219 +0.092151536 0.712150447 0.412127053 0.580431528 0.254538546 0.127974352 +0.954027568 0.867976041 0.209747155 0.097864834 0.068273153 0.60103253 +0.063538791 0.803379342 0.655182722 0.490552023 0.010136346 0.760028592 +0.240003277 0.454694881 0.136498348 0.240593531 0.294551247 0.398813165 +0.541753168 0.980387496 0.991887153 0.099102939 0.60367526 0.618526384 +0.778917801 0.182039515 0.035207104 0.384880839 0.633799186 0.496253377 +0.810970586 0.37237114 0.866299393 0.061295966 0.350207536 0.089638268 +0.656997857 0.709552769 0.132597451 0.283440889 0.300764056 0.681495998 +0.516970443 0.748391361 0.16865326 0.444322828 0.991920287 0.577908141 +0.661512817 0.184074275 0.78359147 0.241478836 0.074030351 0.381555217 +0.271361927 0.443914052 0.268021878 0.504493662 0.843621308 0.910629584 +0.113734544 0.855709129 0.068442128 0.317212686 0.156578047 0.532516667 +0.297385637 0.650179587 0.49142868 0.145516772 0.038873861 0.164181015 +0.538294177 0.150492579 0.20736715 0.690566582 0.997926849 0.941675121 +0.818292683 0.70119757 0.164370864 0.839055068 0.102277459 0.611266346 +0.034897901 0.911776725 0.936632063 0.404799502 0.286240226 0.712967401 +0.739504977 0.417115255 0.541508334 0.69578163 0.314422481 0.364046323 +0.824867209 0.118069161 0.386436481 0.89719672 0.501177554 0.565036036 +0.003406042 0.981986378 0.640673204 0.414919145 0.825050661 0.073871008 +0.89577453 0.25507812 0.218154909 0.898872131 0.475734524 0.45733321 +0.46348738 0.366784662 0.001681803 0.024727178 0.904865793 0.629467079 +0.883598105 0.435895964 0.642844232 0.800677054 0.569632607 0.448660114 +0.909723851 0.577022702 0.145909518 0.395950144 0.006608868 0.830585616 +0.629741267 0.009088335 0.880497111 0.019748343 0.699996402 0.247533333 +0.894442429 0.963194209 0.224070617 0.529606984 0.716813989 0.044682974 +0.511021274 0.93198561 0.117356141 0.113736527 0.984465936 0.31456463 +0.483481232 0.082004038 0.932381878 0.958139659 0.260846619 0.330063582 +0.830246633 0.316370867 0.634050365 0.795118599 0.643526452 0.436493349 +0.375900289 0.328196868 0.809404356 0.39291523 0.450620576 0.131241734 +0.466281723 0.055613816 0.614730933 0.616816312 0.00761999 0.982887268 +0.992723403 0.743775644 0.279189235 0.137844543 0.421543074 0.536586993 +0.120673434 0.239812304 0.505038925 0.711764346 0.254394464 0.676095719 +0.860953093 0.061739752 0.004600618 0.422920923 0.877329688 0.859394285 +0.902460921 0.85205144 0.459333654 0.522801785 0.043981917 0.609335506 +0.798828118 0.971322888 0.511981078 0.502211978 0.119727743 0.562436511 +0.489215297 0.881930145 0.968340495 0.747580023 0.386941806 0.557647941 +0.981915946 0.124583415 0.320909875 0.886465597 0.802464087 0.870658075 +0.770566789 0.489102853 0.567685475 0.188971691 0.756730712 0.249712374 +0.442039008 0.225673497 0.181706358 0.987014129 0.462435006 0.081402771 +0.041634467 0.815063028 0.977033425 0.902628198 0.361525963 0.845657419 +0.827526926 0.446756744 0.643889414 0.685631056 0.644608808 0.959965967 +0.395009104 0.029588964 0.624143846 0.720781555 0.322254805 0.151507315 +0.026100686 0.753569002 0.700748807 0.707474658 0.705368562 0.94700938 +0.768394607 0.816009034 0.51956534 0.987770883 0.785885943 0.039057299 +0.157140238 0.175654154 0.092673513 0.810658528 0.703816929 0.573389368 +0.680653882 0.869277137 0.126654374 0.432070414 0.582782288 0.659695513 +0.468018785 0.909552921 0.317204678 0.673056369 0.993411973 0.108163922 +0.534440977 0.097238338 0.565591022 0.440441006 0.630411311 0.514207738 +0.764461801 0.89721029 0.173097636 0.466558968 0.352881344 0.046879483 +0.543672008 0.02503665 0.349170718 0.297014718 0.567704088 0.081468477 +0.898220191 0.323022741 0.478550707 0.261139438 0.30083238 0.55166721 +0.470716523 0.20679317 0.968357032 0.265923486 0.085132054 0.265842894 +0.937342476 0.055740625 0.486883393 0.749615957 0.904658147 0.65851207 +0.679700509 0.177877474 0.056762654 0.250432318 0.073248278 0.602100299 +0.049707674 0.591656437 0.41170175 0.435810346 0.001826806 0.626166459 +0.63309147 0.707347602 0.857937375 0.073715535 0.720051102 0.163906614 +0.485794343 0.424308388 0.581128358 0.705183506 0.514116144 0.583208518 +0.847402876 0.982229067 0.387032937 0.407136763 0.788062895 0.298348201 +0.672139367 0.574403935 0.475520701 0.208684178 0.918402583 0.667777706 +0.492353017 0.383823468 0.704210318 0.502779748 0.718850546 0.369412079 +0.85608269 0.549835673 0.732319289 0.679417265 0.63345832 0.424112225 +0.181014341 0.314433841 0.047335387 0.77987332 0.795657187 0.067711516 +0.648266627 0.823917178 0.494441676 0.534791192 0.691677351 0.810866848 +0.103569868 0.553891087 0.287817091 0.731283596 0.489878662 0.395069626 +0.577479651 0.438895892 0.043098278 0.391232436 0.905329424 0.215980823 +0.597520179 0.007504104 0.194228902 0.19231039 0.33848355 0.757694817 +0.754498016 0.462156474 0.979574352 0.335982622 0.183028014 0.395773498 +0.539402432 0.299672201 0.124242051 0.949455486 0.991168717 0.050494576 +0.639321293 0.116032182 0.324864598 0.052131003 0.870546712 0.437990483 +0.539698793 0.513067539 0.979779742 0.189202544 0.869143869 0.765943978 +0.629031688 0.165038655 0.069781193 0.129880538 0.789172387 0.740188197 +0.832546675 0.120970208 0.265453601 0.063541181 0.453251423 0.200702681 +0.544266056 0.424058963 0.003935245 0.238217149 0.698409375 0.869854006 +0.364761793 0.141128338 0.954146069 0.51136162 0.84583995 0.926336465 +0.315207207 0.532856044 0.025999053 0.499767861 0.56793599 0.774328497 +0.008012619 0.636653683 0.245422024 0.222410841 0.509884994 0.252788774 +0.693315123 0.751655361 0.193819311 0.569280986 0.335927018 0.39702944 +0.74933873 0.915750522 0.501803273 0.541659566 0.309632601 0.544271024 +0.942734361 0.606930852 0.419957612 0.17908693 0.513237436 0.822903723 +0.231420732 0.104433591 0.443151851 0.805709043 0.269585047 0.508539347 +0.419585804 0.753431223 0.435266007 0.371470314 0.682042464 0.666377884 +0.663453374 0.073578251 0.276686339 0.297954797 0.761293132 0.526372574 +0.350928897 0.899373981 0.063393478 0.73637245 0.759718375 0.451177571 +0.942701745 0.082241717 0.916357821 0.207416321 0.453017148 0.195161852 +0.791345723 0.237615096 0.48706956 0.678870011 0.178431388 0.859297414 +0.056433913 0.452823449 0.995326259 0.57318672 0.424552654 0.85401191 +0.035954158 0.331830245 0.028355714 0.67360062 0.686215999 0.660697941 +0.223024311 0.7114326 0.948488097 0.651535098 0.317907358 0.626075361 +0.135577002 0.988344203 0.113441214 0.992204094 0.338619331 0.174048788 +0.237029465 0.352813065 0.607623942 0.765912148 0.950818188 0.794361503 +0.962565465 0.904944702 0.825788283 0.495533197 0.182936552 0.107254854 +0.272830639 0.999517076 0.804406978 0.894434316 0.480115241 0.567444054 +0.347124254 0.632953474 0.861634177 0.058658432 0.043134947 0.35859796 +0.012002031 0.849504453 0.130744121 0.814295267 0.484235353 0.387961442 +0.237893933 0.814293087 0.303327322 0.699787398 0.379228 0.989707632 +0.815955825 0.347636352 0.325947349 0.87643057 0.578030215 0.370506278 +0.184247607 0.528578744 0.851025903 0.406509146 0.372759306 0.715142057 +0.302122424 0.462109662 0.348761826 0.360277323 0.670977938 0.329369664 +0.038885515 0.543962182 0.222056459 0.294341077 0.020178652 0.202227866 +0.456855879 0.405892598 0.619290646 0.681450331 0.481609403 0.971911139 +0.767059041 0.822747614 0.214850975 0.860406259 0.46482294 0.736719711 +0.101866782 0.148913415 0.489124259 0.315909356 0.743255498 0.62249837 +0.933187779 0.780840075 0.758374718 0.19011765 0.186050552 0.720636421 +0.052810706 0.362251297 0.564923656 0.462807329 0.710914835 0.044820218 +0.616900355 0.934568462 0.991992201 0.434828075 0.893865122 0.449204535 +0.600855748 0.697344381 0.809711912 0.080566471 0.264506336 0.487786115 +0.26481409 0.157439467 0.267942727 0.477177902 0.456831559 0.529540802 +0.563981662 0.151067127 0.888161591 0.174676247 0.881397805 0.731149667 +0.03314148 0.529151576 0.966626001 0.537127236 0.536693662 0.746785226 +0.601674256 0.305384057 0.584245337 0.162091336 0.933539457 0.010582853 +0.576853155 0.627461846 0.837285072 0.577730543 0.476810384 0.616098823 +0.358660095 0.556569562 0.757934702 0.32457223 0.145234458 0.050332996 +0.340239819 0.38655101 0.858722944 0.330096011 0.287435384 0.02625962 +0.862531903 0.644593219 0.890289698 0.025150273 0.730957581 0.94690784 +0.50496064 0.176767971 0.21445694 0.473201993 0.493663172 0.161169075 +0.103058301 0.537937955 0.159926857 0.914554416 0.08415248 0.426731682 +0.721898132 0.018055907 0.962951609 0.497417396 0.756841236 0.931744525 +0.207397282 0.113472063 0.877733059 0.17133123 0.996158488 0.069668038 +0.747884909 0.916172626 0.332664696 0.455443452 0.839226583 0.122310448 +0.336782978 0.558210342 0.254353269 0.85968473 0.292486379 0.669994262 +0.809053588 0.699130359 0.839030107 0.168449166 0.049487375 0.859666593 +0.93382436 0.550256663 0.435968276 0.010995357 0.043133837 0.911236664 +0.368253448 0.773083097 0.992277 0.126699416 0.548763056 0.971175083 +0.595272803 0.44713632 0.084199797 0.504117725 0.273418059 0.297369794 +0.331254747 0.226810129 0.550276967 0.045152121 0.421710717 0.309093849 +0.394796698 0.191128704 0.830257717 0.664874833 0.090987983 0.667199839 +0.526648687 0.603694469 0.44639077 0.517060567 0.894572675 0.054944516 +0.570644361 0.731964849 0.986338655 0.221153823 0.821698889 0.834251647 +0.213031938 0.87682115 0.296817942 0.945466204 0.324815408 0.593597075 +0.952447717 0.930262013 0.404475465 0.342983455 0.100180929 0.809940365 +0.031091417 0.121238276 0.152361108 0.148957487 0.003862326 0.820974633 +0.332887371 0.301660659 0.106603584 0.842055259 0.354856671 0.538852523 +0.446595984 0.170616088 0.762080152 0.561045489 0.837765893 0.086808207 +0.424240179 0.946590686 0.570854908 0.951642514 0.169703468 0.992453106 +0.409096161 0.179889831 0.611286749 0.655694482 0.188972614 0.869556454 +0.638734219 0.007308005 0.50732752 0.839470837 0.830340439 0.180693116 +0.020762085 0.505420633 0.410104495 0.284882825 0.740680051 0.44063953 +0.744878399 0.183398483 0.063352916 0.405271521 0.243884639 0.702759787 +0.66283196 0.807350432 0.623715895 0.81788787 0.28224649 0.914301894 +0.706797568 0.68182778 0.904326058 0.250549935 0.505346729 0.993066719 +0.445570137 0.796327239 0.01441066 0.997856208 0.955104925 0.143520425 +0.980102404 0.154357003 0.111933967 0.757887303 0.686363505 0.233710597 +0.811529365 0.530046416 0.30553152 0.308614696 0.42360896 0.096516085 +0.678273818 0.919530129 0.843045898 0.265203462 0.579648955 0.386163726 +0.8512396 0.895201932 0.044776124 0.786633846 0.187846124 0.357363946 +0.189477726 0.452366217 0.703985572 0.419781775 0.529804592 0.026991782 +0.33851885 0.114390296 0.041192464 0.159689045 0.691156632 0.659023483 +0.633376128 0.920632776 0.662142694 0.547289956 0.889196015 0.4548987 +0.348359582 0.882358791 0.346051376 0.297379196 0.984656679 0.914040905 +0.566641343 0.312432706 0.616334233 0.330637259 0.200878675 0.962488321 +0.785068399 0.273758583 0.508336191 0.19216124 0.947953696 0.662683372 +0.83308415 0.220163157 0.894591105 0.563687313 0.899540067 0.774858925 +0.957167737 0.747559794 0.980626292 0.969407972 0.089176356 0.890582085 +0.421270595 0.157407116 0.90313302 0.931346661 0.431957076 0.273722075 +0.44764977 0.378548568 0.419777082 0.391187405 0.716067087 0.031193333 +0.606156158 0.473804817 0.00127384 0.060751341 0.903202706 0.977482961 +0.198200446 0.625591847 0.461360888 0.274159363 0.130388965 0.147941057 +0.055272611 0.521215148 0.010861022 0.960998541 0.976505937 0.819452097 +0.821375405 0.836410312 0.088096528 0.983041082 0.220618925 0.37705098 +0.80060402 0.207200203 0.653128771 0.198094761 0.234240534 0.559786133 +0.522837941 0.597886202 0.082475819 0.107059315 0.093283546 0.79644047 +0.766396948 0.011758651 0.973386875 0.270820446 0.811516176 0.953596089 +0.989239044 0.047706346 0.738715268 0.319126533 0.499254036 0.274382295 +0.283263981 0.83666017 0.918329288 0.14166652 0.312335049 0.862043824 +0.233223834 0.505470099 0.996915125 0.186488623 0.214677827 0.813547521 +0.331091949 0.39439727 0.923309453 0.044783832 0.492558592 0.413374688 +0.61029942 0.458102051 0.32283855 0.722931963 0.25883499 0.248857663 +0.820615258 0.38098898 0.38680127 0.115351461 0.664255782 0.324916653 +0.457608191 0.700162447 0.091751772 0.065710965 0.164571817 0.260126358 +0.291061758 0.638586069 0.411160408 0.575875868 0.675549882 0.539609178 +0.822187531 0.717434454 0.256827502 0.75485866 0.69815038 0.038004717 +0.951490829 0.086935412 0.022864291 0.961309608 0.346200275 0.271895377 +0.992755313 0.514372326 0.122925995 0.919206545 0.549253641 0.939838662 +0.017290155 0.148347009 0.732018676 0.412776896 0.131488206 0.280606628 +0.927480981 0.631753251 0.711228667 0.812044692 0.22766427 0.911971303 +0.076393239 0.673147274 0.864368191 0.605356435 0.436773906 0.553637868 +0.375654728 0.210096677 0.241287802 0.222525303 0.349674979 0.854903737 +0.736398631 0.100857587 0.142227931 0.841520439 0.516423492 0.448043194 +0.849121965 0.894267785 0.781645352 0.831290697 0.371596086 0.787221544 +0.151764057 0.906249442 0.253944382 0.530052888 0.279041758 0.119954907 +0.337295411 0.754600312 0.918916408 0.919993215 0.515075284 0.625155182 +0.268212208 0.31394582 0.054401006 0.320477748 0.882514543 0.34865673 +0.461284422 0.167464644 0.160597993 0.417482456 0.231340782 0.964636146 +0.182384191 0.454038462 0.284106126 0.245223096 0.056279638 0.649647572 +0.843793613 0.326907517 0.049465118 0.824079157 0.193916334 0.757845155 +0.117431245 0.372863223 0.123949563 0.109731013 0.58797691 0.767815014 +0.706413841 0.922070426 0.512048936 0.746991966 0.815724453 0.372565053 +0.963716758 0.199762815 0.511424913 0.457768693 0.320661193 0.189432973 +0.311427728 0.460874523 0.879597932 0.15916308 0.781597938 0.734898674 +0.843034797 0.273499222 0.341968567 0.256652199 0.043926012 0.884433331 +0.518340699 0.29824212 0.555770684 0.662533052 0.617174356 0.156885055 +0.620231076 0.488754481 0.825026195 0.469265887 0.729970949 0.737952033 +0.500966079 0.056798671 0.313953621 0.901548452 0.655827612 0.958132692 +0.254443517 0.805020819 0.111525109 0.897401866 0.583002659 0.299856112 +0.215724727 0.111127325 0.533819004 0.942141725 0.828003075 0.302840931 +0.53891913 0.669091833 0.960501988 0.164201991 0.514754803 0.537818723 +0.185250431 0.229857609 0.663224826 0.048354535 0.923170826 0.239344092 +0.77897444 0.309578475 0.265232119 0.071564015 0.193694437 0.838289627 +0.882311634 0.634823606 0.348465962 0.718297556 0.555502572 0.808873197 +0.612462441 0.076240281 0.67801235 0.470504014 0.985505776 0.185275214 +0.931581019 0.200211262 0.324248067 0.774507255 0.173995288 0.243232227 +0.579091889 0.14177804 0.72861261 0.516217865 0.017769599 0.579485948 +0.326569251 0.642521387 0.300488701 0.835862071 0.243261572 0.486815887 +0.505368641 0.970651654 0.845432616 0.170970716 0.021837236 0.811180631 +0.036478104 0.259875808 0.772313372 0.933061651 0.068729095 0.387693488 +0.291289532 0.234681348 0.203109919 0.614271062 0.659089101 0.364688173 +0.592253517 0.20096059 0.044831833 0.676594828 0.748121 0.808020405 +0.741806482 0.0430039 0.931524813 0.466429958 0.227876517 0.550733715 +0.588332673 0.022781853 0.375096765 0.526454628 0.219254723 0.41571523 +0.057395873 0.653346232 0.147569597 0.878922721 0.718848124 0.556796176 +0.126604163 0.469202086 0.173175126 0.683051504 0.502625427 0.394472664 +0.92642799 0.913804437 0.008722763 0.865996348 0.518607779 0.060889601 +0.773262721 0.993032695 0.519880583 0.663628003 0.101775895 0.327407299 +0.350804426 0.479514872 0.522000882 0.535936479 0.38549241 0.090967391 +0.824991765 0.836082427 0.960393775 0.933879332 0.092890773 0.100657262 +0.028869369 0.250684188 0.068175582 0.851178128 0.784664958 0.553991889 +0.081083437 0.276553203 0.457270226 0.06048891 0.829630052 0.159321478 +0.249314198 0.289883254 0.874750624 0.864692654 0.860006249 0.675917922 +0.909928027 0.232325844 0.877744217 0.215674347 0.793612468 0.169710069 +0.856089048 0.075556172 0.81640863 0.679676296 0.486381306 0.477209507 +0.494049216 0.89305208 0.495016777 0.907724987 0.532488974 0.696327985 +0.390821284 0.392617992 0.216138532 0.496687598 0.310192363 0.125104627 +0.856776726 0.536631894 0.837360669 0.691343716 0.635847937 0.173239902 +0.272915322 0.98630453 0.464338199 0.955290646 0.237361629 0.847316861 +0.349615795 0.944424566 0.862339178 0.484219648 0.667378648 0.897960745 +0.398364117 0.751875504 0.035604477 0.569833205 0.233966817 0.127431527 +0.793979077 0.86919899 0.685114712 0.723863485 0.902940088 0.20817535 +0.488333125 0.908501518 0.913401923 0.16821835 0.872496288 0.446347799 +0.688279992 0.159817922 0.201900017 0.178660787 0.304903813 0.374748304 +0.297384886 0.134464538 0.247982077 0.24725708 0.742847767 0.560134752 +0.925405408 0.52282685 0.159194867 0.904189455 0.795516334 0.011192565 +0.213728245 0.940023464 0.179795518 0.728450193 0.070143702 0.724292376 +0.999401674 0.860236854 0.492198529 0.961860768 0.169030991 0.212595961 +0.734026497 0.569215189 0.689756004 0.74504528 0.350362834 0.726060555 +0.408395254 0.941583852 0.443508867 0.387962589 0.394964628 0.955765167 +0.59309546 0.986127696 0.144490653 0.900331657 0.236872905 0.609553576 +0.233948464 0.381172583 0.024649828 0.711081311 0.600695106 0.907356174 +0.601569014 0.082752684 0.614320403 0.686084381 0.150893655 0.88317609 +0.828685091 0.199562 0.291443013 0.300432949 0.11389479 0.285027502 +0.555435926 0.428513969 0.026517822 0.375088477 0.578237642 0.422203518 +0.973011537 0.914249023 0.494441996 0.041718127 0.986387404 0.307285827 +0.840102318 0.727842359 0.617482217 0.318499238 0.948997008 0.051153208 +0.97862417 0.202796429 0.415675057 0.857866515 0.701503221 0.633394401 +0.78453487 0.470515279 0.704553147 0.269244824 0.356637156 0.630294406 +0.933065447 0.34481465 0.617432247 0.188118118 0.710166921 0.605484809 +0.924782364 0.863125225 0.599318665 0.850210555 0.936029206 0.862276117 +0.101670599 0.702208323 0.595581949 0.328442785 0.011852428 0.530656664 +0.746847454 0.932880698 0.611509584 0.077126111 0.034844521 0.796312233 +0.818030899 0.01829468 0.355703314 0.364980251 0.676395435 0.374498081 +0.047101092 0.20152559 0.551819609 0.198920001 0.432532872 0.171850183 +0.924091921 0.261513892 0.152505066 0.584997679 0.760838452 0.30618819 +0.892962079 0.93807552 0.077655845 0.828834693 0.413009289 0.963767838 +0.185345317 0.509990819 0.356605309 0.823133703 0.424436548 0.493488968 +0.689848094 0.050122014 0.148355251 0.830385643 0.835353407 0.580215093 +0.091087076 0.259652628 0.907618598 0.549506865 0.896045576 0.021615403 +0.087087513 0.33366572 0.078991288 0.804759886 0.835849728 0.472608417 +0.801016586 0.820023286 0.316697468 0.083313812 0.847353848 0.028099458 +0.339053155 0.678031434 0.298556303 0.804974019 0.431920421 0.338876658 +0.638736738 0.580556936 0.2969604 0.331813906 0.5402789 0.235894218 +0.527614277 0.413788168 0.57330035 0.447838414 0.941748485 0.941966738 +0.088466957 0.401782325 0.350247687 0.964379619 0.161787587 0.492219949 +0.387449079 0.287932258 0.082671396 0.497127169 0.497108773 0.616204035 +0.744970509 0.031436102 0.950688695 0.584578948 0.296827353 0.777287861 +0.425727079 0.185110609 0.858115857 0.144392688 0.237260555 0.766014018 +0.911158415 0.429811603 0.989036847 0.264227 0.611364012 0.603823188 +0.009791377 0.058591459 0.166438745 0.492679914 0.962416388 0.209314313 +0.657286288 0.335444867 0.775495364 0.383403148 0.540081592 0.992301377 +0.099224561 0.004560301 0.586899755 0.569547641 0.653456956 0.391737376 +0.056890614 0.729953283 0.007601835 0.363310053 0.350099801 0.582611297 +0.049979458 0.258941004 0.472649264 0.901431984 0.908100943 0.684349817 +0.477253365 0.797581487 0.940765868 0.494462274 0.583054306 0.328268853 +0.798770674 0.450073069 0.989909048 0.066476043 0.326040135 0.603286334 +0.50123657 0.446836333 0.947090981 0.395739775 0.209086871 0.823096501 +0.99424534 0.413638452 0.591089371 0.918680994 0.807868421 0.367642067 +0.146469247 0.454047955 0.385587748 0.773268239 0.69873943 0.941448584 +0.056400415 0.501720986 0.306512479 0.495697104 0.196381238 0.160600281 +0.407161899 0.731456794 0.693034779 0.193347157 0.604023113 0.050270177 +0.681581106 0.769897602 0.445517369 0.40651058 0.85048399 0.215985118 +0.817887166 0.747816796 0.839381288 0.417827657 0.370016437 0.888070448 +0.757119584 0.553631954 0.445484062 0.302575486 0.872850086 0.837225493 +0.128272045 0.532064441 0.692908895 0.586542418 0.674618879 0.318370587 +0.74745321 0.880908034 0.95039065 0.225036474 0.45641616 0.356549338 +0.164155238 0.415001458 0.718239925 0.279873623 0.429260136 0.525968075 +0.152999628 0.09207713 0.417748463 0.638275514 0.724604689 0.683803882 +0.850764908 0.703517375 0.727585708 0.191958716 0.985634672 0.989055663 +0.236892091 0.405652309 0.650680402 0.139238111 0.030946977 0.902362398 +0.908235085 0.424394607 0.866296924 0.88981386 0.745381474 0.205965661 +0.327742803 0.576218122 0.853047145 0.28868448 0.91012184 0.625530274 +0.308399695 0.282981725 0.149772263 0.976025918 0.334470153 0.312945148 +0.839196942 0.334301818 0.127719711 0.69125222 0.828494206 0.705904606 +0.892770928 0.006305284 0.878380586 0.987038386 0.387048611 0.482518281 +0.429506312 0.986692082 0.781911696 0.929693096 0.541675326 0.955502429 +0.119123935 0.652162889 0.025980941 0.388041212 0.38261265 0.843456051 +0.821293027 0.327932488 0.981716085 0.731548458 0.595881112 0.329149053 +0.381572932 0.055203068 0.622612861 0.151268876 0.59154216 0.944581599 +0.474335781 0.328224222 0.04185951 0.540094206 0.016590467 0.098045472 +0.806359305 0.686827982 0.929314608 0.479722981 0.95379226 0.379232999 +0.008287409 0.766684873 0.236065418 0.341228876 0.271079004 0.020941264 +0.181679493 0.04658857 0.926144832 0.628944747 0.443793069 0.888621189 +0.002979181 0.765529748 0.427676979 0.161245735 0.046512087 0.796862436 +0.379894024 0.433186797 0.634329458 0.191012881 0.196075237 0.664802728 +0.448921422 0.200907168 0.115951506 0.676121135 0.922219017 0.304418048 +0.744803341 0.631437327 0.444481858 0.101153154 0.040770854 0.210434555 +0.328711454 0.368202473 0.217087012 0.361986018 0.846373982 0.322170424 +0.019836295 0.039939507 0.131349781 0.657243048 0.188777522 0.336972766 +0.95598272 0.129363721 0.849383398 0.336542502 0.948473753 0.257788125 +0.423660482 0.428085935 0.458799677 0.961277309 0.534570753 0.672920097 +0.008745174 0.617991148 0.224990744 0.258800813 0.906534712 0.291773901 +0.352907135 0.786808717 0.528920466 0.395079072 0.085771667 0.033048024 +0.339616267 0.903550926 0.667030024 0.282584247 0.644241096 0.271619552 +0.487483447 0.794093027 0.508171945 0.696466972 0.812900203 0.694067893 +0.611579668 0.639558083 0.346080074 0.150568909 0.751699013 0.772751514 +0.504033216 0.246586617 0.038711192 0.405502962 0.176738533 0.689033137 +0.749225436 0.247833586 0.010473675 0.297553748 0.904276155 0.319291786 +0.246073315 0.534767611 0.671951468 0.357805693 0.156089492 0.366687638 +0.448356281 0.080557936 0.623256585 0.519245674 0.434204197 0.461301327 +0.019167979 0.52003818 0.596506069 0.666375986 0.216931294 0.107697172 +0.550947186 0.997473789 0.391375738 0.056373242 0.696341161 0.946900905 +0.700191555 0.548111161 0.553472787 0.694329666 0.93366868 0.177290388 +0.302051061 0.426402588 0.725795132 0.122514469 0.238415989 0.870048492 +0.999597971 0.249951783 0.50672318 0.618881977 0.496051707 0.158586848 +0.983380283 0.115261826 0.670793097 0.167578551 0.664270238 0.495152014 +0.748181087 0.870647529 0.061143695 0.238975555 0.832380771 0.360084128 +0.372609596 0.760251175 0.637825565 0.178394479 0.878181055 0.149639321 +0.133257685 0.962616439 0.702698954 0.200596381 0.377711653 0.843819955 +0.339165837 0.85474478 0.019129441 0.143371394 0.478249198 0.36138893 +0.917728273 0.358567391 0.200960631 0.788156027 0.558729144 0.54367289 +0.887298914 0.901945937 0.166800599 0.293157175 0.319368555 0.176150947 +0.316834157 0.279893872 0.218222314 0.417943024 0.338614264 0.739921479 +0.935483805 0.291341697 0.064732046 0.582651231 0.432242028 0.924915489 +0.818024564 0.69953135 0.109248705 0.25477333 0.302222231 0.30014214 +0.343548117 0.713341151 0.831222487 0.956568278 0.084232744 0.881849863 +0.906690983 0.848042744 0.529275091 0.627805985 0.126945394 0.086389743 +0.423656314 0.453753969 0.251704134 0.926683004 0.537698843 0.208886455 +0.785243624 0.180678976 0.147587407 0.024198484 0.72754358 0.13536935 +0.831333526 0.773017885 0.756726175 0.503056864 0.580714885 0.68696192 +0.656194355 0.650260424 0.474124321 0.145640536 0.026487123 0.660707406 +0.289854058 0.050859542 0.749076683 0.151936352 0.382571657 0.174837706 +0.410701736 0.210524653 0.919205608 0.681723116 0.051852861 0.378048967 +0.401335123 0.18020439 0.225893207 0.594818893 0.736065955 0.179166779 +0.013011316 0.834032354 0.480181444 0.72810641 0.69854604 0.424391289 +0.136078552 0.622152464 0.59813982 0.363906326 0.814255582 0.297883481 +0.643464518 0.817548706 0.959744448 0.461567201 0.730414223 0.212574315 +0.184605838 0.086469403 0.310190615 0.143711104 0.355216455 0.452959531 +0.143007975 0.795668865 0.088952518 0.745269407 0.171196515 0.390073433 +0.422971782 0.263022494 0.012369146 0.458840759 0.473796778 0.304652764 +0.014911919 0.513715967 0.743883005 0.52037435 0.721376216 0.902613765 +0.385502595 0.593610367 0.387739695 0.514023502 0.392385763 0.251466363 +0.562426279 0.340064564 0.279247998 0.14639527 0.253022157 0.56457444 +0.396819634 0.58497711 0.5422798 0.444203194 0.138914992 0.302324816 +0.389091948 0.848358514 0.797445367 0.594120378 0.718303424 0.576150013 +0.96321566 0.34980822 0.592698658 0.869619532 0.987165395 0.305163604 +0.643884353 0.824190258 0.763398529 0.416679901 0.560413766 0.613227335 +0.35889644 0.327863802 0.157701528 0.735043052 0.423704451 0.80776869 +0.782209597 0.025518191 0.560580948 0.308964366 0.384751054 0.472043048 +0.367105692 0.360747004 0.729298175 0.879649012 0.454112725 0.47878551 +0.295218348 0.902755844 0.484941733 0.876433881 0.958915398 0.676061073 +0.757531165 0.778269829 0.270246975 0.650420365 0.14314313 0.75327366 +0.894712143 0.261571686 0.328866886 0.071453343 0.444869959 0.949898536 +0.29553656 0.542985786 0.821722469 0.830393926 0.92056963 0.235643359 +0.03414946 0.177476255 0.985048686 0.045605238 0.942477075 0.320270496 +0.241810868 0.958148131 0.846176481 0.019873359 0.565736441 0.636681204 +0.320276305 0.450732708 0.939814708 0.56435496 0.590112311 0.218860446 +0.702817187 0.815668747 0.137028228 0.151015982 0.48058796 0.955137319 +0.472765228 0.276296986 0.306671007 0.569612 0.859595822 0.305016404 +0.173873769 0.050637397 0.020421783 0.090393361 0.195056784 0.640757227 +0.983021763 0.023763612 0.884339196 0.053936044 0.267227774 0.122162878 +0.423466826 0.730993524 0.705031257 0.124925498 0.408584601 0.263724189 +0.640848632 0.732502131 0.064486706 0.029084613 0.058337735 0.345267751 +0.602926534 0.016276149 0.576871656 0.179323453 0.999549899 0.875915419 +0.090238682 0.070769003 0.553645023 0.113130925 0.099528692 0.887293486 +0.264570251 0.315053278 0.73235794 0.042231997 0.8430069 0.449131979 +0.240984479 0.375798377 0.787193326 0.104513044 0.28693509 0.734147179 +0.906502354 0.237206306 0.120655299 0.798806447 0.023379631 0.836967347 +0.282392344 0.569085526 0.366962419 0.46577156 0.382912215 0.633002722 +0.655708881 0.462743613 0.442293582 0.869295563 0.731406362 0.366537356 +0.136321838 0.883471394 0.978705337 0.865072978 0.508581813 0.538086318 +0.777784397 0.518987573 0.17586659 0.804769434 0.622000515 0.667974807 +0.651957141 0.238039932 0.449676766 0.002440617 0.429147462 0.165629172 +0.249657055 0.908521571 0.078800423 0.136347519 0.702030032 0.417584132 +0.79361881 0.283836 0.529138904 0.502621915 0.436900211 0.387379352 +0.584532128 0.686621161 0.747786347 0.470222935 0.785806809 0.816509809 +0.675347143 0.072927735 0.300158894 0.482982582 0.677757757 0.658993448 +0.518051771 0.236568301 0.084654674 0.734148908 0.108410733 0.276165388 +0.128136996 0.99060681 0.734020607 0.77128789 0.837372562 0.120837372 +0.12923555 0.152506663 0.805778235 0.081205367 0.231251263 0.042929944 +0.75661846 0.837127111 0.668933039 0.203682451 0.811444884 0.226132355 +0.339116966 0.540024804 0.516022186 0.699085629 0.28871159 0.906112944 +0.776498314 0.290718014 0.206851087 0.968458195 0.134238697 0.099278772 +0.347815612 0.601849889 0.840782723 0.872400458 0.8084862 0.625070949 +0.506844329 0.356349265 0.398034153 0.383722817 0.886396566 0.194473776 +0.738145424 0.795029763 0.585867139 0.142155239 0.014230759 0.136197514 +0.551943831 0.91598414 0.184032094 0.68727844 0.197166483 0.795243169 +0.662644441 0.688090533 0.527762078 0.420460292 0.125095504 0.165427006 +0.781933028 0.38476974 0.741295476 0.476684944 0.389234569 0.028986684 +0.393230659 0.365669317 0.810629772 0.880999345 0.492443978 0.463091474 +0.223459672 0.08111781 0.455527359 0.058893865 0.018166882 0.041713364 +0.667108174 0.94197641 0.948762304 0.910396319 0.470887397 0.287963734 +0.059657501 0.163954497 0.406464634 0.6266062 0.206888927 0.866271278 +0.461740837 0.140399856 0.202713898 0.077488916 0.429243587 0.414104513 +0.726244193 0.219626455 0.030538372 0.658964291 0.009873061 0.202905886 +0.010432022 0.306569533 0.525216371 0.172943263 0.528555596 0.206278338 +0.689321758 0.48375554 0.969500607 0.727224876 0.880419219 0.259161627 +0.973745203 0.968839752 0.097595281 0.851326593 0.210341531 0.324432857 +0.111550125 0.700310404 0.500361847 0.341911268 0.012536818 0.726595366 +0.148924671 0.338193549 0.117711362 0.643555331 0.310732926 0.323870801 +0.78881504 0.813750301 0.797327799 0.906534596 0.685357412 0.77554804 +0.48922009 0.327858787 0.447069612 0.764637518 0.23686352 0.587862233 +0.065505345 0.551627175 0.178782921 0.26665401 0.011426199 0.228316338 +0.234246251 0.783350095 0.196014395 0.048682347 0.958969459 0.479804562 +0.276197753 0.9783605 0.23741497 0.755254776 0.76231657 0.875677498 +0.458625713 0.740570092 0.009212609 0.023606723 0.840172104 0.73707185 +0.099156413 0.283268506 0.896901735 0.751138967 0.953114881 0.412137755 +0.87050211 0.502593255 0.007952259 0.85482026 0.606119031 0.634741043 +0.019368196 0.998371986 0.832694475 0.867879342 0.807066762 0.254253523 +0.706805499 0.534616225 0.416094595 0.353735655 0.078725696 0.116248194 +0.126439799 0.150514887 0.71629462 0.441301896 0.756784345 0.995573101 +0.174747241 0.174989399 0.624516934 0.216250988 0.377558122 0.903783036 +0.920673588 0.075561049 0.302501566 0.824168526 0.496493239 0.466624019 +0.192040211 0.624478643 0.94629937 0.988150623 0.661604638 0.042166504 +0.799313678 0.522259599 0.802614803 0.795616274 0.346086877 0.06289467 +0.357062169 0.284033287 0.087039061 0.289290366 0.384710734 0.254183527 +0.744632641 0.968647288 0.951400062 0.029492223 0.917048315 0.208522376 +0.979362945 0.602998619 0.295499901 0.333784515 0.639919274 0.185432944 +0.486819126 0.978212387 0.876468992 0.199946193 0.787613207 0.707956776 +0.707992404 0.331540018 0.880087061 0.672436707 0.167662148 0.696625882 +0.482103739 0.539846275 0.273417962 0.821716846 0.521633551 0.721703401 +0.397311259 0.10557631 0.006655872 0.911538042 0.191830048 0.374861951 +0.601038981 0.783118891 0.284753156 0.95940877 0.263904688 0.665567711 +0.529300037 0.535450331 0.676098628 0.610358011 0.62362591 0.430030482 +0.204361027 0.368349381 0.900735544 0.09521496 0.691132415 0.998834256 +0.128816383 0.094030063 0.347117323 0.744775791 0.568385301 0.98438373 +0.327843333 0.702113982 0.313444535 0.441601481 0.170845956 0.763862697 +0.858388307 0.937255938 0.704229548 0.103557807 0.749106235 0.233767251 +0.14986821 0.223610462 0.012319847 0.381707459 0.565211021 0.166616808 +0.271420372 0.142173949 0.806646272 0.267110371 0.705512538 0.322434378 +0.072831748 0.424019646 0.186182265 0.667310345 0.515675634 0.658823261 +0.487397499 0.928705022 0.188308027 0.717827983 0.116444106 0.82988764 +0.799399876 0.310824248 0.986280843 0.897814094 0.64850865 0.875581831 +0.912763901 0.885389795 0.894024608 0.03275829 0.205078827 0.554132701 +0.210612095 0.187243329 0.936197164 0.575137557 0.661445603 0.353480138 +0.237538587 0.693734148 0.774889572 0.452712507 0.622064541 0.638876408 +0.283677868 0.908612914 0.55480633 0.300424411 0.439912191 0.250717188 +0.513105266 0.255177564 0.48334791 0.71221847 0.413493691 0.880422352 +0.600791699 0.737491464 0.277576798 0.383746276 0.772874527 0.499978262 +0.710153664 0.884011621 0.743889106 0.877558694 0.620704697 0.143913982 +0.880725477 0.968376041 0.187550434 0.202339866 0.873585352 0.947997338 +0.497542534 0.056772438 0.842273052 0.392813984 0.854647896 0.957900573 +0.377648126 0.447381106 0.160477445 0.936487345 0.658774992 0.849848717 +0.866106314 0.194538516 0.07200295 0.998091911 0.249501132 0.757669981 +0.20056623 0.922618941 0.049031924 0.553896766 0.833814124 0.642492414 +0.870756034 0.850760047 0.253748462 0.704327178 0.273988329 0.474632929 +0.260030032 0.711268096 0.747420391 0.392160164 0.524495567 0.471603052 +0.78666909 0.74869418 0.705427754 0.861414557 0.50757628 0.786968185 +0.451323466 0.357756585 0.31684029 0.499957174 0.596116979 0.694072372 +0.862314725 0.086071103 0.452556018 0.66202137 0.843597182 0.93532062 +0.41318849 0.408253137 0.656892869 0.075040038 0.985137181 0.907483376 +0.080617078 0.637224539 0.096904046 0.642448472 0.598611816 0.935205779 +0.636731916 0.643345498 0.314690385 0.987761543 0.691953737 0.190949585 +0.972308067 0.015864559 0.891551589 0.609753047 0.301118921 0.823435857 +0.113471012 0.528982634 0.105539177 0.112205316 0.387470064 0.464066015 +0.318440493 0.257865293 0.391045187 0.957546371 0.651840169 0.187826259 +0.798202175 0.977959786 0.969875641 0.004259688 0.182208047 0.101737664 +0.471321672 0.108897667 0.567639575 0.558909936 0.449215552 0.782583689 +0.832679483 0.944774263 0.632906525 0.917619129 0.289456785 0.853473473 +0.613129855 0.940898839 0.49695719 0.899755636 0.001065917 0.879291343 +0.826679039 0.664123123 0.961660868 0.462434973 0.276148599 0.599202293 +0.553286387 0.059631923 0.656090455 0.03976132 0.514765067 0.091992904 +0.426561761 0.059825383 0.835732018 0.19887676 0.921862611 0.716235647 +0.606225351 0.543382094 0.845417089 0.057028377 0.981031993 0.836323147 +0.837272984 0.727701286 0.96545031 0.923340456 0.022295064 0.362740524 +0.257157114 0.762373081 0.068602347 0.955983927 0.202775939 0.874678765 +0.718917082 0.338727983 0.333017133 0.198592896 0.038420209 0.351618396 +0.304505019 0.762356915 0.846442129 0.562843853 0.369778628 0.948250009 +0.017686348 0.343436499 0.965617774 0.166684893 0.148371963 0.682196139 +0.631199779 0.958408795 0.532932529 0.088540329 0.577638054 0.401823045 +0.68638379 0.507787098 0.910321531 0.742877681 0.733317492 0.196366896 +0.060457454 0.040468139 0.410613266 0.153506723 0.702815991 0.119798618 +0.23838953 0.236686301 0.036714153 0.955446503 0.476398234 0.275202679 +0.350905611 0.521140499 0.961476569 0.083630029 0.273188314 0.801774883 +0.355818715 0.173971552 0.823028459 0.263691891 0.423657815 0.414800421 +0.662475676 0.323513047 0.255305287 0.667785733 0.746181955 0.174767786 +0.532358676 0.060019096 0.654437042 0.418460564 0.89426382 0.268303355 +0.091703726 0.302226548 0.195934558 0.179043297 0.083126656 0.483048663 +0.438357538 0.044362167 0.670278487 0.307443313 0.074447944 0.066889145 +0.096951442 0.791323173 0.996525835 0.297398011 0.85344365 0.768503712 +0.031289267 0.690945318 0.471664915 0.574895276 0.074002162 0.773650786 +0.956889654 0.978554895 0.963950502 0.880560723 0.345703021 0.142322696 +0.913465167 0.849076259 0.626036996 0.439982141 0.868805236 0.671532801 +0.029253369 0.804802319 0.179311862 0.493614782 0.938480216 0.653810122 +0.486858764 0.608255509 0.772221447 0.137840955 0.935431411 0.158983189 +0.414151295 0.680907319 0.330996958 0.264039082 0.792400172 0.726461807 +0.532048566 0.834600663 0.490469212 0.202776103 0.654045746 0.266388549 +0.215635241 0.764278225 0.331261719 0.214124648 0.911139297 0.645740441 +0.211453643 0.242284473 0.986233766 0.408678611 0.524593837 0.34092212 +0.485459592 0.159443855 0.565796191 0.810479539 0.778550669 0.51828635 +0.404893153 0.978099257 0.112863257 0.271352758 0.956285362 0.213689151 +0.388298774 0.009420492 0.30149717 0.120390987 0.679954256 0.831378799 +0.962624185 0.732314258 0.998652734 0.52800238 0.044315071 0.952194779 +0.30514443 0.494531618 0.635908755 0.577474819 0.939451723 0.256626208 +0.924580836 0.422486028 0.724993754 0.465782711 0.904559388 0.390883037 +0.713104444 0.403356577 0.040054711 0.662467082 0.834258615 0.522299529 +0.074672172 0.858978133 0.23481452 0.923183241 0.268861255 0.174837424 +0.661650741 0.843848201 0.440848946 0.416163325 0.27499279 0.177149267 +0.901074485 0.356550354 0.050064984 0.745269395 0.338721681 0.539131516 +0.335197349 0.720015994 0.614732551 0.084925883 0.749792767 0.358708862 +0.042058345 0.155801964 0.490799284 0.536257148 0.246197641 0.805929638 +0.990884239 0.137165769 0.163610876 0.588764063 0.255790408 0.384347604 +0.959214791 0.893813503 0.259771648 0.519827201 0.657328375 0.07876801 +0.699345494 0.241344158 0.067323937 0.348284827 0.702912951 0.550396061 +0.238155948 0.75425105 0.860344106 0.245199329 0.401278753 0.028638125 +0.033672647 0.220702547 0.881321083 0.966249279 0.88592928 0.864060933 +0.686324494 0.364645838 0.051537089 0.099548154 0.86253161 0.66608748 +0.661354358 0.106270281 0.852778665 0.341144313 0.361274201 0.147391492 +0.528018992 0.568437705 0.092878892 0.553203025 0.712807259 0.557230573 +0.177267414 0.145647428 0.152586507 0.346924186 0.375615938 0.532039377 +0.682017933 0.001673477 0.30640661 0.756774907 0.708504522 0.948947652 +0.781255802 0.565988621 0.112491516 0.367923051 0.342574874 0.866760936 +0.41156652 0.963211938 0.603139914 0.436349969 0.634109217 0.814555485 +0.59325796 0.932462282 0.858606969 0.691660349 0.701247629 0.465882736 +0.96877806 0.413827107 0.5641705 0.298242238 0.392276822 0.295597931 +0.819578087 0.500417812 0.367629225 0.033211441 0.112487166 0.42706691 +0.700951331 0.144336927 0.267565035 0.715632948 0.00883221 0.046540334 +0.529612917 0.587681298 0.168694829 0.3819073 0.899716858 0.814788019 +0.868210916 0.094161574 0.450165623 0.95552247 0.707817108 0.510911255 +0.372192639 0.229542774 0.542981052 0.909511709 0.032905255 0.993007925 +0.046181874 0.696454716 0.94394843 0.87059154 0.850513599 0.9961117 +0.785235182 0.362887562 0.823804888 0.492394484 0.45742557 0.400035391 +0.979772873 0.666708143 0.642183676 0.04493875 0.233151665 0.732549326 +0.950110229 0.735205672 0.539780342 0.063284468 0.831706078 0.34033586 +0.395045434 0.672593379 0.109447686 0.445585672 0.940724651 0.195149386 +0.19814817 0.922427251 0.664014681 0.871445041 0.963723286 0.487455276 +0.543175194 0.833441675 0.645073472 0.981141835 0.371708973 0.717013822 +0.061451426 0.522115302 0.815957017 0.872540192 0.000748309 0.231135396 +0.053643418 0.249071782 0.001324976 0.134716238 0.367939353 0.794088687 +0.070849121 0.181192297 0.723503277 0.556538952 0.702035734 0.661377562 +0.258784698 0.926938971 0.511102096 0.466559396 0.567515934 0.73228121 +0.55138427 0.704194186 0.660889363 0.156868383 0.48147268 0.112056426 +0.978314144 0.060410799 0.275404675 0.526103341 0.855441543 0.852445214 +0.188304474 0.248723667 0.256477259 0.936796344 0.913310088 0.058084646 +0.794770218 0.812499289 0.029526022 0.496929909 0.482687225 0.918120094 +0.612255323 0.959093321 0.996666139 0.016881211 0.446397216 0.989790998 +0.084209044 0.772808437 0.379858955 0.383247609 0.675033396 0.113451251 +0.965402421 0.588600968 0.817567823 0.48274977 0.509901369 0.195270123 +0.657106815 0.86884602 0.066455343 0.543553424 0.448151497 0.605178305 +0.274083227 0.856211032 0.883441793 0.499576853 0.088859757 0.721920067 +0.772365204 0.289941476 0.082673731 0.489118636 0.96360079 0.695962377 +0.932111843 0.276172151 0.041317093 0.752370515 0.36651468 0.174882827 +0.736428452 0.575771491 0.676918966 0.951137005 0.000724178 0.282066746 +0.150050612 0.634290177 0.328413018 0.811922311 0.258398489 0.690271666 +0.241068574 0.813801752 0.09223322 0.649283541 0.814746663 0.402574232 +0.820063217 0.926098086 0.26440004 0.571922065 0.354637476 0.54586077 +0.603231088 0.457176699 0.635837745 0.087317933 0.30604081 0.756987102 +0.56978763 0.525946592 0.261762316 0.000510068 0.148261566 0.076423562 +0.644175539 0.638959568 0.142637353 0.958306898 0.187440604 0.095180552 +0.769230518 0.694684209 0.972844256 0.227300223 0.771906174 0.091907225 +0.224207989 0.225392402 0.719498893 0.488867216 0.279805843 0.877293613 +0.179381406 0.187256327 0.28690302 0.005259528 0.523663312 0.163939909 +0.649603998 0.643240822 0.674364726 0.708042272 0.363514005 0.811440705 +0.77475938 0.533875881 0.221699075 0.477717561 0.558883166 0.420909983 +0.519358454 0.396821355 0.990006772 0.890478136 0.599227196 0.910147886 +0.143609132 0.257439309 0.613490213 0.176463099 0.273711651 0.183616203 +0.233352868 0.060831904 0.835300825 0.535885011 0.984296661 0.231390774 +0.320076991 0.244415668 0.596797131 0.027483962 0.571458785 0.394188707 +0.234459903 0.400636972 0.218536803 0.690096878 0.066948982 0.433321748 +0.674566329 0.138260534 0.60914306 0.33704974 0.471960553 0.73927354 +0.352203186 0.897343418 0.285097186 0.538113743 0.093026586 0.036058943 +0.272492507 0.85962636 0.646385069 0.984909945 0.959816415 0.190832119 +0.742981999 0.328653893 0.351380485 0.190479914 0.46543387 0.906758299 +0.508741333 0.958956623 0.089098282 0.197470706 0.460104392 0.019733634 +0.576987896 0.803973962 0.714521506 0.876162049 0.069524285 0.068183061 +0.469512041 0.00380853 0.312110913 0.966068856 0.137837648 0.874634827 +0.469921952 0.488734769 0.853469618 0.103019477 0.344960631 0.385799327 +0.017876575 0.5403862 0.95778826 0.902802037 0.971597352 0.835785753 +0.415183742 0.330716269 0.35952354 0.69907432 0.139268933 0.272713609 +0.852204724 0.579139476 0.485057296 0.291933558 0.811628515 0.759050478 +0.887951858 0.694742374 0.596575891 0.50500408 0.903496358 0.606035842 +0.12078234 0.553014384 0.641527685 0.544971281 0.04606854 0.992963365 +0.496872948 0.609462882 0.472827838 0.396941145 0.906353408 0.356742424 +0.884057906 0.922106603 0.035066972 0.148600654 0.602091427 0.902089862 +0.773111548 0.198194719 0.474145775 0.927726287 0.875186296 0.893631284 +0.829933771 0.847710035 0.57475015 0.59430767 0.836690566 0.233965904 +0.696568497 0.231980693 0.59484388 0.238170308 0.489058694 0.08755246 +0.758931348 0.71935249 0.165572662 0.889673701 0.231384126 0.363073374 +0.769569483 0.301485727 0.067370805 0.344233947 0.777472938 0.043606262 +0.597750683 0.45879961 0.717447273 0.456840058 0.548714705 0.47455265 +0.484930527 0.797297083 0.052521821 0.169274877 0.117151399 0.459209121 +0.937673099 0.758149318 0.814853767 0.985987794 0.079155282 0.32204335 +0.780922642 0.175424643 0.044606871 0.469014835 0.398694533 0.032644639 +0.587076209 0.982666609 0.509531938 0.272650995 0.923611498 0.218488157 +0.248037736 0.549025896 0.910043718 0.996183528 0.323015528 0.233416988 +0.080523289 0.595675059 0.717526864 0.111563247 0.813033493 0.098440039 +0.637809552 0.382137645 0.816975099 0.480802816 0.833165452 0.266953604 +0.941521287 0.172015101 0.012758252 0.178901491 0.570850295 0.463928343 +0.322766579 0.919791178 0.533195159 0.448661837 0.220929322 0.000462488 +0.993307174 0.98437554 0.163112997 0.694977514 0.299537791 0.914337584 +0.007342449 0.401926283 0.420861275 0.267445629 0.587218109 0.858161565 +0.741256315 0.848842152 0.85391443 0.801012846 0.411702056 0.654981744 +0.25024293 0.456159506 0.166583312 0.079861562 0.065692774 0.828340263 +0.538052637 0.63566742 0.766643055 0.542149475 0.873829339 0.867188955 +0.494499332 0.722069414 0.607569665 0.163573884 0.185086201 0.792135153 +0.175127182 0.615177725 0.443166287 0.026885541 0.26858044 0.788093776 +0.170652202 0.562969485 0.378029144 0.692575356 0.081680512 0.662644406 +0.828858006 0.678908948 0.020553114 0.641372644 0.32744494 0.709842653 +0.34651702 0.088857389 0.005735228 0.908783585 0.481156402 0.867296233 +0.678221792 0.984972918 0.857801775 0.011848123 0.873346514 0.538218752 +0.95212203 0.937795915 0.256408684 0.079805736 0.885701056 0.681544696 +0.370312507 0.079887735 0.852221956 0.261584836 0.702465043 0.310301072 +0.712442658 0.823716569 0.067309433 0.697070028 0.311606122 0.236497001 +0.431824497 0.564087365 0.631914083 0.727469889 0.770370717 0.656395189 +0.680079789 0.59591481 0.531830515 0.599777868 0.102664802 0.971470342 +0.280650919 0.852087539 0.62544911 0.57869246 0.007539671 0.65728665 +0.238247752 0.653086875 0.34287742 0.033786021 0.950648023 0.28941719 +0.547256989 0.126158041 0.137818637 0.849659963 0.652979558 0.58607387 +0.677836488 0.824903003 0.219508477 0.401712067 0.119128256 0.54031494 +0.846287948 0.01969289 0.401493781 0.048093521 0.02463892 0.762111754 +0.531828807 0.802951612 0.906978702 0.358420411 0.276480458 0.348901558 +0.859020342 0.827682412 0.520797756 0.562792299 0.537516292 0.456241151 +0.36350591 0.456589325 0.764101473 0.615763649 0.573412658 0.023056186 +0.626326167 0.632770273 0.888104921 0.004979998 0.882469759 0.363007364 +0.798125761 0.086484439 0.212830809 0.972015265 0.098467112 0.702901131 +0.562955437 0.616365267 0.238916961 0.894987468 0.578619593 0.2970458 +0.808085518 0.286360753 0.238935101 0.580583503 0.729093355 0.861193443 +0.922673438 0.160957173 0.466355774 0.866762683 0.339176656 0.043801016 +0.512084339 0.842827144 0.773227806 0.726918972 0.558107134 0.403429318 +0.994405945 0.284677144 0.124369028 0.431808186 0.616348169 0.447376915 +0.752640313 0.31651886 0.453260081 0.181951036 0.03404701 0.843414015 +0.390615841 0.620657762 0.965578992 0.141962436 0.299283452 0.592872355 +0.029318434 0.803813773 0.771643817 0.489768383 0.926622914 0.460193688 +0.067604591 0.33132871 0.585845095 0.976616124 0.312388581 0.132905854 +0.848193153 0.52706227 0.20680484 0.921279691 0.518296233 0.249516757 +0.871188366 0.761344337 0.347419606 0.704360603 0.146108823 0.404314183 +0.070564001 0.174961393 0.14300844 0.837497914 0.387696278 0.374839174 +0.09567 0.271128341 0.337182666 0.326564256 0.839982787 0.512698931 +0.952069243 0.065052108 0.404416966 0.964819039 0.344505256 0.211446758 +0.731830766 0.772619122 0.422795725 0.167225565 0.026512503 0.195034064 +0.381846958 0.313045272 0.935594967 0.120324271 0.738228418 0.920651111 +0.559012568 0.850894396 0.514380238 0.485045044 0.973335031 0.637042451 +0.123962502 0.25684631 0.366470293 0.544314283 0.981563286 0.248860011 +0.53384596 0.863559126 0.293254601 0.33298582 0.543666503 0.531179498 +0.965395129 0.913745171 0.063066202 0.525126255 0.99888874 0.493832321 +0.110736697 0.594069431 0.140194437 0.785921328 0.698813056 0.411877715 +0.560245832 0.959198449 0.55482927 0.867051782 0.988533229 0.448980954 +0.930346565 0.68161989 0.263445944 0.130207283 0.034893544 0.512698135 +0.544014006 0.93507858 0.257549461 0.475041308 0.986160584 0.428371209 +0.041352165 0.5100443 0.309856351 0.189171542 0.336260012 0.498167612 +0.386954791 0.860270736 0.652673602 0.792920408 0.457638844 0.678536813 +0.735644287 0.914956169 0.54093113 0.830460526 0.081439128 0.89074262 +0.946238512 0.153142787 0.736982347 0.093371963 0.323274978 0.546683854 +0.586551817 0.30000845 0.028300914 0.475786948 0.066842333 0.488272595 +0.343794892 0.311714892 0.610839984 0.786059949 0.22468053 0.605146585 +0.255494607 0.59114706 0.739370448 0.701950479 0.287809407 0.97921014 +0.026806915 0.649873896 0.577422952 0.396150807 0.137256595 0.12903982 +0.895000351 0.002892293 0.871943355 0.084975664 0.39489252 0.669905263 +0.680885538 0.176964475 0.875324759 0.072922398 0.026685724 0.154061067 +0.312070657 0.709944659 0.255874579 0.411289251 0.440296392 0.471625639 +0.858862356 0.720457447 0.67755094 0.932773033 0.153278639 0.789595501 +0.936384826 0.953591094 0.630545099 0.031440346 0.079264341 0.36210358 +0.503558246 0.28872263 0.658347191 0.842466517 0.008013116 0.324910168 +0.002407404 0.118367837 0.19743959 0.604621388 0.924463478 0.586989162 +0.098040855 0.165024743 0.044569332 0.265718027 0.444782031 0.210581659 +0.498957952 0.222078223 0.360747352 0.375752508 0.523062803 0.837207048 +0.818450045 0.607785962 0.212356831 0.798297067 0.584555814 0.656426545 +0.299151864 0.757164232 0.354886156 0.61859021 0.557840486 0.253066095 +0.116976657 0.471445342 0.658514966 0.806829812 0.802191881 0.485373879 +0.609401962 0.988730263 0.811781761 0.090238217 0.787029833 0.293548626 +0.243644506 0.096020342 0.536187554 0.670304054 0.451832482 0.72152633 +0.93767236 0.774344153 0.134113892 0.205747563 0.461754359 0.348912625 +0.653973675 0.923977209 0.706339825 0.661939285 0.54258049 0.979314949 +0.357870114 0.996437855 0.705689926 0.081090711 0.892809989 0.513104842 +0.10633706 0.26257301 0.862064397 0.711087395 0.245206919 0.918664259 +0.113904886 0.982965196 0.459183456 0.687283051 0.465864097 0.248057368 +0.68313534 0.23448294 0.446081606 0.2733573 0.618075145 0.769409286 +0.317904464 0.241476095 0.478552342 0.418110548 0.091360741 0.361819671 +0.331709158 0.889143844 0.45225911 0.457317534 0.350190736 0.914980245 +0.592535473 0.551258638 0.547022356 0.095740876 0.902928272 0.45017178 +0.317075267 0.343256022 0.909910397 0.16121741 0.72652226 0.866732985 +0.654069723 0.535657444 0.141437987 0.616413078 0.73279985 0.113981958 +0.609868914 0.816901598 0.860926678 0.433059567 0.140244221 0.115962697 +0.245048532 0.63652806 0.613993607 0.78285695 0.314353339 0.33633087 +0.736953828 0.134671913 0.722551682 0.17247224 0.666360168 0.904888334 +0.585115128 0.232393472 0.615015558 0.017723423 0.878971878 0.677511576 +0.067895954 0.852688798 0.873225593 0.673478593 0.737571474 0.088411316 +0.344698163 0.488273901 0.233368126 0.171327459 0.444609375 0.606515942 +0.698376093 0.813877474 0.056112051 0.229675313 0.425211014 0.431954911 +0.090785443 0.486826603 0.14690455 0.360555778 0.274278866 0.473692698 +0.338255804 0.446171675 0.325740824 0.465625296 0.482592668 0.877706565 +0.696308648 0.117079077 0.905263598 0.616430874 0.256267307 0.975612227 +0.448230081 0.313441167 0.335543895 0.198289093 0.15119956 0.363808182 +0.93643994 0.885693644 0.317397844 0.674066714 0.805879362 0.035433947 +0.366699038 0.091679598 0.735657113 0.970178513 0.892567513 0.632005925 +0.993492977 0.926395922 0.626291993 0.382741084 0.244235356 0.304155496 +0.458949627 0.893856837 0.689036982 0.173548813 0.095021372 0.191209241 +0.616265568 0.027723456 0.015718515 0.219878484 0.076881478 0.554120617 +0.692135804 0.400757438 0.677734043 0.151884706 0.598800467 0.277285641 +0.857159612 0.067897433 0.476916398 0.70317406 0.644177167 0.348428625 +0.42339648 0.682854882 0.279197071 0.820274323 0.294232988 0.289138709 +0.860778005 0.558406147 0.755443052 0.776857445 0.717077387 0.456784431 +0.068097197 0.781340407 0.752242328 0.11951163 0.348460129 0.700574396 +0.546914204 0.174266176 0.08937793 0.534257378 0.668105343 0.705411312 +0.987779134 0.82293673 0.418195516 0.264619842 0.046960683 0.539531112 +0.71409918 0.53117478 0.973071259 0.92097086 0.442384241 0.065522559 +0.153708852 0.989174582 0.19498179 0.496059532 0.394511931 0.524371097 +0.996051671 0.672078073 0.766284555 0.815493497 0.913270582 0.071179055 +0.795421981 0.91564017 0.157598214 0.188196814 0.369671314 0.64488701 +0.016247656 0.875757402 0.667091035 0.874159816 0.984889018 0.694079665 +0.419660917 0.836368148 0.052835604 0.483753677 0.084753244 0.482769462 +0.342823665 0.336317107 0.260018555 0.09064616 0.982931762 0.65882678 +0.747386196 0.499598858 0.7123797 0.535829451 0.14782438 0.747705385 +0.512707589 0.94596962 0.990480029 0.799448186 0.076890159 0.057375927 +0.631883433 0.039973469 0.983513334 0.708481544 0.720166615 0.49052729 +0.539403888 0.535448657 0.263592231 0.491635291 0.592131084 0.25574267 +0.207975341 0.893904547 0.137310334 0.499989447 0.137601781 0.804798829 +0.839930367 0.206687983 0.925705663 0.86024561 0.41684362 0.686926674 +0.302001486 0.826058608 0.378318261 0.861069532 0.378823659 0.644190189 +0.893241177 0.187292193 0.221788818 0.624695429 0.302666405 0.161551583 +0.009589874 0.669515409 0.052136757 0.623221488 0.717093643 0.119024394 +0.600229088 0.995334883 0.674775798 0.719527296 0.667461966 0.741215288 +0.032360359 0.686174508 0.648462779 0.374909903 0.699984737 0.134777501 +0.554225752 0.93888823 0.387204987 0.972434399 0.903416727 0.6479544 +0.992689403 0.582245949 0.389716209 0.644962187 0.144491608 0.248320173 +0.615297677 0.36523444 0.310441609 0.464848643 0.781193129 0.675269082 +0.849193391 0.659992764 0.369681771 0.712746099 0.249722385 0.686411576 +0.070513372 0.333253872 0.514009578 0.919514377 0.816969423 0.410394426 +0.548696437 0.786657406 0.47379713 0.002737127 0.208535213 0.958363625 +0.608433328 0.753514213 0.318545001 0.733422646 0.044354963 0.762766814 +0.971300684 0.997619448 0.711347354 0.459346473 0.579886814 0.518459725 +0.234586862 0.630035665 0.081022793 0.406840625 0.895766251 0.81699522 +0.382006091 0.725315426 0.898659366 0.986311099 0.394700355 0.982250283 +0.930618514 0.987172283 0.166212788 0.058217357 0.833543338 0.133599318 +0.721831549 0.377967522 0.202452297 0.554853838 0.63847978 0.488275707 +0.806094822 0.171718795 0.774306981 0.00178374 0.737791772 0.745227517 +0.307454396 0.194243042 0.553768668 0.321875184 0.964636644 0.825593028 +0.799653354 0.252104045 0.588725309 0.820220676 0.162153194 0.552145273 +0.729411926 0.514657623 0.230979217 0.556402808 0.441068299 0.399105234 +0.265837928 0.29190117 0.967155988 0.340319793 0.563079292 0.582399005 +0.744158128 0.215774025 0.96516351 0.027078474 0.967639569 0.279383581 +0.971104642 0.976790903 0.26537241 0.239042749 0.360519324 0.66465657 +0.82467294 0.759344676 0.937062313 0.676322217 0.596360162 0.929477152 +0.33461629 0.965399037 0.720128908 0.097731624 0.627249783 0.619214637 +0.322197273 0.003584967 0.584476478 0.931571046 0.782647904 0.53436573 +0.604966676 0.725157402 0.779234215 0.05519822 0.328725293 0.158183883 +0.527834353 0.326123059 0.201499763 0.08086633 0.258084046 0.286029654 +0.753433614 0.791292617 0.769480865 0.504910787 0.514787497 0.358438177 +0.424054944 0.682967352 0.361813585 0.769792518 0.12167924 0.877152318 +0.773306612 0.694873013 0.719771527 0.3751148 0.02409651 0.976787045 +0.662154582 0.51433996 0.922482697 0.092775676 0.245802352 0.036798793 +0.473375447 0.343653698 0.302161767 0.20534689 0.048066215 0.926013525 +0.431615981 0.928713487 0.932190111 0.350158358 0.232423324 0.305306136 +0.399833168 0.627950731 0.4412104 0.699305809 0.915734326 0.437703089 +0.154008718 0.516633523 0.931150056 0.340412662 0.969198498 0.954336316 +0.518340649 0.849279098 0.818967792 0.913300093 0.144378921 0.38532537 +0.079952515 0.998040098 0.519093388 0.800760388 0.46556565 0.52453224 +0.249380247 0.340443529 0.714893782 0.715178879 0.298704575 0.434275897 +0.067142706 0.641932161 0.030373609 0.536929704 0.380758291 0.012459692 +0.675355448 0.198126297 0.474996508 0.572909521 0.043719942 0.986511043 +0.695872407 0.668518364 0.826797209 0.703551391 0.132734503 0.566607087 +0.037277171 0.953370012 0.759743848 0.125398585 0.541066945 0.079694267 +0.363135549 0.744936788 0.528519279 0.178366064 0.449151204 0.719422205 +0.959489077 0.340120821 0.898767219 0.651936735 0.086023862 0.263283158 +0.219124024 0.918054217 0.218623257 0.086179274 0.559152806 0.863823953 +0.393164633 0.115146214 0.004494157 0.836064281 0.603369416 0.422143253 +0.18206951 0.123457662 0.121783641 0.65153559 0.867860233 0.378345862 +0.655328577 0.968992673 0.144007836 0.264710931 0.564897701 0.172796841 +0.167829438 0.097518586 0.976869426 0.816770095 0.060995297 0.800674543 +0.720714207 0.558483272 0.467278845 0.920235797 0.441656982 0.15614508 +0.91188722 0.634188634 0.338234748 0.234520028 0.636264429 0.226289199 +0.732243582 0.190469494 0.285929088 0.523223002 0.934803492 0.922063882 +0.348612868 0.201194181 0.832025289 0.269107852 0.203169197 0.808876399 +0.128561754 0.855214519 0.289901609 0.471231523 0.473848824 0.479821461 +0.0348356 0.401222264 0.876890896 0.979289738 0.902934239 0.62834039 +0.079596849 0.78295463 0.439478001 0.518235157 0.659054329 0.335975837 +0.629387594 0.772443842 0.715365103 0.505195617 0.945607681 0.823890751 +0.887097001 0.691394965 0.341803463 0.817952989 0.840865684 0.088964137 +0.299775766 0.339554566 0.983330738 0.982167255 0.832544569 0.018184835 +0.792788169 0.854986098 0.312829164 0.697347538 0.673384869 0.663978833 +0.516541465 0.808373031 0.20741767 0.307875946 0.403898169 0.095241395 +0.560903926 0.309613662 0.679677569 0.681929244 0.032005631 0.680089916 +0.751695418 0.432321742 0.584486149 0.969480375 0.13082624 0.62038401 +0.3679379 0.89701824 0.699676476 0.829132789 0.788180815 0.078006567 +0.142607374 0.45674381 0.706320426 0.556892261 0.945078869 0.715238725 +0.231415427 0.483753669 0.501364406 0.698348341 0.78748403 0.770516294 +0.137668743 0.708052888 0.167013105 0.597762571 0.033119231 0.825926977 +0.926121868 0.80464047 0.596679305 0.821906171 0.256690681 0.546719646 +0.471346354 0.696527758 0.359518546 0.214831595 0.898020198 0.099003556 +0.538912582 0.762879458 0.430859169 0.361137394 0.982862018 0.075251531 +0.722157252 0.908405712 0.05089349 0.789475147 0.298842356 0.476654392 +0.116392183 0.799612199 0.65967748 0.291588751 0.565803606 0.659189183 +0.510394473 0.612782613 0.447974 0.237316996 0.012462355 0.184927301 +0.851613899 0.865114926 0.691863219 0.822625362 0.021293028 0.117685031 +0.169574818 0.495937318 0.096206233 0.609159241 0.629390536 0.710520727 +0.710019454 0.911025793 0.78876446 0.946258795 0.290131675 0.792823343 +0.888033364 0.607729052 0.521081958 0.664650747 0.951307121 0.760733058 +0.50444295 0.605868949 0.219932433 0.527289564 0.17585258 0.97328399 +0.532608954 0.334088212 0.664328993 0.430847025 0.69910984 0.525009334 +0.403560875 0.907448286 0.876279015 0.324209197 0.309867968 0.494078301 +0.533138968 0.410374258 0.412796011 0.207265406 0.784042438 0.920455779 +0.384080642 0.248399068 0.256573725 0.741829292 0.109896266 0.229519874 +0.945154701 0.419074377 0.387735668 0.725395558 0.423012416 0.886775208 +0.156789482 0.45711804 0.421696551 0.264448052 0.940110173 0.032095192 +0.551289328 0.190100734 0.656349802 0.030730622 0.987719285 0.388933379 +0.216501586 0.594087965 0.066807333 0.309579106 0.493490708 0.761117978 +0.022107864 0.051436354 0.320956901 0.293343806 0.377017471 0.668126726 +0.947040532 0.918660011 0.493175601 0.155344459 0.095227886 0.443602323 +0.590108886 0.762066562 0.101355198 0.313648498 0.640333327 0.922314681 +0.135528972 0.434151016 0.062405383 0.283529725 0.822204648 0.184120698 +0.21255705 0.221401804 0.118493059 0.92020937 0.384146639 0.409673195 +0.005059119 0.034387655 0.24960622 0.27672941 0.227150746 0.323952835 +0.781072158 0.762087547 0.269396389 0.994393123 0.530776468 0.289162493 +0.033878552 0.303210076 0.477977839 0.565772183 0.365477886 0.528114799 +0.667558154 0.94495373 0.211303186 0.397007982 0.019120574 0.201683613 +0.759217797 0.371632514 0.068677439 0.949536875 0.064964779 0.273995463 +0.116237295 0.597558943 0.341777803 0.753362976 0.81366452 0.227216083 +0.818591024 0.247558733 0.254482392 0.599206525 0.740949672 0.073593831 +0.502474174 0.639577053 0.488509934 0.989222915 0.342469405 0.582766751 +0.908022645 0.022481825 0.581284636 0.477605611 0.675515387 0.770816348 +0.993583042 0.414124404 0.366301021 0.430501625 0.358197615 0.099979009 +0.943235769 0.295076913 0.798732025 0.7659269 0.456906361 0.278675539 +0.357876474 0.971693943 0.559923061 0.197991165 0.141642703 0.96813068 +0.739453803 0.059506719 0.494015565 0.417097506 0.11341688 0.488357401 +0.409439909 0.561640108 0.860952706 0.911635519 0.142010113 0.436464345 +0.378675964 0.931464692 0.633835537 0.927350096 0.282987678 0.727235471 +0.528529344 0.069900566 0.808335366 0.816812157 0.557297079 0.478850247 +0.925177652 0.700091741 0.255042259 0.932846779 0.762151053 0.154558974 +0.437239557 0.233973671 0.660652178 0.770876822 0.272730612 0.817712803 +0.026035975 0.609573886 0.578497812 0.885831394 0.14787932 0.452690065 +0.672112442 0.013980796 0.44009282 0.914084399 0.523044926 0.186781049 +0.220646684 0.30960028 0.797259944 0.393988902 0.004988622 0.024924145 +0.675062902 0.904185715 0.027135086 0.179530953 0.956388967 0.473206294 +0.821480333 0.895937591 0.600961038 0.499757555 0.542436551 0.469435623 +0.62875033 0.003133279 0.578081506 0.033397981 0.758492304 0.778077716 +0.347587031 0.621675074 0.126903566 0.967201697 0.168269824 0.42627938 +0.408578673 0.097769244 0.731177618 0.093354728 0.606509947 0.041738836 +0.180908815 0.631138136 0.798953677 0.978974611 0.953367151 0.139052947 +0.706508416 0.229176814 0.692672502 0.935676291 0.51726105 0.034992295 +0.478618692 0.201448788 0.740443981 0.692801545 0.256542665 0.569320899 +0.96578182 0.904587421 0.618243571 0.977035496 0.10381036 0.423109254 +0.178644679 0.308185089 0.615813797 0.574011434 0.542572816 0.825696269 +0.035185143 0.755047336 0.076267045 0.714913258 0.733292429 0.375777926 +0.66625911 0.561207976 0.582457653 0.78323335 0.891032023 0.392106715 +0.885740637 0.454421186 0.691672433 0.32600732 0.36715163 0.602273744 +0.44068795 0.132546588 0.932357358 0.725996952 0.722969686 0.692617634 +0.451912908 0.88332164 0.445716467 0.428606542 0.364044582 0.306262753 +0.908860621 0.372943182 0.095647905 0.129628254 0.840920185 0.367287458 +0.256488145 0.234560439 0.365334051 0.631226845 0.430022148 0.065758579 +0.57999531 0.428395641 0.301136187 0.10825982 0.116304341 0.747901092 +0.063395851 0.486501857 0.700631831 0.153332581 0.323037475 0.784578882 +0.42504158 0.36083503 0.884649749 0.972328477 0.161055862 0.500734325 +0.773840024 0.786809935 0.773984816 0.472711452 0.729032985 0.157556279 +0.320375175 0.924121285 0.37302374 0.910552837 0.688471639 0.926416458 +0.64954406 0.787422045 0.24891543 0.372437468 0.833453264 0.631650441 +0.282171983 0.62655779 0.812984129 0.497757222 0.16210704 0.861994062 +0.490700086 0.138425439 0.525910141 0.807346251 0.515280402 0.447784006 +0.400592685 0.707593602 0.587739023 0.27162724 0.786748881 0.712050244 +0.702146722 0.976571747 0.283917664 0.408062418 0.492328867 0.299961796 +0.103463514 0.884577309 0.690916202 0.835388709 0.811907946 0.919435618 +0.612299986 0.081914318 0.941758858 0.314086708 0.242163324 0.216972514 +0.516768215 0.142688931 0.310399568 0.637311054 0.284337045 0.658943461 +0.890686233 0.650401298 0.09943291 0.608876949 0.612445698 0.036895647 +0.857687894 0.892587147 0.854112549 0.925978899 0.789029654 0.15883479 +0.767790074 0.844104361 0.040184489 0.800121107 0.096569265 0.379296766 +0.724301161 0.149413578 0.874821718 0.589702174 0.562350112 0.248791881 +0.801967368 0.536601751 0.984148885 0.171163186 0.591148307 0.165121347 +0.671844511 0.93817238 0.794775143 0.826026687 0.337209294 0.411557922 +0.712973019 0.481114094 0.843636169 0.015925346 0.275370205 0.047513677 +0.471020712 0.484585497 0.055246555 0.729308807 0.331244206 0.576118912 +0.850472385 0.060916081 0.61401943 0.736270399 0.158789264 0.552847147 +0.728380206 0.601386535 0.433275095 0.206169731 0.624695222 0.562154961 +0.1145922 0.910677926 0.628550212 0.148963795 0.399133555 0.52698269 +0.204322072 0.49372611 0.589240104 0.690480465 0.854949447 0.771977569 +0.320480876 0.597137958 0.180582891 0.697783137 0.918372571 0.042641735 +0.944406743 0.500184684 0.450895446 0.583326547 0.244357743 0.342422228 +0.219975704 0.923570206 0.730246744 0.721317024 0.474395168 0.449993572 +0.651312761 0.98607837 0.827099251 0.507805258 0.184211953 0.98250131 +0.997294742 0.61032029 0.083936331 0.659872596 0.043906332 0.781641385 +0.435891217 0.5571836 0.801016284 0.789508963 0.090669443 0.777347695 +0.653740333 0.842115625 0.290523072 0.536362544 0.399251374 0.15169871 +0.39406107 0.162416862 0.220173755 0.084819011 0.406487983 0.018334496 +0.921117809 0.489456556 0.612795335 0.125472522 0.429829968 0.171969614 +0.07086949 0.984344001 0.276882884 0.509532731 0.75119379 0.103514795 +0.07575451 0.347885963 0.768287615 0.38109284 0.421992214 0.469332136 +0.44495678 0.147648673 0.288278865 0.203546799 0.144073675 0.816259475 +0.824842536 0.39523136 0.908249084 0.936682274 0.41740188 0.534382404 +0.821642086 0.178747677 0.394939799 0.751891936 0.595918349 0.826924361 +0.925274203 0.534114189 0.966125337 0.136056273 0.163541127 0.055353769 +0.090587993 0.31539092 0.971697087 0.558977749 0.222491883 0.990335021 +0.764189178 0.063857142 0.676291864 0.705178071 0.369478089 0.208830887 +0.541225661 0.97721811 0.217578149 0.110854516 0.612123119 0.55300122 +0.568074754 0.477246518 0.169675236 0.098361229 0.259329368 0.103650695 +0.901940687 0.750447045 0.35462601 0.428474173 0.479524875 0.740327466 +0.951335994 0.173770674 0.774805875 0.523493393 0.436275606 0.028749464 +0.47745817 0.686194988 0.194265396 0.587371833 0.519799331 0.010364197 +0.888146026 0.852476546 0.329477929 0.506728539 0.300311037 0.196667736 +0.682081079 0.145728966 0.099763577 0.59994242 0.905436955 0.780472507 +0.562764499 0.715237239 0.903454104 0.364136049 0.385736344 0.615085064 +0.770615235 0.858843815 0.625434748 0.579401943 0.37385185 0.519751988 +0.22034843 0.022073539 0.487790777 0.70413529 0.524130305 0.863570946 +0.875014576 0.513419048 0.179882443 0.801887705 0.80841611 0.991788212 +0.615043922 0.106278052 0.302031565 0.44563346 0.862259947 0.862488927 +0.34310763 0.254848338 0.027504442 0.678361354 0.093453197 0.475249843 +0.507096114 0.172768476 0.814917809 0.16710812 0.897874458 0.500496283 +0.963067725 0.978594288 0.80256625 0.118202224 0.150411285 0.268632065 +0.038884869 0.381294942 0.986469415 0.646435638 0.655835147 0.472719986 +0.799661614 0.653461881 0.821033266 0.002636899 0.184519653 0.209709223 +0.28577124 0.491942477 0.231600003 0.155163822 0.750678376 0.600404167 +0.345712992 0.24286395 0.222073948 0.583159233 0.590296355 0.636750061 +0.390225612 0.591353749 0.473934352 0.995861459 0.350696223 0.297819179 +0.686851812 0.823410744 0.507647062 0.121432276 0.065893312 0.436588261 +0.918306723 0.858864414 0.994920393 0.379326369 0.173034373 0.177034057 +0.013879017 0.018767381 0.786687431 0.936481556 0.619498924 0.255909705 +0.76466801 0.133879473 0.604546239 0.318889487 0.789590594 0.786432855 +0.223797098 0.396541288 0.82726126 0.132606476 0.583484921 0.574360194 +0.879359244 0.828585314 0.390709919 0.233036477 0.779433309 0.931038384 +0.650273713 0.766554192 0.090895416 0.56083205 0.882912754 0.991959564 +0.181855244 0.508342706 0.492091519 0.398366242 0.31741986 0.709677168 +0.997093468 0.629750045 0.836771224 0.343639384 0.914700378 0.518263051 +0.310945244 0.258669797 0.878294021 0.523391403 0.876633225 0.261603162 +0.275566653 0.154499368 0.684059087 0.450318417 0.085224408 0.31713618 +0.247024852 0.884210345 0.705544514 0.953502309 0.064940348 0.069845939 +0.03053634 0.034522076 0.910790476 0.029149971 0.333285939 0.616137883 +0.136538949 0.648515445 0.654023222 0.188533316 0.407427121 0.28597514 +0.406422012 0.07989328 0.979996016 0.025443825 0.683967525 0.237151447 +0.001246787 0.055620291 0.259653499 0.570509245 0.873135376 0.401977972 +0.243894367 0.648236671 0.255815131 0.122261426 0.05023439 0.850285645 +0.546939292 0.578797756 0.531362736 0.340346178 0.431849488 0.604937334 +0.005810551 0.704048534 0.850278627 0.997876044 0.741734001 0.034547708 +0.522495767 0.260625223 0.884545671 0.903299454 0.285533221 0.121751437 +0.560683902 0.85328072 0.722055751 0.861933333 0.917820298 0.824416597 +0.314814761 0.259273025 0.382269619 0.644201827 0.792006408 0.886730824 +0.680270582 0.68977372 0.915060588 0.075337362 0.329357849 0.6056387 +0.027929712 0.180146628 0.311989029 0.099598273 0.644146883 0.895595616 +0.090729241 0.708142372 0.097786726 0.44537865 0.619971296 0.604943579 +0.34136438 0.917290185 0.786101201 0.786039952 0.108687428 0.044964882 +0.970138866 0.011063008 0.042963132 0.977041416 0.353330856 0.873727382 +0.380865946 0.116334427 0.542413292 0.406462511 0.153703822 0.872063088 +0.064008166 0.23112509 0.696064371 0.64388893 0.023615526 0.650824778 +0.051786676 0.005386474 0.584467476 0.964672502 0.077996486 0.861438904 +0.918425585 0.052735505 0.005496593 0.572304443 0.741839524 0.387050178 +0.077160932 0.818261703 0.278026987 0.213947325 0.246152864 0.574290659 +0.551023065 0.511386575 0.032315601 0.62445528 0.390467963 0.333204251 +0.566176558 0.696245501 0.099055001 0.557151186 0.912754727 0.278937136 +0.62534273 0.102639714 0.995213765 0.683917859 0.44968191 0.435195557 +0.589642537 0.084151238 0.201676171 0.460361702 0.636791633 0.817914205 +0.819891836 0.789647316 0.096787532 0.972632356 0.119846671 0.405706154 +0.134159531 0.77567464 0.78216801 0.239516655 0.400223012 0.79751492 +0.223800755 0.935387553 0.746580798 0.204148203 0.991357009 0.55299772 +0.873473092 0.058242228 0.022845698 0.48975416 0.278667139 0.223186872 +0.372113611 0.023454611 0.297865865 0.867571891 0.369854359 0.712110502 +0.176398443 0.589450737 0.236420211 0.122790969 0.395743589 0.631131446 +0.194798291 0.612973 0.386239975 0.711766742 0.72669145 0.933302682 +0.093688294 0.582537245 0.356206249 0.769269174 0.290751277 0.239366292 +0.46084002 0.656113727 0.178152168 0.732662068 0.122269709 0.672862381 +0.539899509 0.415189912 0.777973409 0.926065964 0.414362017 0.48163647 +0.488141458 0.813439956 0.175846049 0.568617323 0.910537767 0.547912763 +0.485268637 0.337538825 0.663369055 0.565144939 0.370548146 0.863834821 +0.900258606 0.410170427 0.987217696 0.836337809 0.796547702 0.934591865 +0.009705049 0.394960956 0.910477766 0.001811488 0.868680867 0.738685315 +0.908658018 0.65965573 0.473208797 0.902683877 0.266520105 0.66273731 +0.012194552 0.533541249 0.506025888 0.133565763 0.309848864 0.786897162 +0.723000844 0.315235186 0.910056632 0.122744531 0.287600219 0.58956911 +0.696024202 0.286794034 0.728609421 0.791643559 0.506316187 0.698515889 +0.890903477 0.861713977 0.65382243 0.24052086 0.649027492 0.123393079 +0.994315027 0.730753369 0.202849078 0.100819373 0.51050874 0.568287777 +0.051685629 0.086267756 0.691999669 0.027171253 0.773014405 0.340066457 +0.955439543 0.186938031 0.243264543 0.635728102 0.868322828 0.261953099 +0.52527329 0.19583202 0.837488973 0.835417818 0.401828142 0.634971345 +0.877264551 0.625054108 0.763797853 0.739553097 0.126198842 0.293054717 +0.531406101 0.996169865 0.791607904 0.914644395 0.442863679 0.957549525 +0.414744297 0.764533473 0.311663493 0.821108844 0.349073661 0.961898338 +0.537703511 0.327891288 0.167051995 0.519388543 0.568846415 0.734548154 +0.430709998 0.310811925 0.505355694 0.513847083 0.963748821 0.7921647 +0.690186064 0.885941096 0.952921891 0.71556125 0.888401004 0.175685757 +0.046010343 0.500338789 0.521986553 0.547951054 0.335651617 0.428642777 +0.915358861 0.469249079 0.172539722 0.141019781 0.459452885 0.267742099 +0.530594652 0.49143462 0.012368544 0.89717367 0.352360124 0.847786143 +0.942588825 0.389874349 0.331956277 0.66160242 0.019830897 0.562810531 +0.177836141 0.534216507 0.805384438 0.691337098 0.471614216 0.217613148 +0.054718263 0.423703695 0.301180235 0.535375588 0.547202645 0.310624998 +0.695012492 0.391961338 0.844140743 0.849706908 0.431352771 0.663795488 +0.357432307 0.073087974 0.788459061 0.864922267 0.058807905 0.60716896 +0.416730296 0.503881628 0.730693918 0.394258907 0.475353996 0.55215714 +0.444313987 0.15048482 0.237625353 0.752977943 0.788223505 0.215579094 +0.927759639 0.329478456 0.208552073 0.844056784 0.078621132 0.637644958 +0.059938876 0.917852516 0.18977609 0.39206727 0.591096939 0.009469073 +0.025382847 0.013276819 0.863642959 0.713936348 0.087747683 0.006532096 +0.066228944 0.009063226 0.192162838 0.723133935 0.990761249 0.212460527 +0.662101572 0.988734133 0.829040024 0.192904553 0.434271197 0.84189803 +0.693488894 0.842724221 0.383069699 0.603949853 0.02316124 0.678607213 +0.765124373 0.674247011 0.566432229 0.700713677 0.949098225 0.529507915 +0.476625983 0.495517995 0.866812298 0.053727602 0.114687194 0.467426193 +0.143653919 0.657388816 0.071850884 0.603386614 0.04275524 0.248292743 +0.802972718 0.29338464 0.546654778 0.535128179 0.828284069 0.683315256 +0.176102487 0.006382778 0.507305838 0.129686371 0.954247184 0.249775006 +0.274328195 0.542269738 0.655275419 0.822107729 0.333983179 0.804410737 +0.962675911 0.170665449 0.017326737 0.684856654 0.0342569 0.5068635 +0.2078798 0.988896119 0.193389703 0.870910866 0.515512726 0.990728558 +0.271332343 0.066802776 0.724018863 0.205102752 0.522991439 0.568885673 +0.891514687 0.737498254 0.12580094 0.54600345 0.301022248 0.197152531 +0.604279021 0.209763646 0.178418602 0.102775084 0.488227574 0.592309644 +0.664696468 0.372006792 0.810905293 0.596174403 0.697859286 0.069058093 +0.215313094 0.575109867 0.010157167 0.571714052 0.109666323 0.766187205 +0.941180218 0.610178039 0.424647118 0.395371768 0.846323479 0.88914536 +0.324256425 0.459199666 0.827531692 0.828936597 0.109480342 0.655851453 +0.588280812 0.965609356 0.62302643 0.883423332 0.363936227 0.689559882 +0.941579262 0.751614926 0.391410192 0.334588804 0.229803127 0.672235624 +0.939210584 0.450790232 0.789402938 0.354407245 0.07514247 0.934810996 +0.172210436 0.80774822 0.056467814 0.291852137 0.95481227 0.473738931 +0.398294068 0.223872985 0.315168032 0.209178205 0.455306292 0.494247765 +0.108404861 0.997421519 0.993119202 0.127213639 0.819528762 0.065496101 +0.946428058 0.056566507 0.097161584 0.982900039 0.22970342 0.382910333 +0.57075169 0.673258299 0.175086427 0.506424534 0.463475517 0.87082921 +0.80108874 0.444323723 0.899858219 0.384071797 0.829688462 0.158857876 +0.630118482 0.122039501 0.605462467 0.660657769 0.308164946 0.007710445 +0.513848408 0.390751304 0.227463401 0.890669716 0.946043681 0.916660479 +0.539025364 0.255061726 0.412834345 0.454563316 0.781311929 0.185951703 +0.601918591 0.842186385 0.725418238 0.538787459 0.489260057 0.455787177 +0.983291192 0.765345082 0.694065423 0.998031822 0.756737572 0.146928974 +0.850270755 0.929067262 0.484064608 0.333560258 0.904807169 0.351268098 +0.277909826 0.511098912 0.781481884 0.377517429 0.98855071 0.952913241 +0.215906315 0.707666531 0.662559615 0.552941754 0.299998719 0.057701446 +0.945491106 0.903739721 0.745798281 0.467165312 0.469529737 0.782388916 +0.151615308 0.982228937 0.854790222 0.730356216 0.419823565 0.45450039 +0.433963836 0.831810213 0.67632793 0.686007917 0.15081297 0.939833742 +0.821985741 0.375620939 0.268461104 0.902485992 0.321333262 0.705215868 +0.222854933 0.702278817 0.433823579 0.601905455 0.818701822 0.4476784 +0.342527279 0.553899286 0.615076992 0.716946758 0.209599487 0.829266222 +0.75337014 0.542753791 0.942084061 0.427481335 0.768060017 0.016797272 +0.102935928 0.771728863 0.708356389 0.451298909 0.57045317 0.1587155 +0.436688486 0.551899303 0.012496369 0.692122962 0.766349892 0.07917721 +0.203827357 0.529771774 0.723026371 0.815944144 0.400462809 0.992483912 +0.556526844 0.637855978 0.688357932 0.586763413 0.203854957 0.550039668 +0.042276127 0.15808396 0.242957659 0.842868482 0.230804071 0.937703737 +0.294152096 0.930347798 0.544139246 0.202562874 0.033083777 0.113159719 +0.949781214 0.805305552 0.360822257 0.196647692 0.616949971 0.203049959 +0.593725012 0.253685156 0.013965851 0.170808941 0.166678208 0.498300384 +0.363121995 0.75522532 0.297716833 0.889440681 0.409235311 0.104771771 +0.264496539 0.831686282 0.254350822 0.966229018 0.420589092 0.053068873 +0.580509019 0.82685083 0.931976533 0.438834521 0.734231155 0.6176341 +0.380836407 0.109671412 0.907764121 0.991428477 0.081770593 0.564334819 +0.118060865 0.660712545 0.894635169 0.810535338 0.196711981 0.996801843 +0.219022947 0.801596951 0.995833745 0.629800474 0.597029695 0.495545457 +0.361207893 0.849507496 0.208472332 0.777625112 0.250910256 0.544799123 +0.879642029 0.787054862 0.480879455 0.220567217 0.533802092 0.450929203 +0.396735564 0.998772653 0.179205888 0.210052676 0.907862711 0.665599815 +0.954991896 0.663424557 0.27430401 0.692298391 0.864743907 0.541351858 +0.56359241 0.439632092 0.878987057 0.187306488 0.508847026 0.473535222 +0.266934319 0.954988846 0.640376288 0.380906737 0.042731663 0.426993388 +0.032406389 0.96084866 0.944023274 0.145580264 0.851202771 0.448086777 +0.088700886 0.967071991 0.007166536 0.986739957 0.462602617 0.397096438 +0.755055741 0.759100685 0.452945107 0.536892854 0.195447002 0.370438872 +0.591921882 0.707532891 0.79712972 0.287332389 0.726582901 0.959639835 +0.017373264 0.228636019 0.119428315 0.87236751 0.490297405 0.710261194 +0.48262772 0.020819271 0.556535829 0.849322553 0.010905687 0.514969795 +0.056679555 0.418154454 0.116320158 0.024262709 0.73915828 0.010856391 +0.209130277 0.854668737 0.495538008 0.647399356 0.325926493 0.218919298 +0.014439794 0.376591048 0.876476882 0.225967874 0.753626357 0.92659374 +0.104913227 0.530611186 0.131083766 0.098715984 0.428725188 0.014080971 +0.688670982 0.671536162 0.968925859 0.261414029 0.746392981 0.764135209 +0.53065683 0.242461725 0.697296527 0.669348614 0.008071855 0.541075088 +0.941783644 0.530010952 0.030157414 0.612433846 0.338234343 0.11071911 +0.73653503 0.4150595 0.226068247 0.873890583 0.059886646 0.444530201 +0.505247376 0.664771651 0.578583075 0.889192493 0.454073151 0.541574209 +0.897627459 0.295553738 0.008839362 0.203726607 0.569600102 0.90357635 +0.495243009 0.956381275 0.895584768 0.67780092 0.413069355 0.480697117 +0.889477639 0.497291972 0.557670483 0.342391008 0.100057509 0.207159696 +0.11311886 0.917709271 0.58661128 0.998878337 0.561345323 0.507342768 +0.796121711 0.300272899 0.849093997 0.934947588 0.090489872 0.215079493 +0.62874005 0.468684443 0.489310446 0.83464006 0.451633217 0.940451223 +0.927978422 0.076792364 0.788582023 0.748046381 0.854621317 0.391504195 +0.022145221 0.89319545 0.325592316 0.234201559 0.251795408 0.189460479 +0.636513022 0.555493259 0.153611975 0.607501704 0.543719572 0.913319209 +0.22639404 0.047091327 0.897930092 0.993537794 0.465419343 0.754591754 +0.952031617 0.753640646 0.14459616 0.034515648 0.510962187 0.095087789 +0.31403401 0.894081965 0.434955408 0.857026205 0.951007274 0.995155845 +0.357518261 0.786562616 0.502378934 0.87278265 0.685567116 0.710123871 +0.857677632 0.388745518 0.138387142 0.882382261 0.138679444 0.747807347 +0.013783293 0.473612974 0.861414947 0.139963211 0.825813295 0.576514502 +0.709374995 0.738655745 0.19944838 0.575850221 0.646435142 0.666884798 +0.888961781 0.761099994 0.340217957 0.29575512 0.481241775 0.55396148 +0.878151437 0.891798805 0.604935875 0.502727966 0.166107938 0.569037474 +0.019451573 0.727881109 0.642762479 0.664042811 0.445849781 0.177533548 +0.64833285 0.980727262 0.930302442 0.597114256 0.429887214 0.875488807 +0.967072813 0.855647895 0.883974686 0.600570806 0.563273463 0.962045917 +0.193385368 0.629831504 0.478428786 0.438128371 0.545533426 0.008216086 +0.777646611 0.219972481 0.459389494 0.85938704 0.784590807 0.277238118 +0.087982352 0.239929942 0.845276361 0.688903619 0.474716569 0.091554091 +0.25111035 0.142364596 0.024312949 0.406370129 0.037547362 0.521484182 +0.408622925 0.101758587 0.373130102 0.773627571 0.550135739 0.564910189 +0.146929979 0.811792296 0.343859348 0.954419364 0.82924247 0.647565798 +0.469185396 0.999741807 0.894478812 0.985071208 0.297604833 0.580932494 +0.508307309 0.531802646 0.513958982 0.655692767 0.49441237 0.915340839 +0.661213692 0.983591447 0.897620342 0.285678817 0.78672193 0.298943272 +0.480973341 0.42602565 0.407801925 0.588190106 0.737592722 0.725663966 +0.25065207 0.352358988 0.556375601 0.429400389 0.595268872 0.065117957 +0.315079605 0.993771904 0.486448163 0.495777 0.510627649 0.87431342 +0.874133797 0.564705859 0.29458486 0.141163228 0.317146399 0.007831668 +0.729104882 0.910372629 0.838025509 0.232356568 0.221629886 0.639065264 +0.439126105 0.986495188 0.604174239 0.352221238 0.286248782 0.210454265 +0.852066616 0.369762663 0.717536415 0.567702402 0.106143735 0.363578792 +0.981635263 0.526632859 0.215408314 0.697977788 0.378668103 0.443917736 +0.135423516 0.610005714 0.185706254 0.843167955 0.852568283 0.001383551 +0.782149909 0.598477354 0.688895883 0.477629405 0.032249136 0.728187345 +0.946970607 0.30460367 0.408369688 0.23409755 0.528839521 0.398223339 +0.069367613 0.097806916 0.026699958 0.58250503 0.401264901 0.492140046 +0.572546511 0.451743215 0.02228244 0.269457929 0.331165193 0.408968802 +0.81192484 0.737641772 0.362989512 0.199359928 0.511379698 0.209442455 +0.599544724 0.343029916 0.655122128 0.836864734 0.595302853 0.44625569 +0.294770151 0.098854569 0.015415851 0.316701394 0.575598938 0.112343556 +0.660639499 0.637747496 0.199751912 0.551810193 0.998198648 0.319774352 +0.333531342 0.324631954 0.15067463 0.159010505 0.695156424 0.20914797 +0.268671822 0.002767933 0.389266236 0.434041155 0.079020985 0.372673063 +0.622413765 0.264367189 0.71004071 0.789885284 0.12440586 0.695244572 +0.4272881 0.010913785 0.646244793 0.619671381 0.964984289 0.494746095 +0.691151004 0.31503177 0.702198113 0.015253997 0.09544362 0.269362942 +0.231694707 0.853365654 0.057972104 0.512268435 0.451892983 0.266445593 +0.08006518 0.659600638 0.586602478 0.923204061 0.112553976 0.590683297 +0.317391846 0.686553702 0.003944567 0.156407349 0.105609364 0.426125332 +0.417474526 0.551485034 0.582779587 0.259807351 0.179270283 0.027015436 +0.701135287 0.990086626 0.747578011 0.728523376 0.971913151 0.202416468 +0.657839132 0.685923556 0.257960317 0.215114367 0.71625127 0.423971398 +0.975856264 0.076062233 0.70666497 0.389373424 0.163837013 0.008487773 +0.781317069 0.252752151 0.461045364 0.160227885 0.459739442 0.626216226 +0.664172721 0.549998682 0.313100337 0.15759246 0.632392782 0.672879255 +0.571297651 0.010874672 0.220745242 0.641971008 0.367852574 0.235096922 +0.722141672 0.520616024 0.589973575 0.221151845 0.045457093 0.386979879 +0.147932541 0.902405167 0.805778391 0.248070595 0.741629653 0.689456213 +0.437986589 0.675642168 0.769433103 0.161123186 0.97343288 0.331684401 +0.4406929 0.673252164 0.030164789 0.812926425 0.659289535 0.048793221 +0.412898186 0.497084946 0.675450922 0.190450901 0.522475073 0.968113729 +0.045966139 0.134685642 0.607108036 0.372484237 0.155067897 0.281517652 +0.244790172 0.05238013 0.449537215 0.696286821 0.298073213 0.375049512 +0.334997666 0.874930822 0.573228166 0.916715215 0.401825992 0.956651775 +0.419229027 0.64361297 0.885220536 0.881307799 0.489060381 0.605970811 +0.780734109 0.444248481 0.051940471 0.282400047 0.859510705 0.710295044 +0.126813977 0.255002366 0.438105742 0.452177162 0.547288037 0.626751273 +0.091362081 0.164421586 0.98026819 0.342527398 0.8899257 0.729913251 +0.069580997 0.442590111 0.668438568 0.490270958 0.833406127 0.63264155 +0.377410884 0.920154197 0.694867108 0.775443825 0.866342084 0.378890223 +0.485868721 0.675795176 0.708156108 0.128713304 0.541084289 0.558845429 +0.835806573 0.294264284 0.38434341 0.858411088 0.249120578 0.741256642 +0.31806581 0.101345222 0.344294801 0.360940979 0.607466677 0.561918042 +0.664550801 0.549830025 0.579771877 0.45321779 0.296577061 0.12885335 +0.315659977 0.703451093 0.469002373 0.696789834 0.390109943 0.24064172 +0.248492969 0.106063875 0.215768819 0.421898085 0.795804019 0.131894085 +0.234786967 0.52030317 0.457218297 0.932183143 0.692616366 0.332098524 +0.690092596 0.49774608 0.439409329 0.617398009 0.648823984 0.402959797 +0.28150903 0.05600283 0.071688373 0.649413009 0.152163056 0.250338798 +0.39813849 0.7118065 0.507712167 0.487101258 0.60512535 0.373117745 +0.068106538 0.131524742 0.974197825 0.495139391 0.905752515 0.743213398 +0.815006422 0.602406139 0.427302254 0.957441579 0.249180721 0.285396416 +0.670818027 0.92566773 0.705243776 0.398978347 0.008021967 0.292705766 +0.982604504 0.282910907 0.836375407 0.323258153 0.532884102 0.776249566 +0.732595031 0.592057994 0.986295607 0.687352581 0.859673077 0.758778896 +0.443653457 0.639557186 0.241537448 0.985111444 0.088118633 0.68683428 +0.821280094 0.209348124 0.274033649 0.180100314 0.139035613 0.305146018 +0.433242981 0.390572968 0.599733919 0.075331895 0.336017016 0.537028972 +0.783166842 0.411349942 0.923372372 0.663951878 0.849878762 0.668732791 +0.132586565 0.428788803 0.137979059 0.218828501 0.053441053 0.134641041 +0.634792837 0.550888927 0.854532644 0.016814163 0.062648065 0.829141779 +0.666701704 0.533326788 0.305140613 0.695848209 0.767086181 0.295459435 +0.261131924 0.728897392 0.756262489 0.000834552 0.687684967 0.540732385 +0.532308009 0.172493372 0.87469103 0.300907292 0.032923155 0.879571512 +0.914307724 0.628527345 0.919345234 0.919315171 0.359568509 0.257327836 +0.950927185 0.771585224 0.211968122 0.448966945 0.033955661 0.274711946 +0.195227731 0.37374317 0.275805641 0.915202131 0.339296751 0.084286061 +0.568851978 0.207224098 0.11302733 0.061671473 0.411682781 0.360023681 +0.662387361 0.859306582 0.718550291 0.729602466 0.524032345 0.010043663 +0.172145556 0.669905316 0.396500995 0.430209225 0.229344237 0.732186705 +0.629769971 0.770535419 0.38282267 0.67626416 0.189113889 0.224137608 +0.59186187 0.933189084 0.759905174 0.406280901 0.020805697 0.056837364 +0.305573846 0.353986402 0.868076391 0.972753315 0.32656445 0.633587727 +0.447336417 0.909174156 0.956593565 0.99540416 0.198930156 0.335401987 +0.504221883 0.87934425 0.118875584 0.100359383 0.794664682 0.300185185 +0.183683311 0.267923267 0.588010373 0.235042516 0.076423379 0.393570176 +0.424270699 0.944578627 0.345411889 0.503990006 0.384877535 0.10313324 +0.43719408 0.828234851 0.771485989 0.685228803 0.42073483 0.231371736 +0.612525361 0.0821629 0.941897672 0.621744786 0.568214692 0.01572171 +0.673998864 0.940125574 0.83576971 0.389396115 0.284307291 0.497021865 +0.558660133 0.606682993 0.965372365 0.013093059 0.885951792 0.749307737 +0.361630383 0.075575818 0.898864176 0.518637167 0.133242404 0.904363674 +0.942385516 0.639781796 0.323345468 0.935333751 0.84200621 0.816589181 +0.938578696 0.712775436 0.32345301 0.55943774 0.814152671 0.71549043 +0.882063008 0.234166417 0.689024286 0.211672143 0.102600419 0.183665473 +0.045846014 0.602907671 0.371828998 0.016466591 0.453148725 0.906707858 +0.827681491 0.431933467 0.286385638 0.798808871 0.053309633 0.832627782 +0.529023084 0.753653194 0.343274488 0.982903776 0.031391189 0.645013922 +0.494104903 0.255360092 0.596099353 0.470835986 0.182924522 0.664490111 +0.084253606 0.189009064 0.284904329 0.196179939 0.774299279 0.847878339 +0.842742188 0.801370155 0.902871407 0.117435093 0.710371014 0.075959025 +0.94315492 0.801860026 0.209452074 0.939455176 0.956449207 0.567551429 +0.639213893 0.70509145 0.979791295 0.959701937 0.785639916 0.458580849 +0.05803464 0.761821984 0.464612817 0.042729534 0.170984955 0.514670092 +0.342274223 0.814241793 0.189435304 0.135828296 0.1048051 0.530142096 +0.829982795 0.83373719 0.48793766 0.230407697 0.960500298 0.25608696 +0.424581713 0.281770909 0.199105233 0.119466616 0.195068429 0.879815183 +0.791032113 0.315614568 0.537057908 0.957026605 0.029354284 0.785087721 +0.988327909 0.394521347 0.14537171 0.324061553 0.82705687 0.852651965 +0.028280373 0.008998885 0.115300019 0.215858818 0.010089321 0.977652334 +0.414495277 0.52102405 0.398364025 0.812840483 0.043285981 0.541324506 +0.73431914 0.737586067 0.846998233 0.039941169 0.089393775 0.333184064 +0.40161735 0.840287542 0.26499178 0.261098004 0.731413937 0.098543018 +0.482060318 0.987433281 0.20478637 0.249971567 0.370302457 0.581271812 +0.102859347 0.28202849 0.014192653 0.21594148 0.100550875 0.284785159 +0.417369322 0.134473515 0.457707841 0.839373026 0.46014207 0.87197554 +0.233376755 0.260536218 0.11396611 0.081144737 0.019211343 0.726579532 +0.166779021 0.560454377 0.959070837 0.14866308 0.090198367 0.796280139 +0.045815105 0.096290756 0.9617713 0.569128906 0.815837968 0.941499587 +0.692496567 0.188296083 0.090040503 0.216305537 0.767617874 0.527201811 +0.413810719 0.602315564 0.287994139 0.457941572 0.03235779 0.645421803 +0.445780546 0.859666638 0.442084347 0.365678603 0.825842092 0.859401759 +0.324449783 0.687132155 0.393841896 0.752010666 0.932522829 0.130935585 +0.09456619 0.636793161 0.123295518 0.47441202 0.984057079 0.890543926 +0.943463705 0.933839952 0.394559404 0.619489731 0.739931746 0.420200873 +0.17470099 0.093004523 0.252353052 0.671083148 0.704677817 0.806897485 +0.828420043 0.139222552 0.85724112 0.982006926 0.147795253 0.268225298 +0.724245083 0.620325273 0.898986498 0.696643429 0.314205706 0.706205391 +0.393186732 0.096457929 0.077423012 0.349105791 0.835728794 0.197145282 +0.223752557 0.450776235 0.94947962 0.755779731 0.288171817 0.407774575 +0.449851519 0.304342485 0.98282207 0.350876518 0.659497724 0.566663827 +0.906491165 0.418420063 0.905558689 0.379987462 0.312717861 0.111528523 +0.492362014 0.769073011 0.235062193 0.523104101 0.360423688 0.41792334 +0.805382023 0.016917516 0.04928423 0.732709594 0.338971286 0.990363307 +0.238721267 0.497062877 0.820718969 0.101367812 0.732845521 0.11616428 +0.376110237 0.725966651 0.126231654 0.943523927 0.034043099 0.364179726 +0.802487096 0.778246773 0.163832888 0.888559162 0.810951841 0.822100686 +0.90486725 0.916199894 0.957279758 0.681134174 0.518907258 0.853778301 +0.76495476 0.349336369 0.324740238 0.208792237 0.426058583 0.932000861 +0.354616575 0.951554649 0.574469445 0.812790906 0.343799586 0.955818939 +0.247618487 0.632963392 0.16431775 0.547267464 0.77891975 0.027461713 +0.499691807 0.588180211 0.095778786 0.876857633 0.261444721 0.411472232 +0.07396744 0.061062808 0.274261415 0.045939185 0.303184708 0.915517077 +0.274350426 0.659171145 0.237633871 0.521234776 0.32151437 0.271233469 +0.84242333 0.292947681 0.663042926 0.579085386 0.504300719 0.038606811 +0.829589721 0.252782639 0.610539918 0.8523379 0.433442945 0.856330082 +0.023625816 0.236091285 0.036521766 0.156328007 0.396930487 0.460154641 +0.908520733 0.148305799 0.487769241 0.612609224 0.557076269 0.616578588 +0.043227318 0.239076293 0.309318319 0.17139231 0.78355326 0.769860909 +0.404545229 0.237193272 0.843248829 0.213236682 0.620735778 0.235128843 +0.018475889 0.65348078 0.976000918 0.319497717 0.597052977 0.240936847 +0.388562251 0.410224861 0.259649615 0.650427202 0.980086121 0.293972968 +0.60334986 0.725414249 0.319680804 0.789567626 0.191090371 0.862333469 +0.42372308 0.473370835 0.936484 0.308418866 0.444709564 0.344758168 +0.154625216 0.813121185 0.747738585 0.97740488 0.434147942 0.796016989 +0.507040271 0.613666997 0.903439272 0.170002115 0.275054317 0.419036168 +0.806723326 0.250012711 0.194933858 0.357061712 0.886860104 0.490017282 +0.026279975 0.503571031 0.682223385 0.47722777 0.167215833 0.380654216 +0.252829213 0.835616648 0.943445834 0.054401968 0.058738952 0.718078906 +0.275431001 0.560695729 0.633967234 0.298890796 0.527194095 0.938611416 +0.984794584 0.327156267 0.561339324 0.76228317 0.611707587 0.62091645 +0.237248906 0.979832555 0.327514394 0.129237013 0.832245615 0.054644499 +0.674114422 0.689335121 0.547713287 0.143543313 0.740495625 0.508514476 +0.43604402 0.297075883 0.052062375 0.276022351 0.101955134 0.355621414 +0.096200052 0.633646731 0.147840949 0.81346171 0.222651773 0.139671974 +0.0826722 0.112319464 0.951030288 0.931102491 0.258978682 0.623528519 +0.361854247 0.260639716 0.844437166 0.838903222 0.748224855 0.741766324 +0.561252759 0.271765602 0.262456608 0.433320403 0.274705101 0.000758457 +0.585482832 0.828848191 0.069537138 0.153603307 0.782415158 0.670359924 +0.883024151 0.780953412 0.13421968 0.393075199 0.50635534 0.773276789 +0.37071795 0.698080101 0.992080757 0.169443221 0.235636575 0.752955195 +0.110240488 0.490485955 0.574285636 0.156905565 0.129940482 0.784909601 +0.143623428 0.471413546 0.136268229 0.994403364 0.181602284 0.626808363 +0.241060012 0.152562337 0.885796966 0.802989188 0.710456096 0.724410336 +0.090355934 0.136020664 0.418752889 0.666640027 0.038504328 0.286040013 +0.017355273 0.493636004 0.926313086 0.116048143 0.610844333 0.158297129 +0.107485757 0.488481203 0.238689323 0.65151333 0.778562506 0.95446086 +0.846768555 0.497741232 0.867602261 0.787217165 0.723308412 0.038862495 +0.479406049 0.199198022 0.660393913 0.560172028 0.564761904 0.877613194 +0.665345886 0.096374902 0.569300135 0.566426888 0.553742251 0.206973054 +0.757200697 0.840086854 0.127511602 0.342527671 0.653704334 0.282753654 +0.953901668 0.172681297 0.252081924 0.088839519 0.774348268 0.033993958 +0.028983328 0.317067747 0.438592722 0.287345125 0.944767882 0.178967914 +0.614486065 0.348977441 0.540166703 0.572168632 0.617861227 0.434725103 +0.105186898 0.888371554 0.392702763 0.644452223 0.771879459 0.579703203 +0.243668775 0.999964191 0.984743955 0.78845023 0.278487002 0.119022656 +0.202238985 0.952435025 0.203307098 0.982119781 0.405050354 0.81335416 +0.821485632 0.625415473 0.486915084 0.897883944 0.578046055 0.61449518 +0.064639209 0.588227514 0.915683294 0.204801371 0.301489991 0.072564102 +0.739877982 0.907536924 0.469081757 0.192457385 0.472626535 0.640936318 +0.933469872 0.202036972 0.377868079 0.95508112 0.520904379 0.330020496 +0.693251372 0.368683844 0.76360692 0.440530729 0.028040667 0.050055163 +0.038353152 0.841511522 0.134768693 0.664683623 0.949148462 0.340536143 +0.978079093 0.542034264 0.20031661 0.9024162 0.272720697 0.522996753 +0.019068036 0.270763518 0.126578772 0.7858798 0.057367409 0.851657602 +0.600173677 0.848539616 0.23357051 0.658963345 0.17698641 0.19382336 +0.156473403 0.943230443 0.896630103 0.063838041 0.636824861 0.541986629 +0.043228093 0.675753584 0.831668652 0.212814021 0.66495386 0.44064863 +0.639181046 0.237007889 0.747450138 0.951196264 0.379242428 0.930729465 +0.233069106 0.20725553 0.721636281 0.628320695 0.532982341 0.50987202 +0.330792295 0.044881614 0.773346548 0.867454924 0.115374446 0.452627586 +0.825567783 0.793352117 0.39332757 0.099793759 0.828418138 0.078163256 +0.926785272 0.71486687 0.515610139 0.982749051 0.237236052 0.339507741 +0.787035146 0.727338774 0.175212401 0.693264492 0.279154699 0.37613996 +0.110662706 0.708963168 0.277713875 0.449424701 0.256042584 0.401125973 +0.399730003 0.002481494 0.964828888 0.622779587 0.98305432 0.717903542 +0.390138359 0.304916746 0.709067695 0.33066817 0.124302563 0.134476384 +0.167730537 0.942568494 0.062304919 0.433483408 0.816390792 0.015240209 +0.319770421 0.092234129 0.094337567 0.093889479 0.232660434 0.54836172 +0.136019307 0.613115161 0.869186075 0.215664777 0.998283248 0.579421399 +0.17927219 0.680514692 0.430003032 0.19576507 0.087836522 0.381097978 +0.121584311 0.321570325 0.153991123 0.777675465 0.72803337 0.4170311 +0.236166155 0.120409835 0.413685905 0.566344923 0.145727026 0.484201041 +0.927508244 0.115606694 0.815061346 0.50989808 0.816692412 0.085595653 +0.017592265 0.644084675 0.867861745 0.413223746 0.60239898 0.200682167 +0.940288559 0.845184404 0.708676136 0.134002719 0.78019554 0.816616509 +0.32994701 0.435105151 0.587636583 0.697282742 0.990229786 0.402435902 +0.158594214 0.490744036 0.988813758 0.040259651 0.09925369 0.698549112 +0.188729929 0.210478854 0.580341468 0.611808539 0.741162725 0.721520704 +0.753445079 0.526991357 0.412526234 0.66367982 0.638681305 0.117734162 +0.184926626 0.506388066 0.36718639 0.683489504 0.316737351 0.595175888 +0.95808005 0.384063834 0.382101934 0.784044186 0.857989312 0.231710399 +0.826895861 0.505645251 0.89865743 0.128158186 0.074919554 0.446334156 +0.236215697 0.884925216 0.807549993 0.987525194 0.308277436 0.103968101 +0.922807812 0.6944407 0.770671765 0.410115321 0.5200781 0.535436215 +0.869044154 0.16711881 0.445845853 0.336559966 0.004547066 0.740270072 +0.996071697 0.252136974 0.36392381 0.913634484 0.368821201 0.374098654 +0.49426699 0.850017846 0.274167054 0.708314347 0.36298415 0.060217982 +0.731658708 0.2075389 0.328292785 0.133164665 0.602127878 0.372533892 +0.215532379 0.957990169 0.471589722 0.545559009 0.975872145 0.695423284 +0.576608948 0.816271015 0.214109992 0.214722943 0.363990441 0.58678791 +0.257227542 0.596629404 0.751257855 0.954709592 0.405121198 0.087357728 +0.26812719 0.244655191 0.43654356 0.305050039 0.707093032 0.615442586 +0.564674412 0.981267198 0.456392277 0.330370123 0.891334745 0.29766931 +0.783362698 0.990023601 0.405454783 0.167128104 0.976819962 0.775336298 +0.578137447 0.8272246 0.98128539 0.786996534 0.275031526 0.591775352 +0.004818331 0.409136179 0.380474702 0.509323193 0.600380069 0.95801177 +0.34682717 0.819110091 0.319492549 0.292208996 0.058338111 0.92292742 +0.472148162 0.112390811 0.082364841 0.601380218 0.520057904 0.849158882 +0.214026912 0.839183152 0.629979054 0.753851767 0.627431534 0.097132457 +0.699940022 0.061662018 0.502320739 0.585955798 0.437298628 0.157441177 +0.466309147 0.207107893 0.64041326 0.94873449 0.934743589 0.746309949 +0.937018298 0.446464508 0.98053415 0.920177908 0.16050733 0.52115173 +0.528858468 0.998441254 0.586086653 0.512147321 0.436585043 0.783865544 +0.81705334 0.526583848 0.861098713 0.320337757 0.97203809 0.041545558 +0.555188784 0.545971773 0.249291955 0.508313661 0.271011731 0.147055945 +0.50095009 0.403977884 0.699586697 0.744729076 0.78979402 0.353189879 +0.845010253 0.044646921 0.652260027 0.389074945 0.085195697 0.422578841 +0.352949718 0.76808886 0.373674453 0.324787501 0.55699429 0.656825551 +0.08667911 0.775717454 0.947384063 0.116456119 0.572567411 0.542460522 +0.584488466 0.003767465 0.320793067 0.001001715 0.910558573 0.437085484 +0.550778082 0.031555887 0.938743396 0.673251571 0.800053044 0.878208416 +0.948100278 0.589348239 0.104083819 0.484660395 0.818715448 0.254220059 +0.51461835 0.457208274 0.653011138 0.463221226 0.525714354 0.177920878 +0.215110219 0.963650558 0.584233506 0.589756417 0.19976558 0.680856316 +0.173672164 0.373257183 0.502616145 0.383256166 0.203497488 0.44117068 +0.030027964 0.282022187 0.392764176 0.316960532 0.137769428 0.328588517 +0.826701728 0.744037195 0.06489791 0.787695229 0.123870789 0.064814291 +0.642723484 0.912289156 0.141851794 0.840717335 0.310242564 0.762554702 +0.291443994 0.804403745 0.036944031 0.147511714 0.708384671 0.197687066 +0.394669818 0.38625016 0.929245467 0.35949241 0.287783158 0.346431576 +0.393750802 0.320401853 0.717335808 0.647279201 0.219861173 0.246860314 +0.906749167 0.483064368 0.305945864 0.978589732 0.937158394 0.767630399 +0.543152098 0.530641036 0.323159182 0.847917721 0.9689203 0.310249305 +0.92725378 0.744340021 0.289777334 0.869250067 0.265009222 0.864925603 +0.139268887 0.897094782 0.271085907 0.97084411 0.26006527 0.553105105 +0.895831943 0.807532684 0.193344478 0.307321414 0.487555588 0.068421758 +0.479539692 0.95357687 0.547463853 0.594473619 0.871350117 0.360489964 +0.389123676 0.352403 0.398123693 0.663501093 0.972283864 0.01900911 +0.425691717 0.761733853 0.496615731 0.917085984 0.055729126 0.51137387 +0.253647948 0.514517527 0.653381792 0.950422569 0.647704866 0.53219336 +0.907138488 0.97671901 0.300884377 0.33116602 0.369433228 0.986257273 +0.137070893 0.066094626 0.568157165 0.535705165 0.730906774 0.580380721 +0.843437659 0.0412373 0.836229033 0.261907066 0.005789313 0.575923723 +0.364825302 0.675970987 0.543455066 0.383132921 0.836087941 0.479091631 +0.169711354 0.870157541 0.617175155 0.381106654 0.229055299 0.319029237 +0.573708553 0.060936735 0.301811292 0.603724151 0.238962812 0.227311691 +0.836210688 0.990637201 0.677852185 0.942280633 0.917709926 0.018359099 +0.417572577 0.854213236 0.695084226 0.635519988 0.405224764 0.290836531 +0.407193457 0.071138264 0.689688387 0.130857729 0.06214215 0.77614042 +0.539782972 0.28484025 0.225114576 0.945651295 0.697411729 0.376462475 +0.205421613 0.80947383 0.182663569 0.747701507 0.002232375 0.94420676 +0.269988238 0.604971019 0.618557853 0.626134726 0.206498651 0.467354276 +0.818074446 0.795719531 0.017713347 0.375346114 0.693689978 0.841733099 +0.814595739 0.904516648 0.720243403 0.801265786 0.881724217 0.371752844 +0.987031068 0.273308037 0.40231304 0.47006345 0.43008918 0.181398419 +0.037870703 0.595544314 0.194559543 0.790159521 0.772912493 0.953454766 +0.535334685 0.860078364 0.496509369 0.854454742 0.209611344 0.259607215 +0.676178925 0.779038178 0.941355756 0.665126069 0.533631172 0.809242842 +0.944012673 0.901018149 0.195128783 0.85766279 0.351787135 0.299569724 +0.154392989 0.648840292 0.584608965 0.044604895 0.420907842 0.154964661 +0.811005962 0.498155255 0.766406584 0.105157693 0.717163861 0.62836896 +0.33527616 0.282143385 0.057710168 0.11552911 0.081456532 0.190882036 +0.652498559 0.034086822 0.296203687 0.324718684 0.970373442 0.742007365 +0.519466695 0.832475511 0.353901364 0.364285483 0.102266698 0.452512641 +0.359269072 0.236601082 0.95378104 0.424424628 0.649430944 0.798474826 +0.516575295 0.764665654 0.166700817 0.411175298 0.635291649 0.387534682 +0.041553582 0.762537896 0.875702406 0.545058798 0.183052693 0.693334422 +0.210775084 0.443225302 0.794288425 0.382479446 0.537220188 0.085832616 +0.435908227 0.676121193 0.619075757 0.843253196 0.013021866 0.473095213 +0.883870628 0.842140075 0.142861747 0.528818865 0.623345133 0.596612723 +0.165340008 0.552189841 0.766327542 0.161392672 0.635384241 0.256162281 +0.709432892 0.729361012 0.740436365 0.288750282 0.531236063 0.780936858 +0.022645673 0.659716288 0.913679879 0.371029446 0.799849431 0.307095965 +0.269594122 0.809632408 0.170410531 0.959858443 0.851052662 0.910190261 +0.211453909 0.939224296 0.448050121 0.901930638 0.211961122 0.193080026 +0.085617806 0.498414935 0.724905979 0.99855804 0.800673114 0.990433135 +0.070912678 0.12663885 0.482388221 0.400219954 0.14019142 0.513733025 +0.238949218 0.209317216 0.680896762 0.34247932 0.902686823 0.394030578 +0.918977451 0.324946005 0.192263813 0.082858481 0.85169866 0.322177521 +0.415775758 0.68439843 0.093796509 0.241413813 0.665078376 0.034367801 +0.049144772 0.485697946 0.99422485 0.080929051 0.943566386 0.122449583 +0.887625293 0.890218469 0.935640499 0.339289428 0.493785287 0.709737125 +0.758439054 0.260260207 0.697249386 0.529001728 0.91869449 0.520953362 +0.334267673 0.025512193 0.015910148 0.342348361 0.88632725 0.146463963 +0.480674098 0.195661441 0.324475226 0.65606775 0.943004795 0.72167404 +0.410965754 0.704576288 0.674521007 0.445034926 0.005251911 0.75116867 +0.524810163 0.219790599 0.40744116 0.52558322 0.244409077 0.844630154 +0.773480506 0.34420449 0.282610207 0.094932094 0.179758451 0.518565274 +0.713991716 0.342050538 0.25541269 0.434689167 0.601518501 0.326540544 +0.922291293 0.53158343 0.517142462 0.802884904 0.593030764 0.830754046 +0.523593352 0.321129015 0.914671029 0.017749694 0.650602512 0.243708201 +0.85951887 0.193956871 0.147619556 0.759515431 0.854783477 0.933733512 +0.851765621 0.15766698 0.809674223 0.581521273 0.121012346 0.279661729 +0.049228286 0.818203971 0.819910903 0.140689136 0.080623683 0.001685042 +0.298738368 0.977991055 0.689640312 0.54259468 0.029576621 0.285460096 +0.406424447 0.79079746 0.072003464 0.441002988 0.420301673 0.264910692 +0.427908699 0.79647111 0.579837457 0.332313929 0.454996549 0.059901675 +0.918719228 0.483383017 0.831845024 0.46922567 0.913314935 0.429062521 +0.816954842 0.676511802 0.941612593 0.715752411 0.407948013 0.690972074 +0.816206504 0.275831945 0.251632201 0.336401613 0.869768877 0.038655669 +0.936396012 0.120753874 0.527520402 0.358407882 0.981168331 0.824591032 +0.23341678 0.941499032 0.548432197 0.049304713 0.923107573 0.324456812 +0.991232156 0.657718882 0.405667007 0.730492214 0.58265799 0.933373187 +0.901364475 0.345359486 0.848562303 0.577163661 0.363116569 0.606930233 +0.004808304 0.79422907 0.246921308 0.882823807 0.467730157 0.331400763 +0.329798616 0.787479332 0.902133174 0.091019159 0.478354216 0.663870173 +0.568107962 0.671730992 0.84699601 0.747116991 0.705704244 0.280084814 +0.224165892 0.721076843 0.564229506 0.066621288 0.144036165 0.192531397 +0.427658043 0.418622694 0.46163423 0.050092536 0.159288742 0.534359232 +0.034127739 0.614584764 0.795698895 0.947592532 0.16457297 0.916208647 +0.093150687 0.537581299 0.019830633 0.869695909 0.160123109 0.288804838 +0.526788202 0.606176827 0.313681995 0.92341879 0.100428419 0.04638164 +0.158526807 0.083043787 0.577032945 0.076873807 0.904288304 0.983206275 +0.815051599 0.695103623 0.966785503 0.199158595 0.749983458 0.551913565 +0.164514471 0.281173258 0.119311204 0.361729048 0.161672038 0.311488635 +0.196526305 0.926549799 0.476623741 0.387483292 0.742690307 0.499960047 +0.150021644 0.546058591 0.967683638 0.969846877 0.303083642 0.293854574 +0.063465637 0.891303158 0.513210616 0.847928496 0.412396402 0.149230916 +0.665648644 0.973679468 0.806343149 0.315819714 0.096092846 0.340827767 +0.327755877 0.940037501 0.312359657 0.807623156 0.678547835 0.495127506 +0.726734805 0.078667004 0.535814943 0.561042933 0.814106392 0.034134987 +0.613849903 0.479540965 0.454637375 0.052412531 0.508313547 0.338533928 +0.812262465 0.758832222 0.299881931 0.72436182 0.277227844 0.575572157 +0.40116176 0.409448124 0.259581289 0.391516897 0.851974084 0.763466091 +0.020919005 0.373931387 0.565207325 0.063589388 0.343308118 0.034574229 +0.01234032 0.727834553 0.841977896 0.291638957 0.582883104 0.404271668 +0.600161544 0.760432439 0.814710292 0.834771669 0.303307652 0.856628494 +0.845079799 0.343658896 0.284008149 0.317665148 0.796779578 0.980053772 +0.678371168 0.333843781 0.560883479 0.884795796 0.909238535 0.278134942 +0.985386577 0.12231525 0.223431685 0.446491452 0.338779501 0.181398807 +0.493821529 0.829326386 0.883893893 0.205647163 0.320957939 0.01520748 +0.382703875 0.435915379 0.137153809 0.293397067 0.383586461 0.375275727 +0.029583395 0.489935283 0.440407621 0.645747105 0.080605171 0.344069948 +0.03304364 0.448879356 0.924974578 0.653529219 0.17137095 0.834605672 +0.796492595 0.524466978 0.620599153 0.481112229 0.014229293 0.954029533 +0.971873062 0.946610135 0.766554576 0.641878262 0.004885323 0.507225162 +0.725591081 0.425182824 0.021087464 0.96341454 0.475721659 0.012127867 +0.456328918 0.216589269 0.423793506 0.740178902 0.789434195 0.241907106 +0.57537059 0.462432109 0.740232632 0.041810479 0.841743444 0.929952163 +0.192360324 0.160236985 0.041608198 0.716017914 0.304079739 0.359388754 +0.323829878 0.680957129 0.212299797 0.034882375 0.636525888 0.71965212 +0.339144189 0.900183864 0.168759355 0.544255681 0.638553789 0.43641945 +0.129722195 0.343149119 0.099530698 0.673832995 0.40275026 0.006227313 +0.242544359 0.89284114 0.702697572 0.198243815 0.352015295 0.147361803 +0.417532043 0.703055666 0.853502346 0.773462846 0.896315651 0.082274673 +0.144135034 0.425610088 0.528803165 0.454440748 0.22199882 0.536928376 +0.797205521 0.77973229 0.023166016 0.649244598 0.672964686 0.559158165 +0.549704511 0.926569407 0.342994316 0.976657077 0.432621213 0.93535848 +0.866424809 0.41451922 0.818520209 0.312091757 0.865869336 0.331363558 +0.833576334 0.172910401 0.273577961 0.172523716 0.286041677 0.405531575 +0.45493602 0.066336376 0.059575074 0.79977222 0.771630509 0.201524961 +0.204535818 0.61999463 0.608800744 0.52343564 0.817943825 0.696534175 +0.392280178 0.788246788 0.475629808 0.431600312 0.682886352 0.471584505 +0.001059116 0.482091707 0.069993738 0.118108923 0.617118535 0.963209858 +0.34743899 0.623489547 0.897983649 0.543418372 0.58282448 0.090342064 +0.662763825 0.499757326 0.198140482 0.436420365 0.929702664 0.02932456 +0.054399963 0.553459299 0.863630807 0.454440407 0.950504417 0.368492164 +0.353577995 0.198914926 0.165576704 0.562364233 0.885277664 0.283055431 +0.075739426 0.313644165 0.70342783 0.239323274 0.651155624 0.443461985 +0.824316162 0.254121391 0.253055637 0.726193481 0.238334116 0.076188754 +0.031236108 0.85968643 0.840286154 0.828375769 0.012465217 0.139103943 +0.151378157 0.199499451 0.191289558 0.246372199 0.789099362 0.473710196 +0.859691503 0.760695878 0.028862028 0.845757824 0.682442049 0.951343593 +0.045808685 0.012818067 0.963542169 0.97825112 0.935502542 0.525433597 +0.577175655 0.145685217 0.737697327 0.463765208 0.370865145 0.352790458 +0.039275459 0.038451735 0.460103392 0.102006358 0.494009974 0.061281737 +0.220449889 0.114551194 0.27177813 0.78183706 0.457404501 0.390017128 +0.013522245 0.495846587 0.376055427 0.499983875 0.234823638 0.5016553 +0.304414213 0.316219673 0.573044505 0.852565361 0.884421228 0.223169775 +0.115608244 0.004937599 0.371520723 0.133296707 0.033550991 0.07424878 +0.05913944 0.820960346 0.193411866 0.660519123 0.250365945 0.351567942 +0.702866007 0.830627465 0.620785431 0.010256215 0.962605251 0.460496022 +0.261064535 0.874641806 0.732238126 0.068815457 0.925524873 0.195252113 +0.36983547 0.177256663 0.050249344 0.19250639 0.080160433 0.079866217 +0.273027175 0.826810754 0.476824111 0.798142125 0.515041555 0.97150016 +0.679892139 0.749192048 0.489261054 0.719846055 0.893336821 0.154284201 +0.164297308 0.729121502 0.85791396 0.613227806 0.901573259 0.864985897 +0.940420595 0.887143279 0.625297277 0.606406334 0.730082791 0.577668094 +0.97070164 0.404117513 0.716154317 0.741591494 0.35985681 0.58910744 +0.501761882 0.744029274 0.964859873 0.539257177 0.181269555 0.128510543 +0.022560946 0.656180134 0.63735026 0.158612413 0.809453918 0.135639205 +0.783883916 0.535217064 0.537050428 0.754990658 0.160223147 0.618873499 +0.997215205 0.437217228 0.646199292 0.685794476 0.770527615 0.040115373 +0.889848841 0.414677646 0.433635747 0.954999788 0.868503268 0.827148987 +0.128827988 0.780903773 0.728421969 0.311371503 0.518203931 0.163940304 +0.102282583 0.741786713 0.740016903 0.146779331 0.79714225 0.473787056 +0.888042467 0.356676007 0.962953102 0.258282826 0.480951089 0.435339105 +0.293124344 0.773550856 0.861562021 0.876234674 0.631101425 0.425194873 +0.417315169 0.81513885 0.254926976 0.946556516 0.181829667 0.104463254 +0.527043656 0.388053545 0.231960336 0.766755041 0.34832929 0.610014522 +0.967105392 0.032208458 0.371167821 0.599859845 0.25107829 0.52490136 +0.018363107 0.701967964 0.781030628 0.693389813 0.63673678 0.647831112 +0.711762745 0.058040765 0.09043522 0.140955372 0.76350602 0.678642303 +0.702308332 0.575944127 0.024290825 0.256698415 0.726587493 0.447648786 +0.572371346 0.77803811 0.076617886 0.35846638 0.361129055 0.139539986 +0.720349153 0.832417982 0.600916304 0.300513452 0.23616331 0.814146109 +0.741901292 0.60463847 0.298900631 0.175637025 0.138368807 0.285932632 +0.647897593 0.694868682 0.072686364 0.979621372 0.147764275 0.249768231 +0.365153224 0.004214757 0.207217604 0.765553919 0.970313034 0.049039115 +0.505747748 0.971789285 0.984395964 0.02322678 0.455229911 0.969413401 +0.337788542 0.142885362 0.054722529 0.04885972 0.32033214 0.15380243 +0.166027508 0.780407965 0.861458938 0.295623716 0.513193212 0.398611106 +0.116395526 0.110707262 0.099763564 0.097614127 0.711008166 0.879842631 +0.263389266 0.638049556 0.468689975 0.657344454 0.87665823 0.262134162 +0.518770689 0.706755098 0.125732807 0.126859087 0.769536457 0.259492509 +0.785253142 0.33461845 0.507026855 0.379517344 0.360489958 0.892422696 +0.578927049 0.007529663 0.262462485 0.239900838 0.885296835 0.463955617 +0.63627789 0.609864343 0.864712641 0.188583182 0.09692847 0.455236124 +0.304720899 0.511868723 0.042972007 0.802161163 0.233556766 0.537873913 +0.464155431 0.849267328 0.819476735 0.393153261 0.009405224 0.829498368 +0.957813785 0.341805412 0.220112038 0.758369922 0.59315395 0.431661905 +0.810068288 0.457484192 0.510126703 0.815427965 0.374940198 0.494429528 +0.247838664 0.928826894 0.780051674 0.918984258 0.624931246 0.815041113 +0.538824971 0.459769627 0.882909417 0.001430408 0.404998384 0.356103683 +0.716210626 0.943676363 0.204655172 0.446855206 0.324454624 0.159392402 +0.444743042 0.699419481 0.152799153 0.229586042 0.605001609 0.174133498 +0.964994775 0.698372118 0.214148225 0.450821442 0.197377906 0.071750541 +0.243742787 0.550361027 0.159094305 0.124943416 0.247351484 0.2094543 +0.950246229 0.247232204 0.97045987 0.569473083 0.065628705 0.469492125 +0.577524525 0.531899401 0.708982083 0.017460261 0.137862123 0.544999686 +0.810448681 0.704111429 0.588004547 0.60916574 0.550178359 0.82895155 +0.99946792 0.358338499 0.290411155 0.496546135 0.476238009 0.009175715 +0.55473014 0.45230223 0.170228707 0.844092825 0.473144369 0.934871189 +0.616052383 0.162804993 0.008624959 0.332998553 0.447739708 0.906116206 +0.513723513 0.956675437 0.166487834 0.866711623 0.89044217 0.863501526 +0.030613658 0.181256302 0.492939922 0.632901727 0.084060421 0.806113915 +0.720491213 0.563745778 0.190283117 0.129007635 0.772774489 0.620197095 +0.929347856 0.097491617 0.180245439 0.37334122 0.668227417 0.417619218 +0.010721835 0.494561871 0.903899996 0.706010334 0.052742142 0.444861239 +0.265146159 0.267981876 0.576868911 0.636702568 0.351384158 0.36796411 +0.282760575 0.784284176 0.974897001 0.591037841 0.474772529 0.504819771 +0.599331165 0.654210804 0.73900372 0.322686729 0.128424962 0.785121107 +0.388105734 0.29961881 0.497608899 0.535707061 0.575297715 0.816039914 +0.157438817 0.237176984 0.413099712 0.940056446 0.391755931 0.99091262 +0.872406098 0.815102387 0.234227378 0.534964813 0.541996136 0.569701415 +0.264573235 0.835001063 0.980706593 0.691450828 0.362693083 0.438787054 +0.060260545 0.047993376 0.23659936 0.583337337 0.695627896 0.957825007 +0.275895197 0.604422629 0.160137955 0.579849333 0.844649896 0.56358362 +0.455828909 0.505312999 0.500848334 0.585543061 0.516971077 0.589991308 +0.351833282 0.004174557 0.141906027 0.951143182 0.182941574 0.00968696 +0.865138307 0.934754348 0.854478286 0.46629903 0.376709731 0.190820118 +0.898814431 0.834266155 0.682934176 0.753361378 0.751659244 0.041402932 +0.450159635 0.319363237 0.142518828 0.961069815 0.584349805 0.742941009 +0.284196986 0.070375695 0.964571625 0.219263119 0.58981722 0.433159876 +0.936321221 0.647634474 0.025061969 0.656790766 0.814079644 0.634040173 +0.241673203 0.845839534 0.885102166 0.298215068 0.242883133 0.866717989 +0.641800912 0.277185808 0.375047089 0.633889937 0.581610671 0.097482355 +0.407293414 0.268865773 0.816208119 0.43358755 0.07423039 0.305988637 +0.667675826 0.711035826 0.026151771 0.826868909 0.352857093 0.694567677 +0.23346991 0.822421646 0.264912653 0.124096108 0.515194766 0.115094436 +0.165644868 0.890784269 0.861845594 0.951932851 0.766275313 0.733579103 +0.683955968 0.467116139 0.17225032 0.560906291 0.532240041 0.293688541 +0.121855191 0.30159006 0.810292325 0.583285634 0.122617252 0.697213217 +0.214286588 0.165265929 0.409439713 0.306637509 0.861478557 0.104208931 +0.367511991 0.742870206 0.434056411 0.703090008 0.967636781 0.504587231 +0.410302203 0.747675767 0.051903339 0.558932293 0.906104564 0.753623815 +0.388329898 0.815343699 0.856376422 0.466730874 0.12422575 0.399949435 +0.9936442 0.328636087 0.416314179 0.718577523 0.650043776 0.155359872 +0.05732283 0.673645672 0.179923582 0.897633033 0.212207251 0.978486268 +0.320033409 0.086759922 0.036681169 0.376295756 0.513427891 0.617689807 +0.95908342 0.730269917 0.379732645 0.687889995 0.365964848 0.2025509 +0.137340946 0.036195957 0.494637406 0.578018614 0.759113921 0.686797931 +0.538732589 0.772863785 0.071290813 0.59451199 0.447133419 0.222677888 +0.24220195 0.034525702 0.524561124 0.71392605 0.981925781 0.553325013 +0.794914644 0.254335068 0.086034374 0.547456468 0.188433366 0.857495171 +0.158871616 0.593271683 0.739362414 0.226953144 0.012189563 0.11227398 +0.379587995 0.984375806 0.529635821 0.890973172 0.271135095 0.409761369 +0.552120008 0.4041815 0.064652349 0.034262354 0.249491249 0.2710332 +0.483152866 0.043268675 0.802810027 0.80985509 0.999547259 0.175520715 +0.700469063 0.892684207 0.302867747 0.765592107 0.427311699 0.318697627 +0.935814937 0.915437487 0.568695014 0.046962795 0.491903712 0.578081499 +0.400102833 0.07379561 0.921509957 0.390628979 0.179406327 0.679671254 +0.042662947 0.546209906 0.581765505 0.090995637 0.711572952 0.861982842 +0.175512005 0.33801261 0.523787236 0.67039224 0.377445214 0.654078252 +0.024302903 0.765084333 0.624583997 0.305883982 0.706395959 0.063963524 +0.868300862 0.277587673 0.165635546 0.820459156 0.887842169 0.805788794 +0.193853333 0.116890218 0.366772352 0.504937156 0.613143972 0.981237902 +0.708203491 0.646140681 0.970409165 0.090561209 0.73312704 0.226868941 +0.842143224 0.399137099 0.393742468 0.805714266 0.324018467 0.20563905 +0.545054484 0.57520088 0.396215833 0.159852064 0.565201227 0.619759992 +0.039577986 0.804424213 0.451633906 0.631668373 0.047301602 0.946929549 +0.775968342 0.515187138 0.481145631 0.613546936 0.664025628 0.835739608 +0.430945756 0.797791438 0.733921189 0.945894303 0.017416853 0.907805017 +0.816850202 0.629589828 0.69235483 0.716685932 0.73904133 0.407244926 +0.99004066 0.291363178 0.661169888 0.259905862 0.468031153 0.908822296 +0.588605782 0.317661036 0.452221291 0.754309309 0.829862978 0.894409054 +0.412642969 0.396008855 0.24255397 0.426259968 0.226038834 0.168406115 +0.835715637 0.192600317 0.998478951 0.581149998 0.604338575 0.247144072 +0.186558049 0.919680087 0.163239359 0.206987691 0.506285795 0.484755079 +0.55980911 0.11017961 0.046018419 0.370528412 0.781682634 0.5123544 +0.109841602 0.643196139 0.541009099 0.935865317 0.506568191 0.598806354 +0.198109445 0.908077591 0.849504427 0.753828748 0.23109964 0.469692718 +0.277125837 0.437700761 0.631915603 0.23630256 0.366805949 0.892683961 +0.899173456 0.964133337 0.981830246 0.604019543 0.461745615 0.621889279 +0.289296374 0.594123325 0.801314531 0.319280654 0.188797521 0.970317592 +0.203881434 0.857036509 0.517205842 0.653137473 0.385047919 0.458757447 +0.376270811 0.007477432 0.88237 0.826859271 0.617988042 0.581777245 +0.031356695 0.711377306 0.256485419 0.258033166 0.754377595 0.497338595 +0.590460685 0.567717117 0.291840836 0.483904039 0.00986238 0.200276784 +0.617975271 0.890869579 0.865168977 0.106906716 0.609423965 0.507160119 +0.598728395 0.723766315 0.303490398 0.184636086 0.682877105 0.099683869 +0.537392331 0.186279908 0.513585982 0.185100399 0.018540864 0.752913798 +0.440331029 0.331194734 0.411909384 0.118659603 0.561591905 0.16890184 +0.54613676 0.212756502 0.303059048 0.329964364 0.427843021 0.722715398 +0.67248279 0.806058897 0.586180776 0.120526853 0.850006972 0.986368926 +0.426714117 0.017549537 0.830203893 0.800916157 0.542817215 0.585122736 +0.318731464 0.147202366 0.283946931 0.46717601 0.777920279 0.050982481 +0.787555175 0.291922305 0.954686626 0.046660366 0.619884252 0.544629604 +0.561588596 0.248313184 0.090453612 0.529217025 0.040380754 0.614702988 +0.604047593 0.436037403 0.155657168 0.239771566 0.042183601 0.618728497 +0.906120751 0.922833634 0.16842592 0.823568442 0.524628148 0.193925314 +0.884888677 0.180735333 0.041614587 0.655710223 0.09269195 0.060013002 +0.332989027 0.108184219 0.635346113 0.871216607 0.164609367 0.202324905 +0.76804968 0.516003176 0.498225149 0.050717437 0.160898139 0.775266009 +0.845553284 0.2902529 0.839340166 0.676714089 0.050595352 0.548854966 +0.76238679 0.6913739 0.225732835 0.754601894 0.7319579 0.773833881 +0.277741008 0.089270425 0.720081213 0.200903365 0.400538549 0.79758674 +0.541468925 0.199169341 0.897683747 0.021664783 0.537646787 0.441866361 +0.458258622 0.746689684 0.812345411 0.302155334 0.07776424 0.132720903 +0.336606245 0.910134412 0.722296694 0.38172949 0.66199715 0.495152237 +0.685409318 0.248948108 0.691717274 0.508581454 0.899972131 0.842398482 +0.119248564 0.326165181 0.226302524 0.922853921 0.022258736 0.764926494 +0.685212 0.226607619 0.268134352 0.355711672 0.129740155 0.168675425 +0.156849056 0.184184661 0.985834951 0.381455078 0.536457971 0.725203546 +0.978324184 0.198693871 0.639112267 0.838103906 0.305362518 0.949356154 +0.125674454 0.093402081 0.965191441 0.591160929 0.995207252 0.867511948 +0.587508871 0.362471705 0.686515222 0.48666692 0.96776444 0.527183687 +0.040445446 0.16072216 0.498525772 0.79584679 0.859369021 0.201270753 +0.392082812 0.011949823 0.35488079 0.050139304 0.52549269 0.487304805 +0.852441174 0.067846773 0.216080376 0.233889047 0.40385942 0.706254904 +0.660977586 0.521543377 0.171901087 0.736477693 0.558941566 0.838046024 +0.546297338 0.990357164 0.525633411 0.53893973 0.659998309 0.499318873 +0.750392162 0.518816923 0.922644298 0.67664978 0.224013099 0.778251073 +0.692968195 0.089586884 0.525195501 0.256668842 0.542630688 0.053976122 +0.798964128 0.942408471 0.102906194 0.195010566 0.063652275 0.436606586 +0.084397578 0.864708161 0.394646194 0.67144148 0.72044306 0.184590826 +0.901364345 0.355624927 0.748513737 0.486650578 0.436722387 0.815383013 +0.771402877 0.410909895 0.060780381 0.206973757 0.401244075 0.37287174 +0.701104652 0.141164486 0.780916467 0.67051239 0.839012945 0.035667295 +0.19327786 0.109031284 0.089990748 0.427857095 0.442092033 0.389684274 +0.80471917 0.724660608 0.710380681 0.471534551 0.88082742 0.401804075 +0.85955443 0.471909318 0.364203119 0.192726009 0.035092057 0.424274084 +0.02535532 0.050728387 0.538795017 0.005604342 0.226201769 0.202814492 +0.161680145 0.062564218 0.690565116 0.57316733 0.355043174 0.293711148 +0.457696882 0.12631956 0.015190838 0.862045374 0.379981896 0.507248284 +0.660550664 0.554833896 0.397476637 0.81856057 0.812074989 0.872893764 +0.985293361 0.081336131 0.4370545 0.749751229 0.062343406 0.119026668 +0.379883642 0.880539476 0.879387866 0.45715046 0.03841946 0.038580141 +0.380837236 0.630777306 0.563855625 0.501158791 0.146190231 0.898940869 +0.118928045 0.471892544 0.323099436 0.249904046 0.109779942 0.24649412 +0.823271154 0.164953854 0.571537717 0.964738782 0.240125277 0.203217302 +0.590422699 0.53085279 0.590168361 0.650925899 0.208780079 0.135072664 +0.999737727 0.847383661 0.81007445 0.399966814 0.291539819 0.659914293 +0.854388353 0.611888845 0.422461684 0.842847306 0.202220478 0.451399919 +0.066721919 0.671161852 0.754475652 0.183957453 0.374793163 0.655688235 +0.51213007 0.379748951 0.051086609 0.12799787 0.371196048 0.410656312 +0.668072728 0.552005629 0.161244822 0.927583428 0.923797389 0.331190291 +0.710023408 0.214208741 0.520433598 0.601172393 0.310343822 0.588948028 +0.279664399 0.422428936 0.9192861 0.757335786 0.538783089 0.497412663 +0.904110242 0.956257994 0.721901631 0.959259917 0.070683013 0.936035645 +0.235553146 0.057811212 0.016363374 0.915745969 0.01752075 0.47361855 +0.462221279 0.401010373 0.482404284 0.215303518 0.954566555 0.277968616 +0.151264155 0.146554429 0.499703299 0.063422159 0.205095816 0.739490453 +0.551086908 0.668712625 0.42510034 0.866643451 0.241054363 0.7707568 +0.851245572 0.430506977 0.165175774 0.480215501 0.462996355 0.812845015 +0.488143358 0.325549814 0.157678269 0.821659012 0.849060303 0.75209639 +0.463107719 0.156207902 0.206454898 0.617447039 0.311952719 0.299623062 +0.342344312 0.719038213 0.750238081 0.6666187 0.2013416 0.289999678 +0.551663611 0.06553942 0.191545631 0.282330107 0.582122491 0.295847779 +0.810462932 0.861397556 0.721246598 0.493924752 0.893419579 0.39026218 +0.108570381 0.543780677 0.778255398 0.170409451 0.733433789 0.938814955 +0.393182778 0.782715494 0.360911947 0.023744859 0.216260094 0.342015058 +0.480414909 0.884481798 0.20007019 0.541937411 0.990670655 0.020223959 +0.319812683 0.516850981 0.22067914 0.498099401 0.532452322 0.114706527 +0.538784916 0.920296464 0.857420069 0.073498452 0.234209991 0.736739642 +0.128652336 0.165301058 0.542522264 0.211518229 0.95297994 0.260732592 +0.333336384 0.957982499 0.276538727 0.585440717 0.72673031 0.379046533 +0.08455405 0.647381656 0.044991307 0.991035758 0.842978638 0.346173994 +0.757246105 0.461090193 0.642891321 0.449027994 0.749280674 0.527162133 +0.100291039 0.401644706 0.532526122 0.992424587 0.939655144 0.664577298 +0.568032316 0.648417834 0.037795068 0.158220476 0.09916727 0.192644802 +0.043864878 0.937455207 0.331002556 0.312735224 0.849334546 0.894762653 +0.207411336 0.013102111 0.98433499 0.133126572 0.829884729 0.627967359 +0.490560067 0.959830716 0.180045407 0.586353868 0.231422108 0.941387558 +0.351993954 0.587633741 0.902471947 0.143929373 0.768897678 0.859995229 +0.964408231 0.850665823 0.613910931 0.292948344 0.207320081 0.522665314 +0.461690581 0.926307104 0.757917104 0.487248341 0.573981514 0.260768606 +0.22146426 0.127820439 0.59486934 0.594972144 0.456166733 0.121518887 +0.40184357 0.951334259 0.1392866 0.998282097 0.101070162 0.182173086 +0.571159167 0.12797342 0.933545093 0.978268666 0.51956083 0.371453666 +0.797140479 0.822486853 0.488983263 0.119541822 0.106294942 0.600953216 +0.366355758 0.684572133 0.49066264 0.507539638 0.19339713 0.034433041 +0.929012614 0.454116169 0.237316757 0.231286221 0.005299306 0.792046674 +0.320090704 0.107223444 0.728231827 0.082715235 0.852770961 0.514479823 +0.558947734 0.944309676 0.965284818 0.305585909 0.088057308 0.950099759 +0.355602579 0.878492443 0.710157174 0.676143662 0.961966113 0.163864128 +0.019398404 0.133874144 0.343525276 0.454934331 0.588161627 0.758965679 +0.638123051 0.271472602 0.468657705 0.442163738 0.001002194 0.959684892 +0.941066489 0.44403201 0.084239344 0.240197275 0.515953423 0.529230973 +0.723250522 0.636713656 0.574615615 0.357667456 0.158043837 0.744016419 +0.209927568 0.542719855 0.569133468 0.757775853 0.064039495 0.243569255 +0.716773997 0.845431616 0.263364282 0.82230701 0.395835602 0.243926371 +0.458367957 0.716713807 0.45696269 0.440820754 0.876158558 0.869728031 +0.386718766 0.676289264 0.346276495 0.88873121 0.609956927 0.671380478 +0.415762225 0.127413856 0.078567861 0.483556595 0.902103945 0.752400592 +0.149753875 0.466593241 0.342947703 0.611295218 0.650604441 0.055351784 +0.49968118 0.23922555 0.875687875 0.319680558 0.668322897 0.364438855 +0.103151171 0.327544175 0.208616696 0.802521103 0.806401766 0.125216278 +0.253791355 0.663858195 0.587678135 0.352449033 0.78540462 0.318026298 +0.414962548 0.608664744 0.535773421 0.576231594 0.752156674 0.276762609 +0.343335463 0.893279905 0.514004695 0.395690918 0.685597793 0.958553702 +0.827155813 0.902639517 0.3504311 0.149551615 0.194640289 0.093064021 +0.275278894 0.998327228 0.621121515 0.153637723 0.750589335 0.382125209 +0.237615831 0.625447659 0.778889736 0.003593223 0.934744825 0.11272626 +0.161807772 0.346696525 0.659463143 0.063944185 0.554844954 0.403475348 +0.781369971 0.443173361 0.024829627 0.39117727 0.34697541 0.568047333 +0.005891028 0.886046339 0.015710099 0.46798128 0.813225022 0.093406073 +0.262128049 0.984602198 0.214810233 0.453172474 0.595022808 0.683938787 +0.324449784 0.164274379 0.32636723 0.059105849 0.295427034 0.026578973 +0.586985494 0.182546308 0.053508275 0.421750344 0.355167331 0.348025548 +0.223163993 0.61672717 0.526466415 0.903782756 0.434823793 0.633114543 +0.760369105 0.719179219 0.596054161 0.847956851 0.140846243 0.644633578 +0.75730833 0.153231157 0.321644982 0.401586558 0.106344798 0.222553599 +0.043118452 0.310949402 0.435655057 0.507992874 0.126155316 0.78279554 +0.892522212 0.439675796 0.494750186 0.786564952 0.557047661 0.016844782 +0.043478974 0.005412233 0.012897292 0.618264411 0.874291193 0.585806119 +0.203316872 0.490596864 0.254768587 0.562354049 0.113171642 0.698224902 +0.462706262 0.481828436 0.083731756 0.000689673 0.484436747 0.700875079 +0.610870618 0.064401775 0.053695098 0.925119524 0.512911452 0.012268864 +0.608743794 0.701424185 0.499126362 0.952289598 0.806297578 0.980843878 +0.741498166 0.746007513 0.850229658 0.82112773 0.375253562 0.656578858 +0.224229518 0.094003293 0.153551718 0.996551213 0.291405232 0.965506525 +0.161541091 0.700271684 0.069667325 0.85509003 0.240868558 0.783139101 +0.364713017 0.021364073 0.504394444 0.763470124 0.471991905 0.191591249 +0.380522487 0.203755112 0.232698473 0.849289342 0.243482877 0.498842106 +0.719810673 0.571247532 0.331988319 0.292258137 0.249442035 0.277376432 +0.958203061 0.988702519 0.48764403 0.231847289 0.847536801 0.403322794 +0.710010705 0.828810861 0.809509893 0.513601139 0.478556951 0.063740273 +0.203360534 0.551999219 0.081239367 0.764037642 0.48439683 0.822827361 +0.85672276 0.434518526 0.550839716 0.829642891 0.198921627 0.966602073 +0.634040988 0.190496975 0.358878264 0.182090126 0.183371563 0.267968649 +0.88538689 0.689555023 0.521131428 0.872878068 0.011786578 0.68837118 +0.640685968 0.900506151 0.436075442 0.80394994 0.980152588 0.543203343 +0.575569394 0.054488302 0.244968766 0.570125281 0.541846949 0.156564461 +0.222842079 0.120439645 0.91958576 0.215308914 0.545342957 0.569920076 +0.090462617 0.292297191 0.557565887 0.462673871 0.4733473 0.976456883 +0.006541644 0.970083048 0.014889944 0.010346582 0.598713838 0.153195474 +0.986601241 0.994872401 0.568190689 0.51803192 0.984104642 0.951538213 +0.080906118 0.421768054 0.815054539 0.659009231 0.49179988 0.301375674 +0.070354856 0.483785276 0.638050971 0.776400829 0.656234358 0.68013589 +0.221287985 0.52804347 0.627941454 0.146092268 0.67791334 0.432321772 +0.117298287 0.159090985 0.459162523 0.190380295 0.198966407 0.784709365 +0.363823336 0.748681998 0.084535789 0.466837575 0.077332494 0.40855785 +0.295194487 0.965661897 0.865866393 0.141486236 0.060236715 0.664470443 +0.263507062 0.446240279 0.888811134 0.200053876 0.249720456 0.830730505 +0.816290148 0.976319929 0.570974883 0.407401989 0.220163508 0.854193451 +0.360954599 0.630669706 0.721963523 0.555789273 0.403918483 0.355416253 +0.140242136 0.426327785 0.850399039 0.796337857 0.586743828 0.952072486 +0.622566522 0.475362316 0.85430438 0.820628973 0.385005834 0.635814942 +0.754549434 0.879451535 0.054953586 0.032827252 0.355843739 0.548489285 +0.250432851 0.273394885 0.310721172 0.43169257 0.395877874 0.85364455 +0.563625614 0.754770883 0.398949409 0.652709309 0.050998858 0.966801256 +0.373106253 0.039070012 0.935347447 0.413002736 0.402226193 0.468614347 +0.704870729 0.394586703 0.929137743 0.152543445 0.771848158 0.673745438 +0.840140545 0.651295933 0.533166167 0.07318872 0.973646897 0.534721226 +0.827512878 0.393928379 0.914459218 0.284888943 0.45309623 0.477407089 +0.326700196 0.133838217 0.302092364 0.172940248 0.238909969 0.702547109 +0.843181196 0.628560874 0.171098065 0.198139952 0.173492764 0.80266577 +0.02188454 0.949447679 0.830559353 0.905977957 0.500002313 0.955685718 +0.244397819 0.78580466 0.632368209 0.133765575 0.789056609 0.69779122 +0.852244094 0.273773906 0.583581151 0.926294394 0.818828642 0.07260882 +0.17478558 0.952018332 0.326012966 0.61404333 0.262087246 0.517102206 +0.84058481 0.029816211 0.819140845 0.641683525 0.318403943 0.467152444 +0.852889706 0.734305694 0.121523694 0.959612785 0.964165965 0.984108699 +0.876970772 0.597285339 0.47836999 0.266044403 0.59707585 0.727916702 +0.600599143 0.452963218 0.038042681 0.348058296 0.67367111 0.399001327 +0.618851936 0.550802271 0.702546786 0.017834163 0.379468859 0.696883785 +0.523787754 0.055832112 0.359004109 0.807619848 0.072097827 0.430041029 +0.039810178 0.238650511 0.437712064 0.540547197 0.046148257 0.956599076 +0.107986555 0.100556567 0.466174534 0.277564863 0.088852284 0.749882666 +0.368124402 0.329566458 0.717808599 0.86673752 0.663123877 0.455307716 +0.706739707 0.796105704 0.94219823 0.044893787 0.722466241 0.142266027 +0.723870143 0.678168841 0.735335867 0.928916594 0.262183234 0.930247481 +0.886339436 0.888212171 0.941956627 0.907888936 0.702631822 0.329813447 +0.286821762 0.591903047 0.785856917 0.729576984 0.906104391 0.815497286 +0.325023249 0.402867975 0.14341965 0.27389299 0.855689755 0.219491141 +0.884867306 0.700752044 0.532680039 0.744660267 0.789217827 0.286747976 +0.344570345 0.578409752 0.873537471 0.237038076 0.058864806 0.407462147 +0.939549013 0.24846682 0.68382936 0.426663549 0.168133026 0.721928737 +0.751769101 0.251556932 0.314288909 0.122761137 0.287224422 0.090523662 +0.974760169 0.133233906 0.948048631 0.790706111 0.738127118 0.340957234 +0.412618782 0.738947925 0.138272469 0.302437897 0.321704745 0.067010845 +0.622461553 0.75786216 0.048278354 0.373426019 0.558521554 0.598097828 +0.845663989 0.679529996 0.212765736 0.890747997 0.48224959 0.342168259 +0.217228442 0.488580771 0.861407073 0.304352448 0.335958097 0.525425749 +0.931427049 0.029173551 0.163608393 0.402606721 0.01675337 0.179697282 +0.121658713 0.795175423 0.45413255 0.937931972 0.749500751 0.174615531 +0.253604827 0.395383917 0.941241589 0.587717028 0.842575695 0.757950784 +0.510703335 0.325568484 0.811970612 0.829411049 0.279365294 0.421617215 +0.52364424 0.148020713 0.208005676 0.185730454 0.228207185 0.000331584 +0.914469566 0.555565691 0.473037748 0.831973956 0.834144755 0.281333128 +0.002377693 0.364597743 0.029982358 0.410190098 0.711023255 0.060292151 +0.682822655 0.645926778 0.93668562 0.625772456 0.234310284 0.123092197 +0.626848289 0.788415891 0.905911231 0.926750723 0.929653831 0.48119725 +0.365988463 0.693521252 0.801812484 0.876546778 0.572139097 0.342287418 +0.243356178 0.158458626 0.353606451 0.292970338 0.256410418 0.486494294 +0.337470239 0.076920403 0.111376173 0.602362742 0.262909974 0.096038462 +0.790110438 0.733153315 0.050217914 0.156381401 0.305734781 0.752772896 +0.757018709 0.747722603 0.352120394 0.652977866 0.154929007 0.957402898 +0.137340093 0.078566623 0.12962049 0.318867886 0.025943488 0.073702998 +0.842742327 0.555860064 0.28640016 0.778301707 0.502215571 0.335686745 +0.299318786 0.367472659 0.214551625 0.577803451 0.393383265 0.461687831 +0.046433344 0.12684072 0.897833183 0.906131608 0.413705715 0.19562771 +0.632969489 0.082941621 0.133477508 0.498442896 0.32410469 0.459610504 +0.09726613 0.244058758 0.715020029 0.78329677 0.165092534 0.814472279 +0.776809886 0.516375653 0.299548777 0.907192918 0.072100228 0.901876537 +0.102260894 0.489342092 0.403078531 0.531436688 0.078493833 0.341959711 +0.027459398 0.341682869 0.458346779 0.491462209 0.709493771 0.654189866 +0.01650718 0.622305737 0.467024581 0.970588452 0.715579441 0.770274261 +0.947115736 0.650418637 0.313767019 0.735616714 0.671694829 0.150999221 +0.949068698 0.222456626 0.676163793 0.719073384 0.059910937 0.307697928 +0.598697513 0.603391219 0.164163671 0.601814231 0.925222263 0.085917884 +0.891802206 0.396170435 0.036937853 0.756346591 0.655566801 0.149361233 +0.258179607 0.117853865 0.075593478 0.43395179 0.759051692 0.140132978 +0.057230089 0.592981267 0.556402269 0.821788531 0.814127083 0.577012468 +0.609085503 0.597659239 0.959506062 0.64301379 0.943288435 0.070937032 +0.266398263 0.35309126 0.205546047 0.218958944 0.59382542 0.955717222 +0.648780426 0.950086103 0.963370016 0.316124277 0.145595421 0.67132526 +0.626923187 0.690582981 0.4031614 0.826257686 0.205522258 0.014503413 +0.038393914 0.053643137 0.934763625 0.003545013 0.371853535 0.67454645 +0.193674676 0.419891134 0.605281148 0.500955704 0.3936117 0.58468791 +0.210875618 0.798408318 0.478376292 0.668233095 0.641813614 0.26418417 +0.66468103 0.977652999 0.432895488 0.238503227 0.541810832 0.893583561 +0.04249142 0.314913695 0.894673166 0.858204407 0.793016503 0.692127083 +0.75523569 0.55442753 0.301238515 0.62253147 0.489601706 0.761841597 +0.7022816 0.861502193 0.256317466 0.699348443 0.178937879 0.384329852 +0.555856321 0.290723761 0.926652288 0.106015022 0.680491706 0.947061631 +0.76458757 0.350898844 0.942222032 0.934007263 0.006489054 0.223033316 +0.968315808 0.99137454 0.226987136 0.629004831 0.462868069 0.493126057 +0.475940474 0.713350291 0.832334545 0.025960051 0.222930553 0.952955788 +0.697184515 0.70746933 0.915035938 0.522910588 0.667983795 0.109468346 +0.552084974 0.62699875 0.444436874 0.671672007 0.360245965 0.452642152 +0.736900258 0.754969454 0.568367955 0.860901456 0.643394274 0.340128019 +0.177694024 0.658720658 0.886700169 0.133039655 0.144535452 0.333112787 +0.366394892 0.670767648 0.485090133 0.378754501 0.967882391 0.81662775 +0.015760878 0.12819599 0.476997629 0.390351411 0.299745403 0.035255933 +0.508134315 0.983093269 0.388181366 0.105990316 0.005856459 0.119673751 +0.469582844 0.179263164 0.501284911 0.231876176 0.183210459 0.679968214 +0.116259719 0.787639867 0.951620933 0.857524534 0.170384825 0.516879586 +0.69573161 0.048154821 0.13480383 0.436276667 0.918983268 0.517957127 +0.155482167 0.71545916 0.416677557 0.704326 0.428358544 0.41697653 +0.756867975 0.573666086 0.409483661 0.715132279 0.376976957 0.819904854 +0.501320312 0.621066365 0.018797251 0.248338781 0.537818907 0.071623629 +0.010781359 0.06887577 0.045723369 0.945189755 0.512962829 0.023847057 +0.357805162 0.539631874 0.473571275 0.739274338 0.577324945 0.447674718 +0.397478338 0.964468415 0.516629904 0.789430521 0.176254337 0.768755046 +0.277055204 0.030651475 0.241768713 0.874701059 0.968833578 0.841368435 +0.633721704 0.780991458 0.097024379 0.00298061 0.85455757 0.425492029 +0.186601758 0.351162157 0.321375411 0.916852617 0.252646325 0.874910965 +0.319284262 0.671658022 0.6991681 0.595646187 0.919238008 0.206307385 +0.831815675 0.744479265 0.487468359 0.918134502 0.568387704 0.207946968 +0.803790324 0.029582517 0.318987257 0.561009754 0.075740348 0.824677151 +0.876170776 0.085270245 0.083745879 0.499263076 0.231182773 0.707280897 +0.001841789 0.79017654 0.535144801 0.312082675 0.953252784 0.728001592 +0.42933063 0.93763558 0.802606001 0.305626196 0.271120605 0.426763273 +0.363939811 0.90896503 0.40994227 0.394757627 0.677222834 0.566279922 +0.075606159 0.056124151 0.143912261 0.972739132 0.360628943 0.484461925 +0.989798336 0.301193143 0.770413812 0.341385352 0.96070962 0.378345414 +0.632605406 0.391931944 0.981149622 0.711999506 0.193884983 0.090480565 +0.432176649 0.311497204 0.427292941 0.783506973 0.590127085 0.152354447 +0.86868364 0.392670016 0.724847259 0.576988336 0.060137099 0.204868292 +0.592079088 0.339597294 0.7994106 0.693529565 0.701788744 0.680893799 +0.783363017 0.941602064 0.158505452 0.916791534 0.442814066 0.144549574 +0.177934145 0.063265686 0.991001408 0.088452345 0.872683426 0.894601868 +0.917435031 0.994502591 0.136864036 0.456239515 0.699201371 0.559199025 +0.974550723 0.56578605 0.688214748 0.190870861 0.537181011 0.206184414 +0.98788072 0.713735147 0.104034617 0.310661369 0.232013976 0.613068583 +0.934960037 0.292375724 0.42122404 0.334644516 0.572943271 0.897053025 +0.523683291 0.431864564 0.576330462 0.027996301 0.343479557 0.670152768 +0.717565811 0.262264304 0.240209236 0.210952575 0.795608355 0.10743245 +0.820410849 0.739428234 0.652105147 0.56691401 0.910415156 0.352505004 +0.919672073 0.839613752 0.849876886 0.6650052 0.689411607 0.188624021 +0.241238825 0.611088467 0.77028008 0.461596039 0.913708917 0.971362824 +0.569368474 0.992829032 0.80892 0.903676476 0.7467928 0.232426951 +0.501085093 0.542151449 0.421043231 0.604161429 0.86324481 0.708764947 +0.650654262 0.06054005 0.258449214 0.176689574 0.247369591 0.290886075 +0.518422991 0.222233304 0.574192738 0.88828375 0.859683316 0.434091626 +0.169365688 0.701537864 0.029519965 0.460673125 0.700132129 0.32419562 +0.099366799 0.093297782 0.427504775 0.957435577 0.673067317 0.999503951 +0.777496096 0.761462672 0.43959338 0.347255358 0.680563965 0.030029039 +0.425889285 0.407145187 0.561731103 0.700405925 0.148964175 0.211847588 +0.992411515 0.334342027 0.550976073 0.100176706 0.151080213 0.952416282 +0.322455458 0.676576559 0.420194175 0.914480308 0.847977712 0.873788194 +0.262352661 0.12690985 0.483707471 0.342325623 0.110040137 0.796554544 +0.3728778 0.417448584 0.500992085 0.532457999 0.930153719 0.072173516 +0.552741163 0.710863629 0.557898528 0.117792011 0.639913345 0.034844773 +0.891967115 0.896413514 0.39336796 0.878355474 0.973308885 0.146270014 +0.39187087 0.498426602 0.737371598 0.773333831 0.120559197 0.358368104 +0.816486308 0.565995211 0.797206219 0.407963932 0.816745982 0.027173614 +0.490654379 0.253869189 0.059450863 0.117615091 0.520920672 0.021559682 +0.585423837 0.972136605 0.766683629 0.498360568 0.263191428 0.783385102 +0.719317313 0.595091565 0.624319541 0.472269322 0.570424663 0.126691602 +0.637640055 0.734298699 0.178246482 0.631534426 0.009219934 0.075159887 +0.361852631 0.067807141 0.540539492 0.603370798 0.271007767 0.898236599 +0.714396707 0.655506532 0.76693258 0.349160963 0.048747048 0.146989169 +0.669267787 0.505309087 0.572546544 0.268055982 0.592757663 0.129289008 +0.557945465 0.367232416 0.317930541 0.655621343 0.64769653 0.343747249 +0.482107887 0.563943684 0.075166634 0.894798182 0.71006833 0.773521428 +0.650932577 0.049125052 0.793486332 0.675385582 0.323825947 0.775528109 +0.534956431 0.177191083 0.620073127 0.570179106 0.76856747 0.066805603 +0.891038858 0.248286642 0.461732969 0.529120794 0.13287068 0.648425365 +0.83139172 0.936041727 0.651255219 0.712582141 0.50993888 0.493599519 +0.465237789 0.455148761 0.305024437 0.654487924 0.510725636 0.673129616 +0.374341426 0.848131675 0.520435386 0.911018187 0.804401713 0.348763547 +0.728138765 0.751533401 0.481401766 0.510500723 0.702562818 0.772715366 +0.20714931 0.645546624 0.696546603 0.877731918 0.341387364 0.899363468 +0.341720214 0.182346658 0.327098942 0.568561427 0.920468057 0.903761249 +0.440901449 0.056614976 0.625944594 0.016363842 0.215376788 0.207220702 +0.005515075 0.247224875 0.975810289 0.311347877 0.083181402 0.098427662 +0.717764287 0.678094707 0.425784299 0.188626035 0.027545071 0.32927151 +0.291509178 0.162327807 0.586765353 0.015470796 0.92354693 0.786569571 +0.199745438 0.939918377 0.337657621 0.002403919 0.018693394 0.819784391 +0.434937218 0.266093678 0.03204396 0.658482847 0.911997318 0.772766484 +0.587881868 0.836896876 0.454357625 0.554531769 0.758130866 0.870277139 +0.080268344 0.595708629 0.065026708 0.089702913 0.778753494 0.799206017 +0.792509561 0.781841329 0.071384884 0.113225688 0.421186405 0.917920897 +0.396164118 0.472249351 0.659723904 0.221756742 0.594192534 0.397390345 +0.180747865 0.671573313 0.228293907 0.008329024 0.326380147 0.951482125 +0.407374132 0.05620782 0.247371544 0.533790979 0.0227161 0.663752335 +0.103278633 0.126554136 0.655146039 0.667477641 0.917038813 0.552457619 +0.75025772 0.664371564 0.882779199 0.699639618 0.09804198 0.982073353 +0.628257312 0.261202477 0.102655976 0.815491215 0.622072589 0.916841817 +0.080466211 0.989124106 0.249064939 0.250904669 0.888550526 0.457732862 +0.984114998 0.436018022 0.79445038 0.329018736 0.457921098 0.556157733 +0.022344509 0.053914065 0.427522614 0.237926392 0.626565953 0.591913277 +0.679903273 0.479176967 0.851999207 0.900194695 0.661697711 0.577136919 +0.630331989 0.983145518 0.301215634 0.681043553 0.661031767 0.505362499 +0.625357093 0.573499874 0.848935377 0.095292378 0.882991746 0.830336493 +0.160372996 0.201022415 0.334996022 0.268447429 0.505020913 0.530140383 +0.610238383 0.830292007 0.001429676 0.043031571 0.882476415 0.431256292 +0.554479329 0.210566936 0.135582481 0.708951579 0.276688254 0.333782949 +0.102905028 0.58714093 0.275489792 0.851656496 0.968792854 0.557589836 +0.840908885 0.18908079 0.115199015 0.220862767 0.69259408 0.879482756 +0.909557397 0.877385528 0.784407263 0.266906591 0.750343343 0.034180702 +0.714360528 0.022579694 0.64441254 0.924872799 0.160787551 0.194559231 +0.684623544 0.027331936 0.805758952 0.738265907 0.330547867 0.162225778 +0.171489728 0.206503583 0.010215308 0.037160828 0.705006784 0.626414371 +0.692031267 0.217205679 0.031181793 0.981514434 0.336439958 0.26251686 +0.050921278 0.890604108 0.427808917 0.654215141 0.219525021 0.612630252 +0.211778383 0.441449644 0.098843665 0.56027352 0.787332688 0.999132674 +0.737547725 0.797161296 0.743475721 0.534455915 0.678102109 0.935023057 +0.86746031 0.28463356 0.45031393 0.004200706 0.52837351 0.34111274 +0.128081972 0.106063513 0.376401493 0.68219938 0.496896812 0.914009463 +0.117537989 0.680790452 0.840094902 0.233937318 0.928660321 0.783032831 +0.455368806 0.669573736 0.475643757 0.700838983 0.634073061 0.905037704 +0.863325188 0.167042559 0.102022347 0.475479042 0.945799642 0.205489234 +0.152758202 0.514181329 0.640008987 0.121013419 0.042438214 0.805251119 +0.131561558 0.070584713 0.863316271 0.655719995 0.642654934 0.560830001 +0.71836186 0.559132971 0.566658298 0.073884915 0.457244811 0.988182636 +0.645703734 0.90353099 0.561795118 0.661649799 0.612824302 0.002822132 +0.82111009 0.044346768 0.421471303 0.650376297 0.29505969 0.036677304 +0.388178681 0.01500349 0.525140819 0.321855419 0.674256952 0.511226505 +0.087519846 0.583130518 0.088208487 0.388957841 0.452784516 0.100873886 +0.873680975 0.132666226 0.234237773 0.791031261 0.822682124 0.307485172 +0.354946144 0.084618895 0.26510865 0.405917077 0.296999337 0.731597606 +0.495404475 0.481066396 0.021636255 0.717512102 0.425334934 0.202341779 +0.013881552 0.761621962 0.831429116 0.952535255 0.676404259 0.755622494 +0.625909118 0.558680027 0.653397227 0.334974879 0.763025621 0.507282604 +0.202117694 0.510109308 0.00443095 0.601440464 0.730232762 0.478351442 +0.794044689 0.612097109 0.513124147 0.556592755 0.363539564 0.720373351 +0.454970997 0.147334398 0.524194342 0.617848418 0.690397188 0.722338513 +0.623382675 0.693155502 0.932800712 0.65505726 0.422066106 0.465313073 +0.286884374 0.544384095 0.730227854 0.427514908 0.209575826 0.529735455 +0.982025898 0.639210412 0.562530238 0.707897117 0.386242906 0.070714621 +0.239140904 0.991087695 0.963567572 0.150194641 0.036352866 0.250225113 +0.201670908 0.335557792 0.464570707 0.146237602 0.195666611 0.932193252 +0.84836532 0.641030621 0.254317135 0.910978825 0.668321519 0.45265614 +0.521312335 0.415607154 0.357228011 0.047532552 0.727230345 0.218240661 +0.52721506 0.424924652 0.402170807 0.64774549 0.806480397 0.754488833 +0.597574256 0.143657139 0.299497408 0.711686598 0.962986722 0.960851301 +0.874027895 0.073080409 0.777197233 0.020626207 0.808808369 0.984791531 +0.627801253 0.776277278 0.388963641 0.123930263 0.838705342 0.678637282 +0.394802291 0.31291669 0.574885976 0.564315668 0.563789056 0.194029409 +0.062542526 0.360515725 0.846662237 0.589198651 0.144353056 0.3060646 +0.648974639 0.78524863 0.272735346 0.390620905 0.578811034 0.708274728 +0.716668553 0.207868069 0.084101157 0.199415871 0.741303359 0.886641752 +0.797992845 0.266084232 0.517315184 0.79186849 0.478606365 0.045718023 +0.126556339 0.379422407 0.873321001 0.132243219 0.454916289 0.027872135 +0.488794387 0.921618257 0.444903942 0.074734923 0.409619868 0.112178495 +0.078549417 0.577526932 0.129228902 0.063996299 0.372018074 0.049893959 +0.999846327 0.239191418 0.432622012 0.657122967 0.565582895 0.332106502 +0.761291136 0.600698684 0.548264484 0.566593072 0.982731646 0.113278364 +0.452251611 0.811951908 0.111241641 0.931238568 0.623847747 0.819855528 +0.500252302 0.943004902 0.935059989 0.699358825 0.695890542 0.235966424 +0.306900354 0.764103399 0.9862568 0.048878886 0.744501691 0.196963823 +0.175522469 0.871708527 0.928936008 0.855043061 0.899614873 0.463409764 +0.493477531 0.401142417 0.444388661 0.12873515 0.328556837 0.290974048 +0.614900544 0.084692257 0.131621754 0.632415659 0.622111876 0.094095196 +0.433234181 0.902571395 0.083753003 0.171940729 0.409568194 0.76871166 +0.241221456 0.458129472 0.440138799 0.273379818 0.518465852 0.699761667 +0.867684091 0.106365907 0.60722673 0.214090595 0.828966574 0.257693047 +0.33212096 0.228133739 0.425902296 0.147122663 0.790236591 0.897320562 +0.257902399 0.690651469 0.070643136 0.321170733 0.095632902 0.12227656 +0.587974527 0.617613158 0.640155368 0.191304352 0.857412842 0.371194571 +0.519784802 0.028840237 0.13210545 0.652073985 0.669231351 0.753639977 +0.501956053 0.286332927 0.512759426 0.790013026 0.942614631 0.090531488 +0.201805958 0.426038594 0.550339863 0.923786127 0.454184922 0.155504074 +0.492998426 0.486139012 0.679961816 0.417249598 0.313456989 0.421027651 +0.258110986 0.844500441 0.134646275 0.652068568 0.767592739 0.910617685 +0.925339363 0.419707143 0.971793612 0.928653539 0.284906667 0.690044463 +0.75262465 0.384669864 0.665515885 0.505988198 0.583843142 0.986415315 +0.768184881 0.274469367 0.247634313 0.652711495 0.466813928 0.293969945 +0.855734678 0.083111236 0.185654374 0.706167731 0.66695643 0.776502293 +0.937138196 0.129528562 0.353786738 0.126644663 0.214174007 0.280126559 +0.090304609 0.397164072 0.901287408 0.928216879 0.550649552 0.914225081 +0.985505245 0.622981082 0.832824131 0.243911648 0.211462371 0.393687023 +0.396520675 0.808907471 0.621512478 0.117515136 0.931172876 0.954645642 +0.035875028 0.621902768 0.8822786 0.678721704 0.471480612 0.494835782 +0.053436364 0.345794015 0.499084297 0.603969877 0.494184944 0.769056841 +0.838591798 0.735461498 0.761813528 0.791681705 0.086149825 0.67329617 +0.770870311 0.883339205 0.033342645 0.080017455 0.220227214 0.187741323 +0.40078859 0.804290884 0.524230651 0.599125523 0.671007846 0.347167888 +0.077263112 0.799540148 0.207296776 0.75104882 0.70107003 0.375566043 +0.18892806 0.425114092 0.937345125 0.7275717 0.089886729 0.893277107 +0.265550656 0.483696829 0.258535073 0.60602813 0.522426632 0.194627573 +0.556902557 0.200850237 0.90335717 0.815279992 0.587065943 0.079969961 +0.978798323 0.080340166 0.94897387 0.070154031 0.559521491 0.938431936 +0.36202746 0.666154886 0.601499659 0.167338191 0.62039393 0.939671877 +0.065494269 0.900024307 0.784562368 0.467995887 0.984636443 0.586551451 +0.354939508 0.261438529 0.703897804 0.630190396 0.331056517 0.128769529 +0.174491113 0.244332548 0.791572355 0.12838183 0.116875194 0.667860097 +0.062607706 0.092864738 0.725959261 0.167424966 0.146196341 0.52766177 +0.555688848 0.536270613 0.391242577 0.855404366 0.905457239 0.366784149 +0.389332248 0.879460421 0.057094021 0.681971031 0.747367656 0.510931432 +0.007937321 0.384635532 0.429338081 0.256509889 0.019988872 0.057382924 +0.521401653 0.249366555 0.803033059 0.204617535 0.581124008 0.780295909 +0.85227653 0.638463878 0.551098436 0.33440437 0.508317342 0.681004411 +0.617692795 0.690673362 0.499850463 0.434492213 0.067698034 0.180093051 +0.54779293 0.636843615 0.300368329 0.985700382 0.182612744 0.257989539 +0.131977009 0.800148282 0.831103644 0.671688831 0.83172762 0.25262542 +0.462758065 0.092371904 0.983711673 0.231657797 0.888375369 0.226310485 +0.351333402 0.773256369 0.722928352 0.217202118 0.853840923 0.285494452 +0.835608305 0.528926723 0.93707161 0.697793309 0.048669541 0.222980991 +0.809871428 0.51334073 0.283407877 0.595503574 0.081239416 0.3936149 +0.077855088 0.786653231 0.183527456 0.734919498 0.360409694 0.587934757 +0.189639825 0.566405855 0.874425999 0.931794002 0.919938167 0.062892661 +0.821049872 0.542390657 0.377878826 0.036147976 0.510259929 0.33355935 +0.901930306 0.175248113 0.707863899 0.480547893 0.77687527 0.233430607 +0.76880713 0.779883292 0.551650164 0.656161971 0.013632767 0.198140674 +0.57956542 0.06136996 0.126982601 0.573889895 0.354400549 0.496527211 +0.572308138 0.993533786 0.886589546 0.8609994 0.7226333 0.094380226 +0.808932242 0.836412983 0.722314816 0.145528266 0.758722553 0.095617972 +0.502505835 0.935988568 0.448037519 0.681145015 0.979455036 0.054702348 +0.717684127 0.035711879 0.227157621 0.389097692 0.232660669 0.324574638 +0.666863638 0.966836739 0.710016346 0.008887366 0.240418166 0.691172911 +0.101854642 0.525194302 0.517001761 0.794382501 0.62418128 0.892643912 +0.713425823 0.781734418 0.796080805 0.943367566 0.855468261 0.324895029 +0.48459107 0.722085001 0.562183582 0.960982356 0.364527129 0.885337124 +0.52886454 0.258193641 0.655328623 0.018149905 0.026106482 0.311471522 +0.157814078 0.878816713 0.112833633 0.330398755 0.799198282 0.128097638 +0.817133835 0.154703156 0.248570917 0.338056265 0.840716779 0.877456086 +0.497910857 0.750225591 0.753610738 0.014159038 0.766303719 0.052189381 +0.066713447 0.258719881 0.204321141 0.193671771 0.584995911 0.816671498 +0.609324379 0.204060777 0.009836795 0.458004967 0.189605656 0.796770455 +0.838254908 0.761345633 0.418050564 0.199127499 0.129549049 0.513185641 +0.190621429 0.559427682 0.532779772 0.232734329 0.427600632 0.558902766 +0.985964306 0.232321913 0.631242895 0.280134063 0.555152019 0.598795848 +0.633220419 0.601735572 0.27816939 0.08080341 0.204827695 0.808358242 +0.274869138 0.884359514 0.592927728 0.013626216 0.590368568 0.453269732 +0.762226901 0.522149717 0.146904547 0.264983951 0.571430921 0.33641563 +0.69870044 0.942318743 0.274277145 0.489679347 0.104773139 0.875223984 +0.216538652 0.683256236 0.673851096 0.240814917 0.431098513 0.055928615 +0.805584487 0.12216371 0.122842199 0.604119256 0.596895244 0.803378065 +0.118137091 0.867801277 0.658841946 0.311980081 0.086434919 0.565062087 +0.909565045 0.616818587 0.358473779 0.743240736 0.957589391 0.686526881 +0.718480199 0.937873649 0.028846414 0.416873984 0.249592172 0.937715886 +0.035562926 0.455060115 0.630247674 0.851083741 0.784060175 0.789946905 +0.777264728 0.088611316 0.757885181 0.244031627 0.103520492 0.914694338 +0.979985153 0.421887656 0.875167116 0.48253701 0.895770054 0.951475428 +0.49857706 0.987086836 0.193415988 0.615279567 0.608331516 0.654611152 +0.233126181 0.039070006 0.182829575 0.638961156 0.91239571 0.8249765 +0.791607544 0.734052081 0.614256676 0.399280277 0.646685358 0.935432266 +0.18050664 0.597890791 0.977002036 0.608393567 0.930272398 0.61755037 +0.883739557 0.91769353 0.674834455 0.904030029 0.545760411 0.372454212 +0.577791 0.515676216 0.237245768 0.617041774 0.300253514 0.145451125 +0.124847269 0.753583307 0.360609367 0.256188513 0.031616865 0.684136272 +0.352634938 0.156452472 0.333316166 0.237452588 0.681299735 0.221203288 +0.306214263 0.136447056 0.635470651 0.181525887 0.532777285 0.902585143 +0.48566335 0.91436549 0.394846481 0.965476424 0.050136759 0.665099363 +0.208073447 0.208368328 0.946606125 0.59266852 0.754196609 0.378462888 +0.394535993 0.811924593 0.018901801 0.37299914 0.36983794 0.952676932 +0.308394331 0.55472666 0.351860218 0.948171649 0.585614439 0.228882513 +0.798822108 0.267532224 0.675652272 0.351324015 0.926271811 0.754786184 +0.711037358 0.958489085 0.01283838 0.740101526 0.47414681 0.454386977 +0.365692823 0.889970671 0.269090442 0.275099965 0.819599716 0.570137405 +0.722557734 0.611654553 0.250954201 0.314508221 0.294764901 0.208217565 +0.87720553 0.989660953 0.705511899 0.845668824 0.292923212 0.25809267 +0.506212358 0.13592617 0.413463743 0.665902685 0.641304116 0.940924491 +0.99846835 0.053395576 0.94901718 0.734762182 0.860357898 0.582244671 +0.791399955 0.946267007 0.968364427 0.146764343 0.217268965 0.380872707 +0.264169148 0.096054178 0.00765845 0.412918069 0.671406132 0.549838394 +0.612268419 0.980422324 0.421089274 0.753751127 0.713477637 0.342621564 +0.644382746 0.010275836 0.690139019 0.834467437 0.214790466 0.560584272 +0.499115781 0.763320733 0.68895909 0.369050209 0.484932312 0.212417525 +0.117820854 0.423531853 0.598428995 0.590153439 0.049342006 0.862216283 +0.366741661 0.670009668 0.062214047 0.62800747 0.933149411 0.694391569 +0.787924213 0.596957436 0.795407849 0.230441998 0.531820603 0.99356961 +0.940842102 0.40925864 0.937575112 0.069027275 0.005881719 0.319791438 +0.536220285 0.700957294 0.0987574 0.830511804 0.317961424 0.773635047 +0.355510764 0.210545278 0.830022049 0.017311521 0.95805495 0.395087036 +0.00098706 0.864963372 0.506879331 0.43920951 0.638886372 0.086835636 +0.766498783 0.633189737 0.258811158 0.95846401 0.15181916 0.756942979 +0.199173079 0.8425694 0.50634705 0.066258053 0.73631503 0.624689022 +0.415451382 0.738410776 0.072058633 0.73995905 0.564003596 0.819150839 +0.742288909 0.10174087 0.164363598 0.445357648 0.421797647 0.675913082 +0.802264309 0.284434254 0.96144204 0.609559015 0.465967243 0.893310337 +0.736339364 0.134018484 0.635076379 0.255904568 0.473985963 0.783181246 +0.738794943 0.925511279 0.824212797 0.503130646 0.732540374 0.236678208 +0.716085337 0.720913073 0.857884465 0.712807928 0.205483761 0.49542279 +0.529588396 0.82881972 0.037143864 0.262859599 0.541818318 0.203944048 +0.824805735 0.99939121 0.906277977 0.539622576 0.569571941 0.873261721 +0.098969083 0.122799398 0.010981727 0.134127316 0.8439238 0.974124524 +0.388902239 0.822800825 0.236805693 0.896933901 0.895609245 0.264310323 +0.072655428 0.94422734 0.810857664 0.355460868 0.438253985 0.376782334 +0.420995565 0.753085035 0.850670329 0.632789199 0.201637545 0.002727602 +0.527288609 0.331000755 0.431621498 0.017762387 0.267279806 0.602380273 +0.578821798 0.861599051 0.73687226 0.84487937 0.815372064 0.904006538 +0.063976259 0.448174113 0.500738905 0.223249412 0.85174419 0.950984751 +0.715050396 0.200574852 0.213071858 0.428479511 0.800958005 0.055950473 +0.366915239 0.226542867 0.101399338 0.546247272 0.828229089 0.827247141 +0.96931037 0.715772792 0.080253114 0.694030715 0.885620792 0.086201563 +0.922921395 0.109916972 0.400158499 0.028479792 0.476873087 0.831471812 +0.93001093 0.104126333 0.949485261 0.932383698 0.001505828 0.051597931 +0.050230276 0.545380663 0.484930339 0.756400614 0.453457747 0.568638033 +0.789368919 0.883744597 0.299325781 0.99442741 0.20460472 0.291444389 +0.344541819 0.555410007 0.97534262 0.661173289 0.548474131 0.072469094 +0.94488596 0.891868933 0.691634418 0.81695907 0.713614765 0.496311016 +0.296512642 0.798000043 0.307889455 0.296907991 0.099213996 0.799930738 +0.290949098 0.546499495 0.255089916 0.878214025 0.536401301 0.816050546 +0.937413332 0.701196913 0.397504096 0.613745442 0.114885921 0.760240956 +0.330777345 0.759020014 0.996365836 0.417159402 0.913512509 0.110916166 +0.081773082 0.295848994 0.898959205 0.853334696 0.602342954 0.01009763 +0.72541089 0.676172026 0.30032016 0.860942272 0.980413683 0.659328128 +0.265958994 0.58089411 0.402458535 0.625704635 0.250311397 0.676736918 +0.508539106 0.646044383 0.688114361 0.785937999 0.546830452 0.048395791 +0.645555689 0.868408048 0.310748861 0.309027685 0.711334522 0.381493312 +0.266759671 0.014766992 0.856629352 0.136788146 0.841978048 0.623191849 +0.978932695 0.360201893 0.884384537 0.391434862 0.723399981 0.104119026 +0.725614002 0.502606658 0.87815684 0.206139518 0.701746562 0.9689794 +0.48763327 0.328424026 0.282407782 0.399524407 0.739031337 0.623743841 +0.619751955 0.928200332 0.88269658 0.413608495 0.10848361 0.065741571 +0.144364785 0.764767136 0.91041499 0.407265338 0.963051982 0.655050306 +0.576155918 0.464648484 0.826687464 0.307697654 0.580865972 0.033978587 +0.271169318 0.761899456 0.29112794 0.261381784 0.349554514 0.945259858 +0.037230923 0.026285262 0.604450258 0.239603714 0.370062168 0.109329284 +0.533924025 0.634351163 0.631513972 0.250972325 0.476952945 0.44993257 +0.185550405 0.51327768 0.317510232 0.144941293 0.884801092 0.173918946 +0.533058109 0.173327611 0.079900369 0.843762805 0.897672945 0.760600355 +0.365741374 0.710039591 0.991224648 0.650143968 0.899114704 0.735845156 +0.689007864 0.496091223 0.98261581 0.543343197 0.650992515 0.32163496 +0.915262876 0.742736337 0.474322488 0.182448229 0.415542585 0.137855866 +0.333992357 0.017627387 0.749774567 0.547082959 0.088757533 0.997092531 +0.203737352 0.409631102 0.869054675 0.129385113 0.713303877 0.445732642 +0.36059753 0.753720787 0.344469922 0.783621517 0.909944966 0.051003072 +0.621174508 0.554666034 0.272527096 0.143286314 0.740025875 0.135249608 +0.502625217 0.745753545 0.986248838 0.626609567 0.888122167 0.023197736 +0.357290986 0.68512884 0.361331705 0.530260034 0.447962347 0.299249132 +0.870403366 0.97842174 0.940266108 0.018979994 0.099574439 0.188877383 +0.005733624 0.451358543 0.864542249 0.762031114 0.338997944 0.223672355 +0.036715574 0.692877928 0.105985563 0.064461101 0.491216858 0.405194273 +0.368629636 0.153538618 0.959855688 0.660321055 0.580070314 0.493252072 +0.009849766 0.93810539 0.958613898 0.820318428 0.226800667 0.57998322 +0.803795593 0.526347792 0.132836221 0.604408862 0.267483213 0.720812041 +0.135616721 0.403440207 0.195171871 0.817642106 0.363136345 0.240394628 +0.962542604 0.3914863 0.652998958 0.395286799 0.026461681 0.320262655 +0.365818422 0.761455333 0.379181182 0.805284552 0.114060438 0.490393052 +0.77079431 0.976221992 0.114557496 0.700174989 0.774856376 0.745867674 +0.686818583 0.369175965 0.755160458 0.667282266 0.59868983 0.93550622 +0.285921127 0.182216428 0.7572109 0.918989575 0.686344654 0.870769833 +0.036241769 0.307891117 0.26325502 0.011625394 0.260126857 0.814428286 +0.812506681 0.825744349 0.630466452 0.563474549 0.757584101 0.752037801 +0.459129428 0.309058237 0.302149591 0.501259054 0.293508602 0.799746062 +0.3018219 0.842351888 0.31886294 0.068786019 0.903204909 0.826962577 +0.24581834 0.937360593 0.566376454 0.758709319 0.751565492 0.152737912 +0.532986368 0.337297933 0.269232275 0.37268905 0.025742782 0.009659531 +0.096025608 0.98257307 0.589123057 0.517851238 0.889980593 0.292856617 +0.696560264 0.041014346 0.993436273 0.449427048 0.651343921 0.470176369 +0.310172288 0.587402724 0.729826879 0.824165538 0.639567654 0.19239634 +0.633376101 0.555583395 0.786685902 0.86801425 0.127163219 0.791742761 +0.263786595 0.967994518 0.759813958 0.8618341 0.307990676 0.562418604 +0.375120022 0.783475072 0.15536622 0.40581098 0.514314962 0.364113296 +0.027663222 0.210448086 0.716089503 0.325785666 0.130777588 0.454922444 +0.226181809 0.080596958 0.680489194 0.396845313 0.613573428 0.795169583 +0.349647969 0.349022411 0.88192168 0.866492806 0.590079883 0.096233872 +0.027622363 0.464854168 0.709844921 0.702990007 0.0326747 0.027479517 +0.158312911 0.540618377 0.27313493 0.748325156 0.237401664 0.615748527 +0.158096418 0.333671245 0.568050393 0.355570237 0.234418689 0.730487947 +0.360324425 0.78251869 0.914001342 0.325283285 0.001592664 0.255228507 +0.485533065 0.553927385 0.587309961 0.384929653 0.412565753 0.690777839 +0.635974877 0.419926747 0.92631927 0.467831342 0.113272237 0.977255694 +0.486340786 0.274338784 0.176788576 0.8158981 0.588721303 0.415755007 +0.1027067 0.819145095 0.628879079 0.626690458 0.940220551 0.458897965 +0.993321891 0.430864495 0.593941274 0.697155889 0.618605926 0.825935769 +0.237827854 0.109543882 0.030516008 0.997915623 0.960204598 0.321622876 +0.373327928 0.620995606 0.424516167 0.619284881 0.429135221 0.519863826 +0.415399011 0.874279788 0.051413617 0.443069108 0.140053475 0.595726373 +0.800218625 0.379520496 0.38187574 0.030789513 0.400187179 0.730320304 +0.375397129 0.712006564 0.710069947 0.259037437 0.139527762 0.616324361 +0.006444572 0.961637914 0.142439258 0.339552956 0.972925772 0.536159532 +0.316491917 0.477403849 0.053222578 0.831378975 0.039903989 0.941146621 +0.577167394 0.435729984 0.873414914 0.822905298 0.786244895 0.8797589 +0.981272297 0.320068325 0.782681314 0.677460204 0.98198118 0.538251996 +0.201338672 0.434932182 0.787009937 0.896421879 0.657256049 0.025958255 +0.569992648 0.543904199 0.317044794 0.564290604 0.319139777 0.862481132 +0.302041586 0.351738511 0.783596592 0.151624202 0.475636654 0.463622649 +0.673457929 0.757254432 0.702873276 0.545182933 0.579963191 0.656968071 +0.312962466 0.961264112 0.543889035 0.171571303 0.547229369 0.802946136 +0.156976887 0.19414481 0.679543378 0.522798392 0.816027417 0.168063556 +0.63558953 0.066651194 0.433690076 0.092618327 0.159712831 0.91829212 +0.913223459 0.182285733 0.912688003 0.305924529 0.833229134 0.101927728 +0.329639664 0.08849087 0.446029277 0.329314612 0.666512948 0.337842341 +0.376129113 0.511876043 0.913307142 0.037690547 0.726611799 0.758419296 +0.380090431 0.954202296 0.390718679 0.974490979 0.796035829 0.856125551 +0.679019451 0.780663534 0.580636953 0.817804726 0.695986572 0.449955552 +0.939388471 0.036622485 0.717991365 0.547259309 0.688435386 0.645405513 +0.457503948 0.00144191 0.719969509 0.459600646 0.062764112 0.737491881 +0.91537591 0.837706564 0.020498293 0.517852199 0.619334768 0.47519512 +0.183531856 0.891383911 0.256371588 0.398215178 0.976982195 0.818716385 +0.732894122 0.735681032 0.854357942 0.902999904 0.972344247 0.174707812 +0.576949645 0.423216475 0.80848845 0.484334261 0.154057034 0.288561478 +0.262261275 0.671300482 0.930452906 0.116124238 0.223255241 0.597861494 +0.880369615 0.278595883 0.218935162 0.614708608 0.758924328 0.754686415 +0.925500899 0.945403277 0.304535398 0.61465742 0.566810892 0.406437487 +0.383515413 0.012428457 0.15838111 0.841810853 0.878457659 0.540642051 +0.437287802 0.664952526 0.035328894 0.731168107 0.472924645 0.783886825 +0.324603148 0.263528133 0.3162022 0.213214475 0.871435989 0.134769289 +0.991546846 0.383697602 0.671515603 0.49340818 0.532862502 0.010848388 +0.970782231 0.268740407 0.331182939 0.678335848 0.463114262 0.719515182 +0.589150656 0.359623842 0.807694498 0.703731674 0.214795492 0.751863258 +0.049506543 0.942517596 0.480854985 0.788483125 0.946235761 0.359329148 +0.173023098 0.276542221 0.151047291 0.102428991 0.753788465 0.135885015 +0.745463222 0.561470731 0.804585231 0.496457717 0.514776224 0.384700825 +0.223329127 0.002509421 0.008546526 0.470812698 0.092871911 0.76299795 +0.829347993 0.573521248 0.773620855 0.123528292 0.602319106 0.13479663 +0.406824125 0.140331823 0.992288098 0.246852815 0.892757504 0.155207313 +0.184520746 0.240765551 0.710175186 0.815159784 0.887823093 0.045758766 +0.677759227 0.24641404 0.569262627 0.323831509 0.950710445 0.010863578 +0.72533196 0.836751308 0.061357548 0.943386149 0.188843431 0.532598754 +0.623911459 0.838015841 0.899855508 0.117106099 0.989477603 0.774724693 +0.404001849 0.654652848 0.580914946 0.276513214 0.744324071 0.871902836 +0.196314409 0.068423234 0.055034022 0.198015531 0.449872258 0.212130176 +0.612986115 0.542693083 0.435831725 0.556666526 0.793600881 0.065949089 +0.310023932 0.819979274 0.230292815 0.112375266 0.974306788 0.736937112 +0.503904197 0.2211176 0.01952407 0.542220028 0.99954954 0.956315072 +0.757495019 0.357424215 0.788954037 0.207363565 0.72849986 0.754611431 +0.40278853 0.364982871 0.510780027 0.15122695 0.23340872 0.719268723 +0.306043392 0.857687232 0.429086339 0.356329532 0.646374988 0.394232046 +0.188442266 0.497858787 0.333221926 0.040470869 0.836706534 0.236192955 +0.432315489 0.380416333 0.573054152 0.709780545 0.334955412 0.037385017 +0.490302888 0.785161648 0.972343951 0.717572508 0.872960976 0.653362712 +0.057053183 0.60805325 0.234879824 0.916309192 0.522426884 0.673464711 +0.743343884 0.18463285 0.953833047 0.986194212 0.019394566 0.342090592 +0.078937111 0.436704148 0.581600489 0.43613546 0.540165609 0.985508402 +0.709128393 0.618611864 0.905938034 0.077927977 0.879496136 0.378734418 +0.392390939 0.841173325 0.497318799 0.341027776 0.259318974 0.42257356 +0.015876156 0.024128521 0.020282961 0.449784183 0.757694068 0.429195414 +0.056817189 0.366629582 0.950038065 0.722311424 0.481650533 0.375729882 +0.37877935 0.562061692 0.33762208 0.085764567 0.446268674 0.672377899 +7.70948E-05 0.41158816 0.415917797 0.745469263 0.189338453 0.625752666 +0.661553943 0.143357853 0.04571633 0.422134064 0.500543966 0.8870345 +0.574575725 0.579721007 0.142313284 0.063337607 0.10441012 0.318879971 +0.762577376 0.67146814 0.456911296 0.642084366 0.309854894 0.559636843 +0.861780211 0.23470775 0.941204944 0.699419232 0.73032501 0.60311178 +0.187317023 0.809522022 0.927868601 0.336836802 0.95531951 0.324434092 +0.341595363 0.754469507 0.990919701 0.296225173 0.38162845 0.983563762 +0.347526985 0.164379426 0.637061367 0.12185217 0.39293046 0.965530818 +0.507122029 0.539257238 0.618156001 0.656645213 0.567641323 0.264173462 +0.64486337 0.03148847 0.418967278 0.084225375 0.951652516 0.181542646 +0.697945523 0.99851202 0.514870621 0.37864837 0.705776062 0.072151074 +0.932617859 0.29126233 0.813191839 0.114225743 0.602196833 0.708641416 +0.901047065 0.528521874 0.124473845 0.055582414 0.246768889 0.757216801 +0.003410031 0.365489202 0.08481293 0.797254997 0.839818318 0.370050755 +0.853178087 0.195104536 0.824258342 0.807907586 0.829882011 0.182649231 +0.192080992 0.985482171 0.361214767 0.958610188 0.894178584 0.232633255 +0.62655833 0.097251234 0.609005993 0.254326561 0.423022717 0.983274916 +0.568911322 0.170000501 0.314262428 0.105746431 0.875051588 0.053265853 +0.726770123 0.498307853 0.268839163 0.731776591 0.553483555 0.330087427 +0.089003607 0.655931999 0.497472091 0.564267297 0.247835925 0.133643508 +0.16071686 0.683895564 0.175291553 0.274685521 0.6314499 0.848394493 +0.858948048 0.804312708 0.450425593 0.992422378 0.649627196 0.751171848 +0.702693371 0.635147656 0.007051422 0.140656643 0.030479981 0.49375615 +0.579207274 0.868629423 0.900625246 0.883130922 0.531778662 0.234970637 +0.873572293 0.549624517 0.597901374 0.747826112 0.126821244 0.593654484 +0.702888985 0.551499451 0.609811443 0.351111231 0.483820625 0.897625277 +0.02275141 0.196602761 0.268327971 0.049717995 0.004242798 0.46300778 +0.664662047 0.430150105 0.528215167 0.009762887 0.749648244 0.11378554 +0.608803701 0.707244792 0.353326279 0.768320959 0.547188816 0.801520395 +0.834272973 0.798741 0.793730359 0.027242267 0.931727339 0.651690661 +0.601660312 0.172932042 0.317659023 0.955842065 0.968893124 0.061025945 +0.37342219 0.9658107 0.376193881 0.41408416 0.085361672 0.207743336 +0.219541963 0.058257736 0.953875951 0.175367373 0.610057945 0.2000919 +0.893287227 0.507835891 0.759354435 0.850418886 0.846714111 0.7713826 +0.784005958 0.061142429 0.678512603 0.327325787 0.39004141 0.884467474 +0.891082676 0.612367942 0.315341202 0.144479625 0.018668128 0.065569839 +0.900265799 0.430098726 0.880834322 0.143675896 0.853200322 0.002883417 +0.647941107 0.836995689 0.329804866 0.716300596 0.453774205 0.740855683 +0.701141177 0.325767091 0.738630572 0.104943323 0.214391963 0.857499547 +0.229105033 0.871980519 0.173248658 0.552991454 0.725709051 0.780151314 +0.830401611 0.392534526 0.467723194 0.981224607 0.546398622 0.950001333 +0.893221877 0.987418128 0.198663668 0.564256363 0.074259946 0.980985332 +0.111405929 0.822950892 0.101372861 0.021617572 0.685936357 0.157067809 +0.048710419 0.607916884 0.555308403 0.48771524 0.809598944 0.639497189 +0.264015545 0.329953178 0.535774419 0.152071648 0.328960712 0.953746743 +0.373953526 0.055480931 0.566699586 0.531970577 0.209403211 0.745894884 +0.5537945 0.88096684 0.051659126 0.767627258 0.676840057 0.171462086 +0.491430333 0.690082401 0.741762498 0.783222449 0.691393415 0.861220019 +0.909154135 0.397503886 0.117260693 0.372037928 0.290597468 0.314482253 +0.258742333 0.132170802 0.06801739 0.163969548 0.400625933 0.80137779 +0.533058449 0.249730554 0.244668392 0.611607956 0.910234284 0.073065 +0.178094743 0.024079565 0.368675166 0.494277976 0.746955684 0.82397621 +0.211103119 0.071243135 0.285387316 0.064862521 0.796961291 0.977621811 +0.523657914 0.714817817 0.566462954 0.121283923 0.812252153 0.968078762 +0.888796071 0.257953692 0.722058667 0.227128568 0.063994762 0.60701326 +0.911776069 0.256907029 0.730754472 0.430111834 0.259507752 0.476442322 +0.1204309 0.444265458 0.618286456 0.970577236 0.631107328 0.830022189 +0.539336233 0.517228485 0.99004004 0.573206063 0.767383738 0.841697084 +0.683334851 0.283762792 0.852917087 0.535762437 0.094818352 0.508463631 +0.937869154 0.516290095 0.977225057 0.407967493 0.892775437 0.925123482 +0.565512754 0.994697697 0.578880815 0.475255046 0.303430004 0.309194116 +0.063782499 0.298208992 0.44912964 0.245833494 0.767143679 0.667554995 +0.721797187 0.972769082 0.992198534 0.322921555 0.651194755 0.368878787 +0.504769622 0.926870218 0.156495108 0.523973672 0.942385623 0.201821639 +0.032840805 0.22709824 0.341534553 0.585179308 0.036038034 0.257392096 +0.805814779 0.462604212 0.029841366 0.087069954 0.694215887 0.844294684 +0.297558509 0.787144021 0.21801171 0.950567746 0.282827999 0.564960575 +0.011950278 0.028752845 0.309045309 0.286384381 0.898581626 0.501072323 +0.997867588 0.071228595 0.502839266 0.524048926 0.150973155 0.970501069 +0.323111572 0.733707193 0.812434129 0.12922025 0.964083465 0.83768847 +0.464638913 0.836384187 0.641320841 0.427384531 0.620328545 0.57246401 +0.963664383 0.293667144 0.796131772 0.050153373 0.636693298 0.798838202 +0.242950271 0.264859465 0.086664199 0.691468447 0.069596952 0.881059299 +0.838232168 0.703726051 0.300084961 0.027923231 0.823391676 0.686011085 +0.213168109 0.994379697 0.591276884 0.588746568 0.394507633 0.74217053 +0.339950724 0.335300095 0.004208162 0.220431623 0.238601387 0.425936054 +0.31598659 0.244936479 0.614718381 0.841549926 0.829587278 0.875163852 +0.57597278 0.911874445 0.603504826 0.708362652 0.771973108 0.234956389 +0.137715283 0.847562099 0.936560746 0.994063619 0.784464585 0.972581345 +0.26060901 0.997565552 0.845890236 0.735698955 0.408084765 0.53299378 +0.292073158 0.582361763 0.968189013 0.655839462 0.859889884 0.32367768 +0.238737 0.359681133 0.809318801 0.898997693 0.244922282 0.751109012 +0.984541462 0.16179771 0.481475241 0.364844869 0.274585958 0.557120197 +0.158274601 0.59355686 0.171020378 0.043091798 0.631716705 0.147294477 +0.877560323 0.566147105 0.008986521 0.768700264 0.119578951 0.33942266 +0.430281051 0.575042588 0.643305166 0.545876345 0.468387784 0.022140728 +0.106564377 0.418497534 0.173446561 0.590566675 0.122345723 0.139907631 +0.968670375 0.222504896 0.427159979 0.874812819 0.592326955 0.002315872 +0.427954119 0.764838568 0.927863812 0.495051011 0.649997899 0.749957515 +0.948285864 0.551253721 0.730511993 0.136079109 0.93085623 0.619449812 +0.481034377 0.80580733 0.165449147 0.341844866 0.758922489 0.43387737 +0.291197657 0.088716164 0.408300331 0.383453241 0.244367096 0.79818768 +0.840162767 0.112478653 0.459864723 0.296602659 0.913491553 0.459130974 +0.514771701 0.101058206 0.129955114 0.93843622 0.799148635 0.429865816 +0.493724432 0.806740224 0.91265233 0.907570982 0.222366302 0.641623352 +0.201705525 0.64392487 0.923499242 0.495881493 0.242831448 0.985983077 +0.154940118 0.680420972 0.830826627 0.2093939 0.326112327 0.007848872 +0.091186003 0.945852325 0.387665317 0.749492931 0.363992713 0.146794373 +0.053049368 0.816068577 0.710302861 0.029955541 0.434913818 0.33611612 +0.047996723 0.474919388 0.177635548 0.37992068 0.000960615 0.0460051 +0.539612384 0.608660394 0.98225066 0.827709443 0.840137622 0.207517109 +0.018832638 0.54149529 0.666637657 0.802180975 0.517976263 0.713675568 +0.324640931 0.388979117 0.583578974 0.988068611 0.836725452 0.34335988 +0.891346576 0.778456412 0.209569186 0.561189648 0.373936034 0.695240959 +0.470843614 0.711738022 0.226201449 0.9170886 0.198374176 0.451835246 +0.25493011 0.413390466 0.347836473 0.475489619 0.613189124 0.10529729 +0.311936937 0.023417229 0.86412723 0.771548847 0.194112258 0.953616117 +0.668471805 0.177785586 0.424675857 0.413573186 0.566776489 0.39811169 +0.029391213 0.470107332 0.997012912 0.509190129 0.878876636 0.030690453 +0.0893541 0.175204426 0.472431934 0.016995025 0.450586226 0.244283435 +0.461005419 0.44178911 0.417419191 0.687800219 0.662272062 0.627725211 +0.772608055 0.636834149 0.975559611 0.779703541 0.229319706 0.729260171 +0.144340327 0.029746407 0.234324561 0.744842001 0.356900192 0.526697573 +0.044277862 0.040594813 0.339828271 0.389863406 0.79871742 0.197798116 +0.686877234 0.309539206 0.487305929 0.856926573 0.015898823 0.957711707 +0.103110151 0.991428161 0.163406859 0.733779763 0.189105409 0.232729182 +0.311351851 0.563944082 0.370197637 0.540084786 0.075131447 0.136230463 +0.536609568 0.120610279 0.546748527 0.192046225 0.538529932 0.500189216 +0.564383913 0.563246476 0.015888637 0.95819852 0.063314708 0.903108027 +0.547429975 0.675983802 0.095018672 0.912715212 0.093286283 0.812212636 +0.198726536 0.83628053 0.825319157 0.088030658 0.257370814 0.938978652 +0.689555885 0.177898363 0.182302003 0.635355867 0.433630092 0.298337241 +0.215968485 0.657793576 0.037091951 0.80428565 0.619539664 0.245226098 +0.240324247 0.490592343 0.018255543 0.466141626 0.225217312 0.524692128 +0.563408508 0.407546463 0.121299062 0.610853742 0.163229974 0.885970324 +0.363894588 0.449117131 0.816915658 0.269298681 0.59327248 0.612893231 +0.624678486 0.988265676 0.101802023 0.968899323 0.297341256 0.631439871 +0.59005047 0.599254377 0.901761094 0.266903087 0.286327338 0.233965055 +0.425942038 0.612875103 0.648128878 0.359544974 0.500864025 0.819473565 +0.106888477 0.445665285 0.774081729 0.984815892 0.677323701 0.297990401 +0.890092873 0.384673185 0.429508736 0.785241239 0.785520349 0.581635499 +0.077587243 0.010677176 0.942040417 0.882644395 0.014776092 0.197945549 +0.790711806 0.10029618 0.339698097 0.471437019 0.107912775 0.102971506 +0.5172156 0.733724774 0.973351315 0.988389291 0.642203464 0.438194796 +0.560125115 0.153219926 0.81567886 0.696735897 0.361873397 0.300076365 +0.529995075 0.383923812 0.738811828 0.59042898 0.764776272 0.482474865 +0.733223777 0.27498072 0.18634148 0.854724694 0.780804619 0.840436124 +0.578740127 0.605759905 0.403704215 0.117949594 0.676331033 0.955899701 +0.434282716 0.743398541 0.740953481 0.318809832 0.347567876 0.153142337 +0.056515253 0.34914003 0.490809949 0.134982527 0.429627053 0.406602698 +0.988949385 0.300074075 0.775030449 0.086734781 0.54888265 0.825869111 +0.896434102 0.030252117 0.428121262 0.58132063 0.336169907 0.013798917 +0.671278848 0.18152535 0.606465054 0.435184552 0.2684011 0.323227508 +0.910500016 0.593474056 0.641313569 0.390813616 0.545050637 0.489497546 +0.749849206 0.501975473 0.964867975 0.797450637 0.994965872 0.23718337 +0.195294814 0.83157252 0.006513745 0.368273226 0.293910739 0.653363064 +0.658089363 0.162355846 0.11705033 0.382158055 0.178564976 0.237680252 +0.192180456 0.881341334 0.421674184 0.524275282 0.20452067 0.882525853 +0.484155665 0.1775862 0.441507427 0.848805785 0.655476797 0.094913926 +0.652015886 0.49836257 0.232533497 0.327612228 0.829397179 0.939917169 +0.405263971 0.861355181 0.736237474 0.817357168 0.38787477 0.031138031 +0.62357215 0.755982342 0.796890332 0.591838395 0.800847719 0.715256731 +0.319397744 0.658793488 0.043679196 0.051979766 0.913022747 0.217043525 +0.905459397 0.515681281 0.522067224 0.314650948 0.756819636 0.831141715 +0.370002405 0.134688036 0.710776343 0.81848746 0.966860014 0.624114373 +0.342616587 0.830541253 0.848023844 0.859778175 0.867970504 0.662754592 +0.719463936 0.819358465 0.447552448 0.673852808 0.530057361 0.517454864 +0.631533006 0.219900339 0.601971423 0.623920497 0.529506029 0.789207038 +0.275960326 0.306467357 0.239635536 0.784104337 0.15805243 0.803997385 +0.536947214 0.466791625 0.430067148 0.454833156 0.335955095 0.009078992 +0.219485272 0.22759206 0.656097591 0.683115648 0.825179808 0.848861647 +0.484800598 0.68130154 0.58032521 0.049017141 0.513349248 0.315287229 +0.030300187 0.191879264 0.388260795 0.26945286 0.776350961 0.715774526 +0.209944394 0.625548091 0.756353458 0.53621927 0.25790358 0.140084173 +0.320521363 0.235313949 0.037982032 0.302136634 0.660155467 0.833811133 +0.528835532 0.211831981 0.558221075 0.841668733 0.323827841 0.400996237 +0.282790258 0.415097908 0.172225885 0.890599408 0.303653034 0.870167678 +0.736686058 0.301048817 0.374130074 0.508227802 0.650659007 0.170820964 +0.612410348 0.241306055 0.511166928 0.682872424 0.639146581 0.212545617 +0.596445889 0.104260799 0.307728082 0.540418797 0.85664759 0.039201544 +0.797188286 0.106583248 0.126203093 0.543314278 0.045079084 0.857406848 +0.30571578 0.399111642 0.262354746 0.492046834 0.369157477 0.008146512 +0.208404511 0.730602556 0.559532129 0.559359865 0.163754319 0.165554489 +0.219915425 0.062776595 0.237857211 0.144928863 0.234112749 0.646465893 +0.206449984 0.950545352 0.462708142 0.036021097 0.302698598 0.289364047 +0.082845497 0.110131097 0.417510096 0.423253537 0.576675175 0.300521582 +0.574912696 0.71543752 0.274691693 0.767521624 0.929970481 0.385350255 +0.802959388 0.845345498 0.436274628 0.193944731 0.725635845 0.684373572 +0.227643177 0.605293508 0.7440703 0.076565495 0.341612799 0.73401346 +0.298309984 0.008392078 0.36595711 0.240152653 0.574250091 0.514177942 +0.759878172 0.356302652 0.927398062 0.060757307 0.322740136 0.469087374 +0.795664221 0.32963971 0.36048631 0.568142292 0.809830809 0.216874623 +0.110320198 0.965436895 0.72881926 0.874825004 0.822083024 0.802099031 +0.97386087 0.155259189 0.880984581 0.700575324 0.464552433 0.737999444 +0.059052659 0.717244829 0.119393995 0.985031912 0.055089324 0.373865501 +0.665061964 0.666085755 0.994546187 0.598611728 0.537901723 0.297021291 +0.130712247 0.651692306 0.01748087 0.143103606 0.243866741 0.077686348 +0.392816083 0.318284605 0.284425556 0.116104095 0.07022587 0.199321134 +0.853177969 0.435131588 0.981038394 0.617442528 0.228167647 0.431719285 +0.199440782 0.775521413 0.584055642 0.942858004 0.459950558 0.900913164 +0.246215681 0.026990338 0.322932412 0.952980578 0.623811642 0.652153383 +0.65138868 0.950943638 0.050459344 0.896936298 0.529594812 0.118939342 +0.304695047 0.784929219 0.322163981 0.461395028 0.604811688 0.003972987 +0.195707477 0.866084577 0.528737407 0.300990014 0.364634894 0.370921384 +0.646366946 0.764637447 0.524190762 0.884730056 0.394153504 0.690012612 +0.927653143 0.947150649 0.998993442 0.68659501 0.117627639 0.095735418 +0.508801956 0.017613366 0.665414423 0.860676926 0.708029136 0.307030029 +0.849933225 0.051409912 0.665846296 0.040441562 0.606480095 0.050450514 +0.764966259 0.366145792 0.686251768 0.886482223 0.462792067 0.617830527 +0.259894011 0.51534276 0.922693877 0.478646324 0.495028873 0.046445375 +0.682389091 0.941745149 0.874413459 0.497133413 0.213141077 0.684705244 +0.363638524 0.996586264 0.165183905 0.633436041 0.452705082 0.92680741 +0.947793212 0.837861616 0.961354048 0.474642733 0.817526155 0.939749171 +0.229523104 0.073911679 0.264751839 0.413924586 0.734917826 0.671530689 +0.736597642 0.233347652 0.126479837 0.508342697 0.673074111 0.84017149 +0.431580458 0.793504547 0.305193545 0.828201673 0.739392544 0.084915448 +0.331184027 0.176973329 0.938913953 0.552904869 0.120579334 0.85722402 +0.658609066 0.470458674 0.166687589 0.721545635 0.489523912 0.719976366 +0.62800286 0.205658649 0.131249792 0.632702861 0.773494303 0.151288487 +0.601741496 0.489210191 0.59056395 0.387801527 0.362645361 0.772526728 +0.483207634 0.54537353 0.550463096 0.167669599 0.75058944 0.972988636 +0.334096681 0.100971294 0.988216044 0.80871649 0.015661141 0.368581074 +0.157551242 0.825184778 0.430882194 0.466494702 0.876407288 0.094473605 +0.91029919 0.755122538 0.401890062 0.922670005 0.619488326 0.6714964 +0.360234558 0.646072103 0.641029942 0.832808847 0.774974591 0.548107845 +0.937402844 0.024951863 0.467667989 0.103083756 0.340671872 0.787185557 +0.096869032 0.257449279 0.230549482 0.666349427 0.026786456 0.334674418 +0.460539432 0.195510645 0.228328895 0.595514757 0.377572122 0.046870097 +0.649863396 0.532688125 0.145759703 0.160795655 0.747667372 0.25097885 +0.008099819 0.60196159 0.041086851 0.397499464 0.407991917 0.027047191 +0.01355907 0.845069702 0.180185559 0.758821873 0.937204791 0.001483512 +0.703353755 0.946394184 0.724805877 0.562361541 0.076607589 0.680939432 +0.943945986 0.522241804 0.420212823 0.815451093 0.563711792 0.833375074 +0.197245489 0.402165244 0.584876622 0.253293524 0.581709521 0.759727117 +0.277392567 0.846688935 0.690024769 0.270001374 0.660771967 0.011005785 +0.068654017 0.967208856 0.39649437 0.125853665 0.715333969 0.632557381 +0.800069907 0.234208369 0.018294574 0.005750323 0.330869078 0.337593706 +0.654993286 0.756759569 0.379671047 0.744643062 0.925237612 0.757400352 +0.287395831 0.024424191 0.564754558 0.840141023 0.592033114 0.434641987 +0.614489063 0.825998827 0.907761539 0.019554265 0.214930641 0.424288445 +0.940873059 0.455802227 0.791444203 0.939262373 0.727499473 0.913738404 +0.50928127 0.127157568 0.37746953 0.123636781 0.302558376 0.699513666 +0.473824833 0.069331512 0.709565754 0.643808673 0.581825028 0.560054398 +0.257492484 0.019037816 0.533486509 0.514507277 0.749401704 0.388045032 +0.407913238 0.636482734 0.682676082 0.26753715 0.758766606 0.614526848 +0.450722203 0.880909446 0.127906518 0.412544079 0.044779171 0.842246603 +0.782638657 0.180036286 0.056715164 0.836652281 0.505000353 0.33088882 +0.729913325 0.209268671 0.505016335 0.642227492 0.855794047 0.684702448 +0.442532267 0.936768717 0.173946781 0.972953869 0.341275212 0.320150806 +0.978522029 0.170341053 0.017697621 0.080966162 0.816308718 0.992847205 +0.186668711 0.279806744 0.17087393 0.854080475 0.727994784 0.954080509 +0.773835579 0.137101301 0.542858991 0.695735291 0.713651098 0.476723876 +0.898250344 0.164443218 0.275033088 0.87539943 0.550267412 0.720846006 +0.491466764 0.448176454 0.358729994 0.507086398 0.466432287 0.141976918 +0.232131191 0.714475866 0.90991055 0.982658239 0.97977117 0.28917359 +0.650199682 0.947839573 0.035682864 0.847396828 0.059789429 0.177712326 +0.664040787 0.992465638 0.981208379 0.646514817 0.728924888 0.539148484 +0.504607664 0.881231224 0.317394517 0.167827205 0.846242298 0.575802368 +0.773994336 0.722768222 0.805319416 0.01596516 0.882716961 0.997462522 +0.252997004 0.806061074 0.036310053 0.342806833 0.372818897 0.541189741 +0.370339436 0.639278644 0.921451233 0.859719481 0.250175518 0.290015474 +0.294202157 0.9513318 0.804061353 0.524060112 0.926580767 0.265069586 +0.462652567 0.991981386 0.070107632 0.280508813 0.454538364 0.266497622 +0.244087593 0.475833177 0.078041798 0.72438377 0.820910954 0.400524785 +0.137507075 0.650671847 0.034635512 0.272999831 0.888079541 0.513994552 +0.082451949 0.429306489 0.360952852 0.957800552 0.504954055 0.265793261 +0.595898559 0.968234123 0.424055818 0.766278434 0.289957668 0.925481507 +0.933430726 0.763500695 0.46074931 0.723698274 0.985018326 0.588470038 +0.531860174 0.595078546 0.71357843 0.118768363 0.090485355 0.431406288 +0.798972288 0.613109018 0.631252318 0.677307103 0.118344303 0.955980465 +0.349874986 0.455131682 0.180974777 0.47358361 0.81902121 0.19081345 +0.982048514 0.325423707 0.37331784 0.28260329 0.72592741 0.332135068 +0.807489913 0.495111678 0.480251847 0.309839275 0.631769387 0.584243025 +0.003589962 0.658503076 0.132381296 0.659240369 0.981400348 0.834204112 +0.861292584 0.98964543 0.650488758 0.286193834 0.832559707 0.725846543 +0.304445788 0.146744542 0.527306515 0.862418568 0.007976602 0.97121368 +0.576847947 0.095299729 0.213635545 0.044103931 0.148270596 0.679090801 +0.235072246 0.508037788 0.211327914 0.143767619 0.158889247 0.442197436 +0.786682058 0.081051859 0.766262333 0.463523501 0.604038551 0.269480037 +0.984397815 0.20572735 0.833102064 0.919376407 0.431688233 0.88805799 +0.149950221 0.687770415 0.933618135 0.96979044 0.521087343 0.128872334 +0.62794625 0.852517209 0.57167495 0.99632016 0.169430122 0.650385402 +0.521078411 0.610649599 0.805238025 0.892633775 0.571344839 0.43844858 +0.966745035 0.992101386 0.132941727 0.441308149 0.859936872 0.118120094 +0.581680459 0.532978858 0.72698876 0.112239939 0.805332999 0.306775304 +0.170220123 0.17825844 0.795765086 0.827434797 0.603409666 0.13325746 +0.532941419 0.164660413 0.28505172 0.94959169 0.87651213 0.002785672 +0.287375077 0.404164048 0.597563816 0.210177275 0.84750265 0.010446946 +0.134930762 0.950802445 0.142778223 0.527546167 0.950581881 0.832951396 +0.800704142 0.622622691 0.853520643 0.335002368 0.460871956 0.672754625 +0.674815149 0.317356753 0.064158534 0.932891147 0.163854084 0.667158829 +0.598000311 0.376404517 0.401854393 0.463904007 0.009739489 0.41041925 +0.511333152 0.761457491 0.623976812 0.222176351 0.950945147 0.987996926 +0.982101808 0.37799181 0.58699421 0.335280225 0.244575623 0.158682997 +0.901286331 0.808713601 0.032899149 0.602960489 0.493520741 0.826640384 +0.318567461 0.693694363 0.182584291 0.23262199 0.125240093 0.521454745 +0.829452724 0.216742554 0.824578759 0.231645097 0.22178331 0.279773471 +0.733615292 0.198923522 0.581117057 0.066244055 0.267864401 0.606239099 +0.915366925 0.305957903 0.646425593 0.365361314 0.648655488 0.644315496 +0.587942439 0.574838545 0.548791106 0.557592192 0.638046797 0.987541352 +0.352633881 0.711791815 0.046598301 0.191840019 0.120660622 0.896092861 +0.724574508 0.513816482 0.290978664 0.904691883 0.351981699 0.065368986 +0.746488899 0.552851549 0.181282637 0.343327438 0.019804232 0.213722845 +0.132263373 0.793909295 0.021056279 0.293671553 0.945923212 0.313584613 +0.062850705 0.509267092 0.956431642 0.077808829 0.949542599 0.687821023 +0.009998048 0.413546896 0.504069082 0.234876441 0.441746793 0.610506076 +0.147528286 0.564869132 0.942206132 0.497313665 0.005094245 0.4123438 +0.641434183 0.495911481 0.966695063 0.044381925 0.201898166 0.996634677 +0.447891569 0.304803049 0.247622428 0.134621938 0.639876925 0.521309768 +0.759617071 0.030158374 0.935611922 0.260597395 0.218891799 0.044262496 +0.290848617 0.107384525 0.435965905 0.669446279 0.580920638 0.840795441 +0.492012754 0.015809354 0.480346222 0.880541583 0.064710084 0.506390632 +0.407969748 0.100962399 0.659092339 0.279444741 0.991791057 0.38293157 +0.628300239 0.246375113 0.950686909 0.13456127 0.041193225 0.064798471 +0.85363287 0.855032364 0.066416127 0.554465515 0.558832548 0.427148699 +0.099477441 0.666755432 0.430535594 0.517560992 0.416776693 0.356875701 +0.580043935 0.815717905 0.749244547 0.769066101 0.662739451 0.202411445 +0.135217208 0.269013494 0.585699181 0.368683442 0.50015215 0.377373142 +0.348939357 0.369547025 0.676818029 0.996301639 0.48992185 0.305329586 +0.822450854 0.862718713 0.421436904 0.426600182 0.136839865 0.328318945 +0.00617217 0.839739742 0.897999253 0.438270334 0.585951413 0.623313798 +0.624940709 0.46155276 0.370705224 0.723406594 0.916115799 0.077283068 +0.018369253 0.906007362 0.392558469 0.326018728 0.491981244 0.525189927 +0.304178458 0.45651277 0.008546187 0.98526625 0.164415435 0.586575062 +0.286211961 0.877500897 0.316150309 0.010257735 0.627901342 0.698637208 +0.353622331 0.743055535 0.105762384 0.953124555 0.87907981 0.9464543 +0.983017998 0.046817667 0.742206241 0.812640985 0.678821926 0.272902556 +0.885147805 0.555589791 0.818593586 0.896758667 0.088607088 0.449642503 +0.713720975 0.518104568 0.457745277 0.268569484 0.342697796 0.587468927 +0.511863876 0.532603688 0.008523273 0.019287965 0.083966027 0.911646002 +0.525956906 0.424834753 0.351299703 0.880127257 0.35516784 0.693944644 +0.306122705 0.053958504 0.56615003 0.656264961 0.043664939 0.466678496 +0.667673351 0.919991715 0.364619213 0.441025318 0.643198047 0.798645061 +0.178663036 0.984829132 0.465355317 0.362345755 0.742295946 0.127260433 +0.478850306 0.432726579 0.811888135 0.654278939 0.361673627 0.113879389 +0.46387865 0.192443281 0.36963987 0.276589659 0.747290212 0.437641109 +0.29171077 0.475211411 0.137305819 0.778122047 0.526605673 0.787401759 +0.702225511 0.287205854 0.396912848 0.224371401 0.20158798 0.313152831 +0.189270385 0.112968374 0.637438566 0.650639811 0.229642301 0.264543074 +0.567152272 0.375962316 0.966386931 0.693547992 0.402456175 0.854577167 +0.742539061 0.738486744 0.570981335 0.690602054 0.2105357 0.114645178 +0.304512613 0.433161301 0.648931349 0.023818813 0.452594109 0.967022959 +0.223675931 0.587373262 0.370506334 0.569528139 0.882497502 0.277518457 +0.100034576 0.196429826 0.85884261 0.176763289 0.358970417 0.040620742 +0.801550271 0.258030584 0.094778168 0.919682028 0.508225383 0.685652501 +0.047034248 0.672853149 0.963785476 0.938675033 0.749543755 0.717859565 +0.167387892 0.905448267 0.339503816 0.942362679 0.51108419 0.170310664 +0.994349658 0.881069264 0.001384554 0.424092774 0.792652532 0.293035298 +0.351120574 0.724778647 0.05685098 0.607910917 0.314895013 0.734094064 +0.709695837 0.132076614 0.754020075 0.913710276 0.420008325 0.716374772 +0.365949986 0.912596285 0.427244669 0.967822684 0.161304121 0.303899503 +0.830781392 0.167845515 0.05871013 0.761615911 0.084999321 0.179989832 +0.263155784 0.197198011 0.887746416 0.878446768 0.870591809 0.959327083 +0.079581357 0.234099786 0.044796247 0.312905214 0.724026459 0.043049982 +0.607781555 0.221478631 0.984205049 0.98678111 0.338913839 0.507283798 +0.876025785 0.964762885 0.737216896 0.123188725 0.5820959 0.026977284 +0.434993812 0.867047307 0.748748911 0.759815989 0.003427183 0.917619643 +0.464007982 0.43185246 0.806467113 0.342918655 0.65764269 0.148835403 +0.442709618 0.841981009 0.283416362 0.900800506 0.486872707 0.691735306 +0.709070789 0.841729859 0.342572201 0.508713969 0.740914446 0.96658364 +0.516957146 0.784756906 0.822013218 0.608692697 0.236539308 0.454678236 +0.201874028 0.805463921 0.467678804 0.776561511 0.859576395 0.371541268 +0.263446789 0.94922573 0.599541269 0.885575956 0.268014919 0.156059154 +0.372416434 0.849771566 0.317053865 0.87717722 0.1770473 0.718935497 +0.02985957 0.717405269 0.092087652 0.951739914 0.478866617 0.616394304 +0.708447699 0.375137296 0.882830154 0.732571758 0.928027526 0.574456037 +0.365580675 0.60995584 0.358808158 0.30997573 0.996553428 0.166136367 +0.960892309 0.589150224 0.829725756 0.664016092 0.142605822 0.945678218 +0.421744509 0.841486808 0.74512953 0.57937283 0.626739843 0.956928105 +0.279799009 0.659831632 0.758463803 0.324075604 0.871761048 0.859667775 +0.675299357 0.246166329 0.07657194 0.094518242 0.478314007 0.705722317 +0.133949613 0.660558243 0.8384805 0.689455892 0.178534693 0.662581683 +0.497580329 0.559074842 0.996113794 0.132440298 0.242677815 0.293613816 +0.411540997 0.48454555 0.78901257 0.81054733 0.082617515 0.825230308 +0.718463089 0.276809559 0.922216603 0.623713195 0.093708108 0.433682284 +0.232758153 0.876701399 0.411347848 0.051255076 0.607253046 0.505917023 +0.956749869 0.517203884 0.636879089 0.247552025 0.378217772 0.790207785 +0.409083314 0.843187922 0.504913188 0.865678532 0.900684041 0.79973541 +0.959397732 0.574983645 0.825299303 0.237050138 0.916173441 0.985925104 +0.934805547 0.944604054 0.392696511 0.869005545 0.403829996 0.924145859 +0.605177941 0.299898649 0.203612237 0.213100951 0.346893988 0.188983142 +0.636441649 0.227665868 0.443967036 0.818736217 0.471821308 0.558608563 +0.061090253 0.900799114 0.414557305 0.624517016 0.108375015 0.59992839 +0.819176193 0.146018931 0.547199797 0.342117172 0.468759265 0.760161851 +0.331259827 0.476630402 0.128326384 0.820940477 0.402457611 0.005358966 +0.341923939 0.215853474 0.296544799 0.471070004 0.301874206 0.539475701 +0.930814653 0.488083169 0.490365488 0.633710675 0.106741643 0.48278358 +0.277377024 0.092484785 0.239704703 0.929069967 0.343555615 0.899749335 +0.310839896 0.32517296 0.115590905 0.422260969 0.897065493 0.314426417 +0.347662176 0.004027252 0.409977106 0.854599031 0.365421502 0.786982623 +0.798879043 0.844713778 0.227577077 0.57556857 0.952034167 0.322161351 +0.417236658 0.9832757 0.92908881 0.105655353 0.455120899 0.219299896 +0.998936959 0.882993149 0.04087365 0.542377144 0.098808558 0.797026436 +0.644645271 0.477684333 0.538122608 0.397163366 0.826599541 0.352633528 +0.396926133 0.54379976 0.1947229 0.919265659 0.144847493 0.676689938 +0.280565742 0.470406275 0.810342776 0.43685148 0.94108572 0.847529471 +0.452015956 0.811175045 0.964239609 0.610819757 0.340214839 0.863070628 +0.259847801 0.264270515 0.843536019 0.624952888 0.460638951 0.232820148 +0.42019045 0.611298573 0.400381985 0.332597002 0.780940404 0.077664965 +0.510260188 0.743309968 0.422697138 0.237119467 0.824352277 0.858985618 +0.187983406 0.145210316 0.659382545 0.508450591 0.508485561 0.952961505 +0.33977684 0.718865364 0.320743281 0.602885382 0.50361568 0.326008915 +0.120944024 0.321542018 0.904170238 0.120261212 0.829400602 0.192212389 +0.021273157 0.272841986 0.569302312 0.474922979 0.169601939 0.847867198 +0.885841331 0.789288102 0.962889917 0.566008455 0.194586943 0.407433959 +0.942971884 0.299799666 0.989095147 0.216278088 0.736390533 0.756211031 +0.47725711 0.593970724 0.439795861 0.245027148 0.328667402 0.438343077 +0.238599359 0.602672434 0.410902614 0.719347273 0.721775266 0.080428204 +0.319679301 0.128288052 0.488427824 0.917704647 0.831427444 0.504981021 +0.699675031 0.114278264 0.524561499 0.297225857 0.089306479 0.141497752 +0.051646758 0.42045022 0.31249105 0.288166102 0.434026209 0.360151368 +0.861596965 0.930966448 0.80009217 0.332613061 0.880441597 0.230271902 +0.239667981 0.942135528 0.312536837 0.456363632 0.224119138 0.104346742 +0.423695452 0.405975095 0.06392024 0.687247466 0.882016252 0.869850186 +0.576851104 0.712808556 0.052826936 0.609950221 0.655110629 0.592860224 +0.427878557 0.84037778 0.383341487 0.671014216 0.183716921 0.565921607 +0.810639715 0.021439384 0.163702252 0.773199191 0.134663177 0.40722075 +0.617087383 0.713092797 0.492977421 0.980632119 0.495242646 0.083169995 +0.550528454 0.734442597 0.428463608 0.454651857 0.599481715 0.235718247 +0.10706989 0.930912751 0.337529446 0.044019061 0.856930396 0.458628128 +0.597845822 0.221217909 0.196185102 0.513839294 0.756256968 0.264219961 +0.078881269 0.679532435 0.477558956 0.060135752 0.466953718 0.263691933 +0.311853881 0.331123182 0.597292878 0.035808661 0.618231979 0.714154589 +0.632278664 0.034035715 0.028528062 0.444089938 0.196653781 0.324151046 +0.783873045 0.869884137 0.122528084 0.105095214 0.29568618 0.119120928 +0.14478111 0.19159595 0.071477835 0.13634518 0.518290065 0.77987979 +0.201803485 0.032163724 0.16410281 0.313974708 0.1386933 0.643059932 +0.499789117 0.329403988 0.438193074 0.240184057 0.637265262 0.90499945 +0.427146256 0.48755955 0.338225681 0.569786096 0.93021524 0.140460636 +0.252728817 0.998937058 0.331352657 0.245237161 0.309174985 0.136710796 +0.013273581 0.548897536 0.679778205 0.056333243 0.758603714 0.158137782 +0.218065591 0.456314958 0.833843536 0.04528166 0.47930924 0.60469359 +0.003764964 0.467207679 0.888784311 0.231454065 0.877113743 0.540641606 +0.779320559 0.175192981 0.209477465 0.430068087 0.153475823 0.253562526 +0.589868936 0.637385026 0.815024016 0.447815631 0.291323145 0.373048946 +0.602910586 0.593896058 0.968081842 0.249132811 0.110502806 0.522585112 +0.495835023 0.657958839 0.337952086 0.746127195 0.49748417 0.898804528 +0.818082839 0.82350112 0.407756403 0.47832237 0.468820607 0.140421535 +0.966764444 0.283329414 0.629650057 0.296679404 0.268796953 0.906731216 +0.867623357 0.934502475 0.796938068 0.608679843 0.832373847 0.40667427 +0.557855137 0.296334396 0.464465992 0.182439941 0.310436981 0.638660398 +0.820638697 0.913104116 0.510095184 0.714936442 0.664919168 0.107803784 +0.562812713 0.585273098 0.611275087 0.53005258 0.959111928 0.20558389 +0.237169835 0.745444251 0.675277 0.770261649 0.80419048 0.319762999 +0.240347948 0.540856439 0.118824431 0.91021739 0.247389024 0.869259066 +0.789379662 0.452248951 0.474970904 0.312360171 0.330102171 0.791619018 +0.720134732 0.365500918 0.782242226 0.61844086 0.971700013 0.064944838 +0.684675712 0.27995498 0.510444142 0.762618885 0.511905404 0.078297997 +0.947490106 0.684127238 0.44130905 0.579571619 0.767853053 0.270901883 +0.533204786 0.108596994 0.736308651 0.164679338 0.130450864 0.551877058 +0.150787664 0.32097989 0.069495287 0.358179891 0.063277321 0.540053997 +0.283809841 0.016715576 0.205044297 0.53652177 0.059956792 0.394651649 +0.977555764 0.730064222 0.242761475 0.07425124 0.897023006 0.231046329 +0.930630894 0.645544291 0.553972056 0.944049225 0.680332138 0.887360003 +0.66582039 0.179379409 0.868914054 0.690248886 0.197726603 0.582760539 +0.993389487 0.864681407 0.204142247 0.14964761 0.377079279 0.46629902 +0.29766017 0.128105677 0.177183966 0.79583862 0.663646997 0.485131262 +0.114676974 0.8817144 0.82357175 0.63647666 0.955657109 0.466935905 +0.323258288 0.034240963 0.956231927 0.340629243 0.015164539 0.58699212 +0.462847809 0.754603524 0.613402568 0.295228657 0.634384422 0.035523811 +0.482527638 0.091974467 0.022417797 0.16330343 0.838409838 0.090079382 +0.278058864 0.620022649 0.109880368 0.095102249 0.920801011 0.885658025 +0.726276324 0.849778168 0.83495672 0.451074603 0.355031067 0.624500138 +0.716277274 0.05114455 0.99278294 0.381461315 0.76638028 0.048360034 +0.881393756 0.186556594 0.359010976 0.405228696 0.824385756 0.75843848 +0.62848159 0.193054194 0.455103391 0.157722886 0.623910824 0.264543004 +0.58613778 0.083652064 0.223983488 0.864644192 0.113587628 0.977694338 +0.446075053 0.939505627 0.774502659 0.643627762 0.322687755 0.598058498 +0.517557128 0.46821131 0.756309887 0.800238343 0.868619513 0.352539446 +0.1999973 0.234384804 0.008502216 0.668431707 0.765008089 0.923745072 +0.956464956 0.446224164 0.799904488 0.612107523 0.08429748 0.642545233 +0.770010362 0.689293375 0.036074783 0.630484541 0.47902922 0.621741431 +0.343673995 0.754146197 0.278072033 0.076001902 0.618146907 0.482562591 +0.754159345 0.055311086 0.547789533 0.364796528 0.414902362 0.279275936 +0.623475377 0.168785504 0.138605758 0.356426752 0.351476211 0.313635527 +0.24605767 0.595206411 0.13907596 0.704207982 0.321403775 0.300241344 +0.133040929 0.014561584 0.268827831 0.602276221 0.679735265 0.175746684 +0.533197168 0.793067424 0.226178541 0.852645602 0.368097964 0.61381281 +0.804127964 0.937177761 0.847647998 0.163759911 0.94263196 0.970308942 +0.958871655 0.152822769 0.969888272 0.972924931 0.590542304 0.116208475 +0.30884277 0.221196457 0.152913223 0.63126871 0.04389441 0.205640413 +0.67678502 0.519588492 0.885386369 0.024133099 0.733553552 0.488043845 +0.550793102 0.587211775 0.792861386 0.184946713 0.639805531 0.749057946 +0.29665977 0.565059606 0.098394532 0.055926392 0.89936907 0.074813816 +0.462052054 0.369740229 0.239449085 0.197651756 0.163955491 0.214205793 +0.558665235 0.529022875 0.498051092 0.651350917 0.514949627 0.950559076 +0.214248361 0.176466112 0.51341639 0.967889533 0.224869551 0.483164047 +0.480987826 0.18137224 0.479605859 0.806555227 0.495319306 0.961412597 +0.162172058 0.632086655 0.699975493 0.925719092 0.034705635 0.693638753 +0.02045194 0.461251227 0.775178673 0.018968554 0.894905585 0.401456251 +0.088132364 0.907572236 0.046199678 0.904602017 0.800179963 0.716445304 +0.611280084 0.964713887 0.524333362 0.872289331 0.603454473 0.672042912 +0.465848249 0.466023677 0.440004499 0.088531302 0.232715759 0.490866969 +0.290620551 0.139934683 0.995426973 0.393683622 0.800961456 0.607285055 +0.530410127 0.992473702 0.434934172 0.793575382 0.811098547 0.80387067 +0.724447678 0.61846267 0.173636156 0.188027536 0.140281015 0.790855763 +0.399056185 0.289020579 0.497996614 0.096322939 0.70660711 0.315027164 +0.015344106 0.904337974 0.414533428 0.217864945 0.180374861 0.896266067 +0.531044043 0.391141109 0.269809314 0.357805298 0.478104491 0.088981587 +0.224317793 0.187298305 0.220991613 0.88987309 0.083959431 0.870245328 +0.73494349 0.15998948 0.117107572 0.786523409 0.189908953 0.377614051 +0.841256414 0.820132478 0.794710644 0.412366191 0.584575443 0.825845911 +0.330737854 0.48832922 0.667724433 0.202061564 0.321732572 0.44901806 +0.517546867 0.982047855 0.10792157 0.345698397 0.996837074 0.830079314 +0.207499659 0.676787412 0.70328024 0.914109912 0.223620197 0.492822554 +0.377441094 0.04463972 0.92771172 0.53346997 0.235964378 0.430250107 +0.730781792 0.532891723 0.495947893 0.824634 0.839563135 0.75724116 +0.266670431 0.777078872 0.703090139 0.158385862 0.570095878 0.919887721 +0.506981441 0.320003924 0.578593348 0.766034052 0.154980471 0.447522944 +0.199143193 0.214266617 0.870953606 0.379166494 0.272389941 0.972716215 +0.00758401 0.015385391 0.26963791 0.88159216 0.045042931 0.780176903 +0.396816659 0.451596588 0.203204655 0.165592734 0.008252506 0.704385564 +0.82970292 0.817257964 0.932240289 0.297279637 0.186255233 0.697034557 +0.511408568 0.629337334 0.046078847 0.870202449 0.148921753 0.396820103 +0.859773788 0.423986776 0.741898507 0.185715395 0.399488513 0.041742986 +0.98964968 0.660308196 0.15149254 0.472525953 0.067875768 0.407523173 +0.908027429 0.288322689 0.860330914 0.213810386 0.641313607 0.68664574 +0.267311936 0.913614799 0.778506438 0.760191833 0.028492041 0.513396974 +0.603000229 0.684074893 0.52085607 0.510791187 0.183313796 0.806388032 +0.091485709 0.650990901 0.083057694 0.056442717 0.777562965 0.570723414 +0.633604696 0.263370684 0.473274178 0.25738409 0.09963522 0.060424266 +0.077599126 0.957025597 0.09225053 0.457746002 0.07790382 0.023560848 +0.81351685 0.709919296 0.714420627 0.203110306 0.503391854 0.877402308 +0.982275711 0.363413724 0.120245549 0.121824337 0.706256859 0.674426043 +0.288508601 0.04240138 0.626680791 0.50008307 0.248908216 0.983293715 +0.465342535 0.006803596 0.851298566 0.008346975 0.900214056 0.918223401 +0.491036686 0.285022715 0.884898451 0.952390026 0.535174066 0.16544316 +0.827746482 0.421217895 0.429394035 0.595913013 0.065044408 0.382567984 +0.888274532 0.260551854 0.803183072 0.386567845 0.758038277 0.704489787 +0.045852902 0.981070996 0.759157578 0.773283041 0.873026902 0.356366012 +0.621732224 0.313564141 0.149662416 0.747013862 0.353170477 0.683256084 +0.753229676 0.910892705 0.940832258 0.265406266 0.89709542 0.335869666 +0.363258928 0.128783893 0.765096853 0.666967048 0.292299757 0.815196821 +0.612684154 0.968408234 0.641422171 0.533864805 0.696203868 0.228979629 +0.333274429 0.062373435 0.59039425 0.265755586 0.484979734 0.664536245 +0.704172698 0.43386528 0.075438966 0.85729941 0.718506333 0.062665403 +0.992353757 0.329993981 0.868616219 0.567711788 0.149487878 0.414059215 +0.782013344 0.784816216 0.859577866 0.382908195 0.650969315 0.637108834 +0.006252687 0.63714609 0.62192775 0.432395962 0.628344374 0.114417393 +0.113381533 0.031464175 0.32541935 0.248648204 0.59609043 0.055758303 +0.73052827 0.191975641 0.896805023 0.85877815 0.728260082 0.562880379 +0.355693171 0.750876679 0.620586275 0.821745196 0.030430695 0.580799951 +0.089704662 0.50074037 0.807811636 0.989033508 0.880012832 0.141373532 +0.124540539 0.507545693 0.231271145 0.847415977 0.595616207 0.577843239 +0.73467683 0.408348606 0.436468258 0.887335173 0.427710106 0.516243645 +0.961468212 0.617388361 0.468388421 0.441386132 0.061509553 0.358498732 +0.076827233 0.051071335 0.280648358 0.839461873 0.468913833 0.484688379 +0.788685005 0.290666884 0.806263159 0.980362104 0.569569115 0.645751503 +0.286093932 0.724299254 0.330857391 0.021509928 0.512298965 0.507412254 +0.225272493 0.0212309 0.341187771 0.718952351 0.786021614 0.638860765 +0.038345864 0.47075727 0.234093053 0.020406512 0.584515359 0.959587672 +0.355331948 0.389843493 0.889578829 0.87833122 0.179859985 0.013799999 +0.608393639 0.104287761 0.511044087 0.129547747 0.53148658 0.45149218 +0.806374578 0.84622405 0.986987317 0.430224166 0.22733155 0.088550148 +0.179418002 0.012501177 0.535407635 0.579393672 0.254153465 0.383389828 +0.59401284 0.707029457 0.740944768 0.892013438 0.023418883 0.925220276 +0.821665207 0.309722855 0.922225116 0.574679151 0.136795713 0.094528235 +0.391745578 0.616209464 0.001604448 0.577782708 0.155567107 0.599858701 +0.34519337 0.819448552 0.99734368 0.307680385 0.213755242 0.432005909 +0.964486664 0.596599132 0.897606325 0.186167361 0.907689928 0.441757194 +0.108664689 0.834383758 0.839588975 0.523456748 0.545883762 0.871309651 +0.46003632 0.675771404 0.318696504 0.347996642 0.153512149 0.632955446 +0.854754034 0.907347308 0.457274886 0.64762985 0.445226881 0.442516518 +0.916813624 0.809302754 0.298474631 0.284377189 0.29377097 0.44116844 +0.291926503 0.419050904 0.887367573 0.009639388 0.444074614 0.986823486 +0.999821002 0.029770875 0.251381832 0.737366099 0.048291952 0.639011136 +0.437807498 0.039628875 0.365833957 0.732003309 0.023986388 0.289302569 +0.433269523 0.391451153 0.553975986 0.650165783 0.277560335 0.984510603 +0.44336636 0.880845386 0.039075545 0.619154076 0.369572222 0.946328338 +0.390858036 0.037034047 0.93768469 0.024298357 0.077865294 0.950292082 +0.913923535 0.023372139 0.648475337 0.211341507 0.750988676 0.493159759 +0.450343906 0.838306056 0.21982047 0.320091487 0.018360237 0.989595566 +0.278318432 0.46350905 0.696509236 0.587325979 0.729883974 0.747342766 +0.230440556 0.63760022 0.636100349 0.656951392 0.226056689 0.414268462 +0.765765693 0.630910101 0.21419521 0.249740959 0.751800085 0.7003311 +0.902062335 0.235541831 0.735858166 0.328861349 0.386641558 0.035151912 +0.889970351 0.895732034 0.095165652 0.887241963 0.504134446 0.308973974 +0.807558306 0.870950159 0.907131527 0.492270123 0.428238153 0.520525503 +0.496212958 0.981613274 0.624713837 0.501481011 0.421540412 0.875715587 +0.752528016 0.279306077 0.605164213 0.591499159 0.244689507 0.412224637 +0.070605775 0.86699262 0.27203237 0.808698947 0.344772817 0.490467119 +0.182410861 0.58653579 0.684637781 0.055931763 0.089573914 0.143503053 +0.74998714 0.632919917 0.353545139 0.217400915 0.811790639 0.44746876 +0.329569314 0.32205277 0.416790029 0.244841625 0.972343542 0.163542275 +0.568276999 0.790202376 0.732709495 0.629414416 0.312384699 0.203744624 +0.085916383 0.290001103 0.837785722 0.428533543 0.580039143 0.078468301 +0.272248645 0.069709146 0.398271262 0.502025587 0.081700048 0.793894354 +0.134357227 0.813088559 0.698561944 0.3077933 0.754932848 0.808472512 +0.585253394 0.356508551 0.813567356 0.297878763 0.494184449 0.440296222 +0.994231345 0.062014081 0.808250871 0.830776457 0.843961996 0.572926415 +0.785633773 0.195249477 0.321027251 0.386636749 0.288554511 0.463554755 +0.253197792 0.147357226 0.858815116 0.516036185 0.678142754 0.256188308 +0.935802188 0.737869777 0.843535579 0.331322045 0.302440054 0.549666965 +0.496588786 0.661612265 0.484991412 0.238468581 0.658187523 0.549417574 +0.826094467 0.898917945 0.660069968 0.821148719 0.085694472 0.358635583 +0.823685248 0.223782727 0.436556483 0.534784861 0.541894584 0.963159226 +0.643445098 0.627809978 0.150112487 0.765470936 0.379683061 0.528503919 +0.665092141 0.649652086 0.359369256 0.221611819 0.867943853 0.413176072 +0.614890997 0.599285601 0.050028649 0.44386464 0.557872367 0.125177913 +0.540908074 0.771140275 0.602604331 0.035050699 0.868531962 0.360852408 +0.040986138 0.478629965 0.553928183 0.136397201 0.029323913 0.529799445 +0.105419147 0.353735745 0.970426383 0.762451827 0.854158576 0.029223603 +0.330477087 0.358939287 0.274948465 0.459811504 0.509962366 0.282749103 +0.61106044 0.12393417 0.545829747 0.532700751 0.637801961 0.35508606 +0.194269711 0.73443893 0.470515392 0.479791183 0.392162345 0.770708636 +0.574476252 0.812877127 0.011326545 0.199069488 0.463996716 0.776414708 +0.683366027 0.615718052 0.049829877 0.559128389 0.138141908 0.164512166 +0.171639207 0.712301892 0.242041611 0.399803047 0.634963897 0.423220027 +0.572888992 0.45640741 0.234141157 0.009611547 0.125019175 0.44748656 +0.394739414 0.004487089 0.126522956 0.581578721 0.415530717 0.682627056 +0.238968483 0.847452607 0.816853534 0.567733856 0.959952905 0.655433402 +0.198032352 0.075615728 0.242594757 0.230388294 0.405673629 0.097992419 +0.294743099 0.208729413 0.278192476 0.467699004 0.136316017 0.921536055 +0.793469288 0.702904022 0.267393705 0.112705789 0.922106522 0.868545119 +0.191954177 0.081221695 0.665375569 0.204425685 0.776413231 0.139784238 +0.733221604 0.340697808 0.21483925 0.160904659 0.575984925 0.305081697 +0.781787313 0.624702299 0.771940056 0.109921134 0.190549981 0.477832862 +0.053563832 0.488956759 0.960557803 0.201412645 0.82561192 0.884230552 +0.121277228 0.475629417 0.600549964 0.344871301 0.484212847 0.200197696 +0.022085819 0.576258998 0.610030931 0.665240685 0.802797359 0.150627045 +0.783761074 0.364714361 0.602307101 0.529609042 0.661756488 0.484063475 +0.469038627 0.366783995 0.052211636 0.009530151 0.061333844 0.07670288 +0.477408829 0.971861252 0.024348051 0.633982038 0.599424791 0.877215693 +0.671715814 0.235348371 0.804983766 0.060386083 0.42352536 0.135161699 +0.903840303 0.645590095 0.730974802 0.340527776 0.188320345 0.550371665 +0.238693374 0.083304092 0.571726396 0.030895425 0.86333643 0.576618278 +0.897847461 0.330451607 0.18911742 0.505912786 0.844950607 0.647749324 +0.225910674 0.211521397 0.123365401 0.688294394 0.39905504 0.057390979 +0.312727953 0.886177311 0.619099532 0.834412095 0.909247167 0.895855249 +0.249581177 0.983775722 0.904911545 0.067482365 0.566844723 0.263815257 +0.704636844 0.376428165 0.513031798 0.824885382 0.995151072 0.989797724 +0.6970723 0.229978062 0.864357478 0.888703889 0.346276906 0.119346652 +0.420024365 0.538340747 0.470504069 0.479634477 0.08152002 0.362131515 +0.384850355 0.885390353 0.102795814 0.205035974 0.653116079 0.020264 +0.773193448 0.739018985 0.590135497 0.650806631 0.076326575 0.902962557 +0.633158373 0.993647755 0.086675186 0.23213509 0.024728096 0.917760522 +0.0432602 0.119314711 0.21064699 0.082721682 0.382302504 0.119510246 +0.997089793 0.11407612 0.911685817 0.93147571 0.611145236 0.765227227 +0.304739014 0.145523131 0.033750507 0.086003928 0.076702082 0.341940421 +0.583601174 0.736547353 0.765303642 0.472850617 0.53283161 0.027099873 +0.979504575 0.65172462 0.995507215 0.268626531 0.046384016 0.548618432 +0.289509388 0.461040747 0.308023151 0.007119475 0.593318912 0.875556155 +0.450949838 0.718469479 0.444663363 0.477562273 0.57215511 0.923782858 +0.937224579 0.1153754 0.596011559 0.376350827 0.318307694 0.625274867 +0.229333069 0.270428504 0.68132022 0.294997683 0.463285532 0.715136505 +0.317208774 0.040194461 0.723456402 0.529854839 0.818604886 0.285223204 +0.821480576 0.146361084 0.265365541 0.130051563 0.846076827 0.012815108 +0.515045008 0.053621345 0.052735441 0.13295753 0.407891336 0.983336139 +0.25183809 0.203785354 0.913771942 0.296869562 0.214414318 0.618158969 +0.443235028 0.148325241 0.547521208 0.054993219 0.638307658 0.388555931 +0.093139703 0.891561156 0.246298253 0.582999115 0.257459536 0.476369123 +0.84107158 0.526147364 0.197427734 0.431054856 0.975150055 0.252601666 +0.350374033 0.43479582 0.079699181 0.7943244 0.833967014 0.129162821 +0.641669983 0.077681427 0.202346938 0.61655602 0.177258167 0.208443673 +0.376627335 0.241371105 0.213517756 0.308557237 0.172178709 0.687219946 +0.589630375 0.356546409 0.125355608 0.270836029 0.349226496 0.952125751 +0.511150555 0.249988302 0.022081781 0.983215747 0.91357009 0.623812295 +0.194384831 0.91830278 0.057568375 0.771222659 0.679151752 0.690631252 +0.701347469 0.302162415 0.620042219 0.026922128 0.71883483 0.595022454 +0.347907207 0.177847873 0.992992002 0.328803035 0.476192297 0.261459626 +0.683643177 0.674013194 0.593084276 0.73010326 0.235637802 0.34976018 +0.08834618 0.639774834 0.402079456 0.872065051 0.083364934 0.611026323 +0.784659425 0.196327662 0.193351237 0.168177316 0.317275229 0.05613355 +0.050038952 0.054963922 0.296583506 0.56598091 0.904262231 0.242237735 +0.786702051 0.697103711 0.966984425 0.081210058 0.38338184 0.600845053 +0.273114511 0.836771297 0.978401432 0.428799627 0.896879704 0.355787433 +0.59770154 0.344932369 0.442550011 0.492153237 0.044068173 0.976425684 +0.354292581 0.758439884 0.971411242 0.292514899 0.146460296 0.328146478 +0.977176651 0.632198444 0.3452911 0.66710907 0.78952869 0.830714066 +0.155240419 0.893107092 0.498467349 0.204463113 0.048182858 0.125924515 +0.644017098 0.837016627 0.505291981 0.072639385 0.039062848 0.605084329 +0.314862702 0.988144227 0.686197074 0.503855916 0.407667151 0.670941643 +0.277954538 0.272646544 0.901511542 0.882975827 0.447961073 0.936693674 +0.040547017 0.001279185 0.068075567 0.828752326 0.187279296 0.683872408 +0.659097923 0.588250018 0.390665515 0.484783143 0.524780202 0.126488095 +0.571113166 0.977855995 0.507502008 0.547733454 0.655955798 0.455369179 +0.991615198 0.171122905 0.776600994 0.59738371 0.764896598 0.359619139 +0.601520326 0.554744784 0.880518705 0.736980775 0.639806543 0.250435434 +0.40016247 0.707720438 0.998609831 0.599990601 0.670724598 0.69420615 +0.163026511 0.369789929 0.626790946 0.210902518 0.301365028 0.055763507 +0.280214312 0.251507829 0.3023554 0.255675251 0.835281569 0.818175154 +0.578905499 0.274125358 0.273037155 0.263991423 0.322560349 0.290730928 +0.874453908 0.722391025 0.080801011 0.808915173 0.006358933 0.850699847 +0.823675085 0.274951844 0.067808362 0.371659373 0.680157485 0.804305089 +0.601665736 0.41062966 0.51159118 0.82920466 0.154123275 0.851078875 +0.909290402 0.477008526 0.102794045 0.472650655 0.627727626 0.232020191 +0.010468222 0.019393005 0.102613979 0.436537132 0.411803257 0.647504593 +0.368075242 0.331866822 0.947937494 0.777227073 0.356698499 0.179820424 +0.023334594 0.546241829 0.665568587 0.931813312 0.417018435 0.792368211 +0.020952261 0.276275967 0.870270491 0.954966659 0.558918206 0.804508786 +0.802772349 0.728023242 0.69398924 0.619236831 0.543099487 0.226978187 +0.376270741 0.390272126 0.92840163 0.02317681 0.24316079 0.077157644 +0.087340096 0.513524586 0.629200204 0.114145423 0.631550075 0.392721323 +0.884119187 0.921981635 0.654975352 0.118439968 0.131384347 0.729755027 +0.020488636 0.436163859 0.721035721 0.062299134 0.729944602 0.097762184 +0.201157512 0.277166856 0.263354365 0.563217974 0.700429641 0.768327172 +0.872449788 0.107070026 0.852100289 0.877855934 0.182102197 0.626355895 +0.43455697 0.315381201 0.082788084 0.694769039 0.679524603 0.239268834 +0.753454923 0.80751164 0.316810523 0.360665356 0.511951397 0.066334042 +0.943506429 0.855716609 0.463872204 0.400806534 0.714678299 0.2366653 +0.228816931 0.478417662 0.502437989 0.525408904 0.114397379 0.86667704 +0.02055083 0.409340034 0.360704285 0.697276475 0.740557875 0.707023138 +0.688552346 0.530722225 0.246971387 0.384947734 0.323877611 0.030582925 +0.78555074 0.223162158 0.762831406 0.829089981 0.714153553 0.46384318 +0.063703172 0.250483782 0.631181852 0.590045872 0.323121012 0.473544274 +0.45660597 0.286307655 0.871822532 0.37644441 0.39932412 0.362074053 +0.547402418 0.91794111 0.616940696 0.062446961 0.462153471 0.489905928 +0.148488694 0.948323682 0.327998147 0.539521458 0.369929897 0.434911696 +0.700713519 0.168651628 0.060820022 0.232644505 0.846514737 0.152573964 +0.411347657 0.738866395 0.692883308 0.772089754 0.85861375 0.171999644 +0.464012431 0.631955 0.932595332 0.07698984 0.718056698 0.179099833 +0.367236313 0.228928092 0.817764065 0.417357298 0.796187858 0.130828862 +0.033643974 0.224405361 0.436780657 0.848422148 0.21962714 0.940678108 +0.051262081 0.841773386 0.038168807 0.856095875 0.422407157 0.336117894 +0.256216379 0.510733405 0.162889332 0.905038012 0.9103342 0.458631509 +0.047521011 0.31875574 0.667147169 0.873400291 0.564757049 0.20790831 +0.819741974 0.732204729 0.395469721 0.500158858 0.549330187 0.952483911 +0.749324628 0.688607509 0.545560716 0.858618014 0.845827748 0.027032608 +0.235053786 0.871600364 0.608602712 0.865277245 0.417846037 0.89513786 +0.672962709 0.462740279 0.72946463 0.179413698 0.651153086 0.67851856 +0.750301484 0.994673175 0.764240801 0.221737181 0.477416119 0.01461157 +0.087010366 0.409595321 0.954511814 0.830525376 0.815521621 0.434838673 +0.475465844 0.620840561 0.98596322 0.757629603 0.468448608 0.534651884 +0.249577605 0.509646401 0.554214664 0.294670443 0.677089058 0.624346522 +0.099438243 0.313711041 0.54073116 0.983812132 0.220170446 0.829473483 +0.559396707 0.712096662 0.052962216 0.188458415 0.302977896 0.294728215 +0.230027393 0.329692378 0.435727585 0.149688023 0.701590823 0.256524473 +0.415149082 0.704128312 0.259071356 0.178665119 0.849833524 0.159132197 +0.232380686 0.303377421 0.140759934 0.185790074 0.483013898 0.220031969 +0.581992757 0.487104278 0.623888506 0.382765481 0.947054792 0.452640503 +0.082491851 0.562699923 0.365912558 0.679019788 0.445374788 0.737083159 +0.788367708 0.557647543 0.839511537 0.630571191 0.573149601 0.008025551 +0.045662403 0.535375349 0.780743618 0.659585448 0.662070916 0.276776681 +0.323271012 0.318337034 0.843243026 0.859778754 0.749131368 0.364403724 +0.088707717 0.968775574 0.11442526 0.865600571 0.649097917 0.931093072 +0.75461254 0.589023134 0.098116832 0.004195214 0.903103011 0.908218594 +0.077689436 0.921108529 0.865470986 0.104179798 0.114926736 0.760669068 +0.340372657 0.91295886 0.211483794 0.84367264 0.060491899 0.330075699 +0.476613799 0.730858825 0.133556797 0.661054987 0.67221728 0.683320554 +0.897714508 0.792810709 0.725199095 0.337873199 0.52647545 0.070736245 +0.146834669 0.794690576 0.157497301 0.192495038 0.929724871 0.220438043 +0.555923093 0.284557867 0.714229035 0.685618376 0.509863482 0.350892306 +0.154982847 0.389628006 0.075663832 0.105302164 0.932601678 0.681764778 +0.958946973 0.860585951 0.212590774 0.151714232 0.375222923 0.342785497 +0.067531754 0.045340273 0.671370154 0.51420728 0.25632445 0.455158925 +0.511156179 0.644314088 0.721984275 0.463937356 0.062828618 0.688518829 +0.89779103 0.971880292 0.856068521 0.92226102 0.659625266 0.266337513 +0.043409968 0.194618035 0.225151317 0.419323172 0.225343075 0.66647911 +0.065191992 0.204214471 0.687207906 0.772054416 0.820175267 0.939046369 +0.247869773 0.235855221 0.392671788 0.998473342 0.202243867 0.847127683 +0.00088593 0.511569901 0.535112617 0.268532472 0.191303669 0.449270489 +0.170544999 0.494000112 0.511397106 0.252426778 0.873355319 0.251435084 +0.783696711 0.985680641 0.879216378 0.195353898 0.880645897 0.463474925 +0.250653204 0.259779324 0.122403214 0.119645709 0.337260336 0.469526675 +0.336654563 0.418447486 0.102621574 0.12695685 0.342097473 0.011905195 +0.492054713 0.501133174 0.428353329 0.881436899 0.514018414 0.576691667 +0.543796498 0.120154683 0.932410636 0.938284414 0.530965729 0.429970286 +0.409177369 0.321059751 0.345977269 0.391740359 0.859997137 0.107484757 +0.882553964 0.051262429 0.760022705 0.558725994 0.403328607 0.351978313 +0.927287393 0.431978238 0.841988965 0.728891557 0.116992074 0.375717863 +0.045312727 0.595509515 0.658995615 0.229536791 0.803626684 0.15066366 +0.37971496 0.941967353 0.808457464 0.164372165 0.95965912 0.914196096 +0.4881617 0.612014503 0.534291901 0.412126106 0.297362152 0.133487944 +0.920937391 0.099275658 0.987166738 0.915467747 0.845587449 0.739451586 +0.025854597 0.174183095 0.699559978 0.876031165 0.832511419 0.526847186 +0.168460025 0.105638929 0.693426203 0.892270934 0.778014479 0.864861435 +0.61070836 0.339140568 0.091259468 0.828276988 0.546621354 0.692251049 +0.401388469 0.743063837 0.317100967 0.30522349 0.537021742 0.664305757 +0.953935206 0.239031111 0.777114549 0.52046725 0.96171926 0.693518998 +0.57469517 0.605389937 0.111361378 0.314623977 0.589008767 0.700873453 +0.125803464 0.152293489 0.310209688 0.186968263 0.267921227 0.759461435 +0.954936519 0.203321305 0.581295214 0.627611535 0.214552644 0.148882969 +0.835787859 0.962324392 0.451198544 0.623394223 0.464362185 0.851998662 +0.848780077 0.77944602 0.675842357 0.483222779 0.937343138 0.294369646 +0.940574743 0.776261983 0.975556097 0.730260329 0.226607367 0.887685383 +0.316919965 0.172115529 0.934807946 0.051789622 0.014136337 0.184229371 +0.517211676 0.687276012 0.830696406 0.567426414 0.027118394 0.716977974 +0.816572481 0.893269285 0.641256096 0.965150411 0.933570857 0.170903453 +0.783647135 0.877439162 0.732281322 0.921272728 0.422443277 0.462131305 +0.808933672 0.362215869 0.031421276 0.42556922 0.763963951 0.372472764 +0.038945901 0.900671706 0.53807697 0.451817995 0.506099254 0.971914093 +0.228633904 0.800947789 0.803036034 0.210730234 0.570902016 0.090780113 +0.75916503 0.13319765 0.483649234 0.208565473 0.66900085 0.345734847 +0.127885078 0.657877739 0.43004301 0.034130162 0.87017062 0.62051496 +0.870868532 0.526069095 0.179263276 0.91542669 0.274589464 0.550500472 +0.193067428 0.082945042 0.997758015 0.806840585 0.753551004 0.495766531 +0.031821646 0.196552582 0.215577569 0.916824854 0.334454853 0.36962703 +0.860544829 0.242965682 0.787171692 0.434372954 0.273991698 0.479343202 +0.906695171 0.390614068 0.156391638 0.267305995 0.210344406 0.11075007 +0.333460021 0.038962048 0.151833005 0.867234928 0.303526639 0.196420485 +0.210200003 0.771028354 0.121277117 0.763916218 0.798330711 0.587710631 +0.357240133 0.492183821 0.392772939 0.867568814 0.157196863 0.384189365 +0.177942944 0.085151628 0.480657205 0.931367558 0.00055915 0.242754997 +0.165762124 0.206072878 0.942150799 0.42579414 0.192862816 0.202820028 +0.397315084 0.340798634 0.843926766 0.024513664 0.589578183 0.409801818 +0.2624439 0.871587897 0.363016584 0.263141505 0.842887497 0.221084184 +0.25178979 0.290688744 0.315194024 0.944329811 0.545240445 0.699915277 +0.409036574 0.214769219 0.580747998 0.349625582 0.634395126 0.777452797 +0.572527524 0.470792786 0.663398652 0.590609184 0.609034776 0.573684018 +0.46811701 0.288106533 0.675513915 0.033388612 0.282248343 0.738701561 +0.467233523 0.294511372 0.01083824 0.620240445 0.307256756 0.174439321 +0.145940595 0.146100644 0.040434056 0.465895441 0.5653779 0.053042569 +0.508463067 0.353486541 0.364926037 0.685854924 0.210819467 0.352919734 +0.256900841 0.113915536 0.882978491 0.877509113 0.775097266 0.948726663 +0.568595214 0.757346808 0.965807602 0.698599013 0.349196641 0.931494749 +0.287005511 0.701996205 0.981920931 0.149559181 0.300755368 0.246020048 +0.016190642 0.400862943 0.748142347 0.927670161 0.592546124 0.612020123 +0.940515609 0.436458912 0.313688073 0.897950208 0.145529903 0.181722011 +0.994594248 0.638752821 0.077174183 0.152760385 0.149608083 0.014272372 +0.689999984 0.734530264 0.687637365 0.159329793 0.364278825 0.538320065 +0.302587646 0.541081219 0.580499169 0.231368586 0.238487148 0.330350972 +0.103798097 0.534558751 0.99169262 0.135808921 0.057970196 0.335034358 +0.591503209 0.923639255 0.85989826 0.106053102 0.06116899 0.211092231 +0.96855108 0.499663773 0.395548818 0.882313953 0.577329011 0.989912037 +0.575113152 0.985843124 0.679292727 0.168245877 0.903393255 0.835057909 +0.639158517 0.58366412 0.402299664 0.125823642 0.827643913 0.777200969 +0.737221979 0.601423479 0.60458245 0.982234496 0.722813235 0.242833851 +0.998977984 0.701161907 0.092570602 0.226054982 0.977892643 0.57162584 +0.116335021 0.828681005 0.814946014 0.428020648 0.321570271 0.543042546 +0.439687106 0.449459914 0.514771193 0.460818038 0.561051276 0.141656399 +0.706147849 0.918093334 0.990592257 0.698050968 0.883772388 0.630270189 +0.018681359 0.641927395 0.632913648 0.60201914 0.777432357 0.452606113 +0.128150761 0.926011399 0.863586394 0.510951579 0.625497006 0.268489025 +0.681789399 0.286548763 0.900272997 0.034739324 0.990585134 0.850491054 +0.671918394 0.249364765 0.685082803 0.86088859 0.07266309 0.672320051 +0.821642732 0.391686417 0.491471162 0.818544709 0.268697773 0.258789803 +0.137004677 0.858198287 0.382512116 0.325192356 0.146638423 0.532030125 +0.37367806 0.3788687 0.448273966 0.986466368 0.798240385 0.972399212 +0.157322068 0.534979717 0.220561115 0.722102434 0.430562903 0.0822866 +0.922897656 0.486159415 0.115420936 0.812869842 0.757116743 0.869550629 +0.342634304 0.174589649 0.618460107 0.15357189 0.886987893 0.740157369 +0.604694018 0.872537847 0.666324187 0.392218662 0.703408832 0.474715179 +0.805499594 0.175635907 0.332250247 0.342338324 0.668131062 0.118783866 +0.849310168 0.312253858 0.396698606 0.673525973 0.32515357 0.465536496 +0.180603308 0.056666992 0.212901222 0.910338465 0.760749099 0.953484585 +0.384484817 0.569940991 0.377911725 0.638294176 0.317591571 0.138396443 +0.697939971 0.205849121 0.958420937 0.457961708 0.302241049 0.050102803 +0.253835123 0.245932603 0.996688236 0.388833144 0.916749322 0.488181131 +0.324913737 0.012479511 0.895777706 0.311388312 0.332064845 0.423496387 +0.32809107 0.257789346 0.268895505 0.868776593 0.881199783 0.300934223 +0.72780297 0.851724017 0.947913511 0.213968361 0.553264691 0.669557921 +0.705347275 0.579590136 0.211687076 0.808393943 0.770098376 0.526501493 +0.309090239 0.393698241 0.0887722 0.310514705 0.55556612 0.663905334 +0.867319081 0.222894642 0.833177236 0.72954218 0.426195031 0.093906288 +0.549372455 0.989097693 0.068675523 0.472467703 0.727054441 0.080160874 +0.283535477 0.611827093 0.504593277 0.063572176 0.548284343 0.912699839 +0.766674713 0.884025557 0.226872033 0.331425123 0.178504343 0.363465195 +0.110691246 0.270890477 0.577351091 0.499995198 0.17232711 0.174109514 +0.183102188 0.766464035 0.828346521 0.607867773 0.813087619 0.085486347 +0.355768026 0.206843667 0.50849505 0.750585518 0.479492975 0.502674716 +0.274529066 0.525402208 0.033800926 0.776762498 0.563369984 0.222517263 +0.915600416 0.61844536 0.814312468 0.499647983 0.920265127 0.231860084 +0.138429877 0.898923064 0.46036925 0.344197832 0.288988727 0.638309219 +0.911500312 0.163284931 0.73280506 0.629822758 0.947183913 0.593260165 +0.839560573 0.382138907 0.423369995 0.624240049 0.493615453 0.558510543 +0.790112171 0.881316776 0.160817933 0.225960611 0.552074482 0.822362197 +0.410439818 0.69366379 0.322992168 0.022940376 0.62101545 0.638982113 +0.855368757 0.3689947 0.04912005 0.479947516 0.963781175 0.131643909 +0.321935028 0.863907178 0.444162863 0.307852415 0.189892871 0.549433029 +0.473513266 0.27479619 0.378868773 0.14342921 0.562458519 0.853830512 +0.360225569 0.757119456 0.550007748 0.11411147 0.093410169 0.297704396 +0.561951408 0.110631821 0.906278531 0.353893702 0.635300592 0.590389335 +0.215308539 0.090681884 0.568112199 0.525099945 0.459502005 0.976603538 +0.758937426 0.288173022 0.149773823 0.178995086 0.224344676 0.251024722 +0.812232696 0.224854225 0.625320183 0.399744968 0.678641546 0.456710737 +0.959538775 0.823095624 0.380891767 0.741498662 0.171937771 0.913238088 +0.034818349 0.782402226 0.447305913 0.65432046 0.639586694 0.652800627 +0.982039535 0.566205455 0.003390083 0.962625875 0.511146985 0.900631958 +0.562427104 0.748927446 0.476630699 0.738029892 0.454177847 0.033116599 +0.091174221 0.743382032 0.552674247 0.60193227 0.387438687 0.092273374 +0.879099594 0.477578968 0.99710679 0.252760948 0.306271373 0.334722236 +0.331840984 0.493085299 0.777994789 0.64739986 0.552356147 0.527576168 +0.790949686 0.284745374 0.06565781 0.062687535 0.809452641 0.609555029 +0.643936693 0.564088184 0.421952256 0.521115528 0.093553543 0.759665757 +0.764201349 0.64494586 0.043516665 0.859258102 0.485895624 0.0455002 +0.09008481 0.793908911 0.326713972 0.743488749 0.535550689 0.032196502 +0.310853875 0.408153366 0.010299864 0.465129654 0.096170922 0.547805087 +0.271194283 0.601104785 0.937203357 0.576118399 0.005407695 0.839870139 +0.513850174 0.671922362 0.582015384 0.550683822 0.000140744 0.086579249 +0.973853722 0.126982196 0.580370865 0.565513624 0.66748551 0.560885238 +0.168502293 0.848498529 0.506806846 0.836148271 0.939835505 0.541893614 +0.491757501 0.362078813 0.070875155 0.515521558 0.622508339 0.07482059 +0.776695862 0.54587996 0.320453358 0.367153456 0.39002474 0.421170906 +0.541120593 0.327406071 0.414620937 0.576163016 0.022138928 0.505207938 +0.07384127 0.066735731 0.131431413 0.396878587 0.685846003 0.720759187 +0.42970112 0.244707354 0.259778909 0.298727421 0.473988479 0.894210281 +0.728603836 0.70429547 0.247941992 0.582362212 0.481941549 0.043496402 +0.000187362 0.812478218 0.723127907 0.705969634 0.656302827 0.652990656 +0.898930912 0.989311578 0.694005339 0.222646335 0.935948716 0.043759007 +0.175286441 0.659516208 0.426898752 0.53109219 0.626555069 0.386300381 +0.387595347 0.570117198 0.955662632 0.472535981 0.316590554 0.771201689 +0.161427343 0.418335343 0.577168696 0.147937527 0.833261798 0.099211818 +0.665551812 0.551220359 0.542278567 0.004178429 0.992019637 0.143684382 +0.335776836 0.089254671 0.262052288 0.496636464 0.677365064 0.857974797 +0.927143271 0.161718663 0.039454906 0.519298359 0.83532528 0.009344731 +0.58731515 0.465304191 0.376324538 0.968710949 0.761696705 0.953810951 +0.329228744 0.732098365 0.022756156 0.917935132 0.992054186 0.437136302 +0.620107626 0.959559021 0.549646686 0.737506835 0.609420913 0.491223834 +0.211951636 0.308238621 0.124130762 0.885619423 0.217132282 0.345109905 +0.172163664 0.325718171 0.322089482 0.898971603 0.287465154 0.300443745 +0.922189854 0.036193979 0.033806249 0.198715365 0.666054819 0.511372763 +0.722452332 0.937544081 0.272935482 0.001602205 0.270243846 0.964084168 +0.568971142 0.902546776 0.525324527 0.806327091 0.987745907 0.802769328 +0.410426046 0.009128779 0.250836178 0.78535423 0.2755649 0.150116319 +0.861655136 0.003549863 0.628819188 0.419997569 0.337956559 0.356111004 +0.358655386 0.464405931 0.659470134 0.123027082 0.645333775 0.782639761 +0.891734474 0.810726427 0.21640284 0.278755201 0.100199894 0.563667841 +0.702350294 0.337221011 0.200120433 0.574122516 0.325546876 0.87095441 +0.069711929 0.3401439 0.523683861 0.362866852 0.547139733 0.118062909 +0.287179705 0.67625877 0.42598837 0.645680345 0.57493766 0.919660169 +0.353401356 0.083210321 0.099664459 0.821617708 0.558980863 0.300514778 +0.980847225 0.902941735 0.233106091 0.97375052 0.554763835 0.256214189 +0.561851246 0.946441835 0.803410481 0.506471821 0.873020635 0.600534903 +0.731316907 0.236583853 0.251084294 0.074306636 0.538327674 0.036475008 +0.094460998 0.822539088 0.573719741 0.988536537 0.332185667 0.739793782 +0.156454744 0.756349216 0.820963896 0.277207141 0.196703885 0.259173009 +0.820081889 0.828765865 0.387813189 0.443546077 0.025584213 0.19977016 +0.722130168 0.675760367 0.751769406 0.003052562 0.56628587 0.048883623 +0.695208573 0.638600102 0.140240336 0.150785444 0.162130593 0.396239077 +0.352722507 0.36532607 0.731401493 0.746482979 0.243975507 0.761374466 +0.893717372 0.179412313 0.575062433 0.454839462 0.111954673 0.708459118 +0.714438808 0.723312274 0.213700599 0.231575662 0.712472843 0.322812701 +0.180799803 0.49702189 0.067910905 0.319032603 0.438051171 0.67611167 +0.05496764 0.971111742 0.473580201 0.560473372 0.022962933 0.119962672 +0.951481857 0.583695213 0.260907135 0.327718172 0.832750984 0.782837414 +0.515687695 0.995690001 0.087662471 0.133321684 0.572398412 0.512755749 +0.537404907 0.275101575 0.478219322 0.068767866 0.189021618 0.913149583 +0.133971438 0.966869445 0.074035946 0.565878206 0.338151375 0.338595702 +0.388788206 0.930317064 0.070773848 0.357199061 0.487116222 0.851216596 +0.227975532 0.679630355 0.011349484 0.799652288 0.47203825 0.410704883 +0.446923567 0.864773013 0.291037326 0.666819928 0.554799493 0.561972685 +0.840323527 0.985431605 0.466989702 0.640451607 0.687645561 0.297124667 +0.754051808 0.257812054 0.824208265 0.082838845 0.560016914 0.447248564 +0.835921014 0.760299341 0.531022689 0.591969426 0.218761558 0.97700649 +0.858105426 0.469235538 0.738733346 0.341074164 0.11133466 0.671027786 +0.474588794 0.579766763 0.079102345 0.504122646 0.571278396 0.08248728 +0.803303144 0.899056753 0.042426489 0.611164439 0.210148464 0.396537666 +0.673697474 0.818635918 0.143330611 0.076496806 0.822195117 0.180321753 +0.27968739 0.977023854 0.23918634 0.576418502 0.091708918 0.156916674 +0.785493672 0.93002491 0.559813136 0.535252207 0.896779922 0.216053226 +0.551113823 0.004556943 0.9069174 0.811692378 0.582552241 0.646909214 +0.582296589 0.480137367 0.145467355 0.241161901 0.735728857 0.672507174 +0.153326023 0.858520033 0.12419182 0.787635144 0.57914387 0.1836278 +0.735676857 0.750504452 0.749137397 0.776352195 0.446898591 0.048113985 +0.646683709 0.720988609 0.421639338 0.967664774 0.325544945 0.543358908 +0.421977829 0.544360914 0.38379349 0.740147255 0.02365277 0.073169077 +0.614731048 0.536509239 0.865520506 0.944171267 0.419477731 0.315371999 +0.90891848 0.311238513 0.344818338 0.935250895 0.990065309 0.554724668 +0.82901399 0.364357224 0.920098641 0.610653238 0.163846577 0.473521902 +0.374537962 0.950130395 0.990942184 0.738056342 0.675182907 0.072940866 +0.12477917 0.898675363 0.93467344 0.871704134 0.170320769 0.848368064 +0.679636711 0.695178093 0.187399239 0.121536517 0.369405017 0.498900374 +0.675060257 0.090303513 0.817689322 0.736811009 0.019369487 0.587233905 +0.112578338 0.998304166 0.75141497 0.684879935 0.437844362 0.899921565 +0.84836993 0.91622211 0.156831063 0.287455047 0.449665945 0.954673481 +0.561284646 0.817649129 0.163619138 0.29276866 0.333580719 0.791366503 +0.175970589 0.372051651 0.504034958 0.742918654 0.707457024 0.248460979 +0.88624013 0.05230999 0.85252645 0.237767652 0.650763092 0.471793741 +0.522022219 0.380192042 0.049537411 0.344425405 0.02699665 0.97262354 +0.498315976 0.978779616 0.838813663 0.23432752 0.612589503 0.583713932 +0.362291857 0.99294331 0.222988493 0.206283963 0.753394175 0.860925811 +0.885219677 0.843614531 0.945185974 0.657317913 0.457602186 0.88244124 +0.142440413 0.578898641 0.791572676 0.436867903 0.061582964 0.72157746 +0.30981323 0.428082993 0.670890154 0.698871623 0.861815353 0.441281308 +0.774369542 0.593164021 0.162603691 0.998463345 0.619341407 0.714673339 +0.985183067 0.263389721 0.643659446 0.486818147 0.596106887 0.702017021 +0.565894214 0.380925924 0.333486422 0.412404404 0.782239173 0.44098537 +0.781009144 0.179439582 0.961610174 0.566668997 0.762691458 0.407257917 +0.141321901 0.822912868 0.826946922 0.725385786 0.449377082 0.439931498 +0.767573569 0.609234686 0.513585639 0.304564531 0.848721749 0.557565953 +0.891792999 0.412063057 0.28643635 0.367740125 0.88402261 0.794628784 +0.134726113 0.279308547 0.004299506 0.828518885 0.927950191 0.920036657 +0.030261978 0.570122701 0.013318381 0.832810295 0.256721509 0.042595185 +0.893438035 0.910060597 0.735758218 0.71983593 0.456445795 0.350150839 +0.002581841 0.264922164 0.19655182 0.114212228 0.770488974 0.447554464 +0.310144327 0.617760276 0.876160946 0.867020613 0.119730253 0.925768728 +0.066542572 0.713925695 0.838964774 0.116702556 0.062753686 0.14191635 +0.097896897 0.165257132 0.966804377 0.325672102 0.213651687 0.156672012 +0.370779379 0.470051146 0.350209845 0.101142304 0.258436722 0.338121077 +0.342400073 0.366630632 0.343729528 0.19995838 0.893003802 0.153291335 +0.453123479 0.201221153 0.814701021 0.597111031 0.31854888 0.517823167 +0.453961695 0.48101267 0.06951395 0.177754075 0.387157752 0.287133254 +0.392575218 0.996587975 0.336012644 0.524383082 0.90489362 0.161375952 +0.487100728 0.369000931 0.502362999 0.790970553 0.522593871 0.062620485 +0.549713719 0.070110813 0.806206908 0.841255109 0.638576621 0.868369069 +0.327599403 0.034712137 0.955443201 0.22468516 0.735924652 0.639869518 +0.882432771 0.426134585 0.881457051 0.994695521 0.173612588 0.129654627 +0.409667121 0.749413218 0.997911639 0.270705315 0.864304822 0.49544433 +0.981113658 0.705299615 0.44615736 0.417164955 0.501450973 0.020294116 +0.665796167 0.299459216 0.952791406 0.543686254 0.598987904 0.596159349 +0.525864324 0.706782205 0.321870668 0.995943154 0.432269984 0.759899166 +0.374340129 0.848342736 0.31831854 0.139993195 0.890183751 0.149346714 +0.27870624 0.564651762 0.862494014 0.039930001 0.548052251 0.692735963 +0.973248791 0.74674812 0.359683701 0.994439345 0.897420634 0.214723095 +0.394775428 0.269147715 0.200252778 0.814567345 0.358519482 0.033135669 +0.288131283 0.272197396 0.057578115 0.823375212 0.727776531 0.1730963 +0.383138659 0.516870131 0.417538878 0.511732856 0.304498865 0.476291436 +0.855441165 0.187965406 0.357517984 0.19519107 0.651840407 0.193883732 +0.678724905 0.784111763 0.567904216 0.774374427 0.695293663 0.112715474 +0.803861198 0.07145052 0.554813328 0.625173253 0.386671088 0.41621988 +0.093836823 0.06971704 0.086797226 0.901359111 0.429996987 0.248522339 +0.771267767 0.372756296 0.07110156 0.493612425 0.09040849 0.195434269 +0.583979126 0.333079174 0.544928165 0.41865049 0.046323689 0.645861132 +0.470530244 0.69100676 0.495329487 0.235102486 0.621857516 0.754437114 +0.377293027 0.526766568 0.278642724 0.615156588 0.895055858 0.603936611 +0.621358858 0.223701648 0.334370297 0.659487732 0.291454481 0.342545214 +0.640774845 0.897316051 0.220008529 0.743088848 0.754346987 0.540580538 +0.580797158 0.371047663 0.07378615 0.428797338 0.709440167 0.387882903 +0.946890462 0.665455745 0.337175854 0.569111115 0.787794981 0.524617538 +0.959850189 0.640965452 0.896096576 0.411291487 0.572290003 0.35233805 +0.418169905 0.663841497 0.702479432 0.773296075 0.828638884 0.293873042 +0.891050848 0.149326529 0.178761054 0.787397129 0.374091576 0.473068264 +0.920120606 0.800703581 0.618679918 0.183975705 0.476476746 0.391953481 +0.601023341 0.305258484 0.182191858 0.724780229 0.284285142 0.483312383 +0.006523767 0.199731758 0.602110115 0.167526044 0.675245095 0.378919819 +0.434376638 0.846668803 0.632451879 0.52014187 0.410836145 0.735139981 +0.769493515 0.572782452 0.20891829 0.976471664 0.373332953 0.595264529 +0.37690552 0.458385087 0.247027369 0.618059417 0.880676035 0.831072287 +0.666611787 0.05710329 0.391508908 0.215445288 0.298646789 0.441003152 +0.833147405 0.392819994 0.638170764 0.647743762 0.716229853 0.380794361 +0.83289026 0.444791033 0.943104757 0.152015398 0.562168813 0.461987395 +0.604482864 0.910694424 0.608600557 0.335380866 0.545006408 0.805260375 +0.967686718 0.846057523 0.0756988 0.859150605 0.873898042 0.825981005 +0.042699992 0.066726416 0.885024164 0.638936967 0.012729686 0.67883121 +0.867738394 0.19841664 0.046173372 0.802076132 0.971837263 0.075638727 +0.341356885 0.068325389 0.335186799 0.969874313 0.097781911 0.309213622 +0.338698813 0.142423935 0.299136327 0.078854819 0.897928281 0.360599713 +0.743266072 0.813323778 0.375813532 0.758930433 0.765950022 0.446525258 +0.511940336 0.698999563 0.610946131 0.324377449 0.90357319 0.890285615 +0.819041621 0.670456242 0.993465601 0.11931198 0.341477471 0.503506117 +0.308606008 0.004963161 0.103801684 0.233462051 0.364604649 0.231386595 +0.622763239 0.669576613 0.451247824 0.806528386 0.168865169 0.940095547 +0.999194133 0.165542408 0.110901773 0.963001701 0.04231392 0.164302641 +0.444536427 0.98945817 0.924892268 0.017325957 0.880300086 0.777417592 +0.280115157 0.278994362 0.174207632 0.09334722 0.319770708 0.010525103 +0.888350063 0.041622592 0.962860648 0.943794398 0.385101975 0.300816057 +0.56132253 0.185639876 0.07846146 0.406425778 0.017136072 0.987446512 +0.085135768 0.444010096 0.32676161 0.612877319 0.526043801 0.424545468 +0.547423682 0.883008818 0.470447702 0.710460597 0.024626047 0.399613718 +0.006595847 0.596486445 0.626120466 0.917007726 0.12972333 0.444302625 +0.316465434 0.583468328 0.091175616 0.223903182 0.758787545 0.056233527 +0.253224312 0.213074036 0.602677219 0.96331333 0.724274599 0.495504196 +0.404861477 0.665088549 0.052168137 0.777473668 0.963725022 0.772827092 +0.919763376 0.851673295 0.088423304 0.326459622 0.252211013 0.951191885 +0.660293576 0.017282889 0.721708502 0.830686144 0.950205895 0.877485157 +0.152284363 0.893703151 0.781769678 0.941743992 0.041338511 0.503704655 +0.083436276 0.131009471 0.638755787 0.958706472 0.095946996 0.77310997 +0.684504977 0.401393239 0.065625976 0.150214645 0.374181968 0.039589979 +0.158367769 0.00940817 0.12048767 0.511725822 0.527537226 0.339827743 +0.253987454 0.021115756 0.816168688 0.486854038 0.766133952 0.867402958 +0.887705257 0.462632026 0.46247798 0.515497876 0.894220532 0.310969691 +0.790593484 0.304171515 0.902464209 0.181738308 0.845860738 0.730568832 +0.010443115 0.003550868 0.30785201 0.213231009 0.975988727 0.114630823 +0.550452529 0.809845562 0.987460774 0.626812761 0.661866662 0.993143496 +0.550181622 0.859804362 0.273672787 0.435496231 0.955094212 0.511311926 +0.478018887 0.508964502 0.224285268 0.526507326 0.74664036 0.319029624 +0.443517693 0.195285635 0.007455843 0.899403714 0.351533315 0.012509246 +0.045440388 0.39346654 0.899214743 0.096511184 0.189977213 0.769921163 +0.659228716 0.511382676 0.317243948 0.192973509 0.422741124 0.752907858 +0.055584404 0.252145774 0.166968988 0.707835719 0.370053397 0.779771555 +0.671526521 0.673486881 0.702974791 0.307176406 0.749046829 0.195605551 +0.02809182 0.053232036 0.914566453 0.095453847 0.641055334 0.214286629 +0.655776446 0.077724473 0.000413338 0.682840498 0.75058366 0.810907816 +0.333637692 0.707254245 0.569425689 0.004524266 0.602346173 0.470695806 +0.152694056 0.384894 0.503502934 0.132096521 0.592874509 0.857643009 +0.965104484 0.80366957 0.276622046 0.846608017 0.512918901 0.070560481 +0.663966456 0.642081912 0.062183349 0.800091927 0.870276455 0.011437959 +0.85636478 0.385352817 0.365649457 0.706471376 0.267371738 0.158825073 +0.643898174 0.944263891 0.061976206 0.228439931 0.471191517 0.052752148 +0.785639446 0.781606429 0.137525983 0.870088321 0.700014071 0.01415069 +0.116777477 0.75350848 0.452912827 0.287681638 0.267846396 0.414840951 +0.172665881 0.192477201 0.953617024 0.978251627 0.782185815 0.104779212 +0.324451097 0.405730263 0.805898295 0.624040563 0.565864278 0.876174608 +0.207335852 0.042196069 0.553780991 0.697555671 0.631218953 0.166398113 +0.153172665 0.596824821 0.327263976 0.610088131 0.98386107 0.95913079 +0.25737246 0.500239735 0.51483665 0.68134767 0.569196835 0.938394666 +0.876263117 0.63936205 0.631932097 0.365058951 0.556919498 0.707556105 +0.134577229 0.974558219 0.616870331 0.205905056 0.751649851 0.893827159 +0.392606629 0.868919148 0.655107766 0.938765011 0.495011146 0.5135604 +0.563830757 0.086817028 0.446033554 0.138579259 0.646499242 0.765442129 +0.527693895 0.911345059 0.418152324 0.211921498 0.728549726 0.827612546 +0.431345749 0.030721273 0.872321862 0.051393243 0.004048298 0.953238887 +0.210456009 0.765813029 0.977804351 0.140627534 0.390198742 0.589301974 +0.314214377 0.664888554 0.034563141 0.067786261 0.198199374 0.085756486 +0.403647408 0.123354682 0.820459579 0.470605635 0.918969814 0.518664587 +0.538876196 0.565670574 0.766280927 0.983762363 0.821893728 0.433310014 +0.475668436 0.133458958 0.148297202 0.975194315 0.360336961 0.576555465 +0.082449032 0.560883296 0.423808812 0.543303014 0.614322358 0.569168811 +0.540102938 0.683254009 0.748953345 0.837561551 0.326914951 0.075842721 +0.511449276 0.322713539 0.014363376 0.802431022 0.893977299 0.470986968 +0.877068167 0.565577756 0.135160355 0.73030698 0.774301858 0.377364848 +0.397305489 0.046255953 0.148837109 0.458125549 0.498379082 0.628029769 +0.761900382 0.519103085 0.068565817 0.869140508 0.442954485 0.633720951 +0.668798666 0.953805791 0.088132398 0.565872134 0.917762675 0.100285935 +0.278396819 0.574665217 0.813900484 0.152941439 0.596558206 0.312972329 +0.697738465 0.223122629 0.04186728 0.508043604 0.282610093 0.495758849 +0.281444027 0.096770224 0.14319531 0.248190325 0.509066787 0.030330313 +0.340749718 0.355153791 0.755826048 0.851696311 0.820361618 0.67215366 +0.189707716 0.772484279 0.437813164 0.858321316 0.798266876 0.461591646 +0.857070415 0.867880937 0.154740339 0.477848988 0.055931616 0.029328318 +0.271737413 0.840454221 0.66780109 0.921042765 0.66719307 0.875401318 +0.557619422 0.180794936 0.006268941 0.594025013 0.224797547 0.061515272 +0.767658485 0.844592373 0.375559166 0.058486694 0.608379889 0.850186419 +0.715785269 0.311284662 0.173549843 0.628607961 0.489399799 0.645517324 +0.169258875 0.334452829 0.797878101 0.049378122 0.171334678 0.493079902 +0.404355326 0.160366474 0.537399833 0.96998133 0.862697921 0.801800484 +0.854919155 0.113790479 0.293985985 0.614351497 0.12154086 0.928557321 +0.588265349 0.952957308 0.044996165 0.837972286 0.069224649 0.794063135 +0.916544723 0.804010584 0.488048271 0.35126356 0.010321623 0.540879094 +0.502764811 0.909937189 0.607225839 0.170426984 0.851700783 0.128522215 +0.253835173 0.545774818 0.727429405 0.043874335 0.192677296 0.250442478 +0.593493678 0.002938848 0.238068771 0.882659942 0.371177893 0.115448332 +0.740461759 0.088093929 0.877568725 0.404588987 0.792346188 0.809125634 +0.511244328 0.036853453 0.433707464 0.184879575 0.615611868 0.976923685 +0.593515261 0.294220534 0.581731853 0.378749436 0.169697837 0.527147401 +0.091180815 0.877567499 0.477459205 0.820991733 0.196090491 0.099582339 +0.066423307 0.310157357 0.755225844 0.082916938 0.654878354 0.516394115 +0.578594452 0.49970692 0.939300519 0.858680897 0.294220253 0.456302648 +0.070169478 0.735218013 0.870452666 0.982011408 0.463206584 0.734020492 +0.645659451 0.550460862 0.302549749 0.196363528 0.459071532 0.985900101 +0.408355455 0.573505956 0.382199589 0.371473025 0.355051197 0.840941585 +0.649524001 0.381780905 0.561656782 0.370520635 0.664189536 0.507659965 +0.275058182 0.560302397 0.122952913 0.726018622 0.70410701 0.839099249 +0.714506222 0.365375215 0.652107567 0.76967234 0.914081437 0.09831842 +0.13583451 0.490849705 0.711650756 0.058744231 0.189242792 0.888875806 +0.02499396 0.142616871 0.500374592 0.957355392 0.24077374 0.396086002 +0.633890881 0.126334224 0.688095683 0.891606544 0.697644131 0.014137222 +0.870861646 0.211911558 0.076612804 0.147916989 0.639232525 0.830610834 +0.508170487 0.304106792 0.193923293 0.03777293 0.41104913 0.599837137 +0.672306188 0.990063435 0.40335671 0.647553982 0.073597249 0.636632451 +0.543564296 0.597939798 0.47072866 0.023241772 0.429817741 0.143805192 +0.429138087 0.989607749 0.044809253 0.244854553 0.154037285 0.101755196 +0.92099308 0.485363799 0.528002361 0.792269126 0.809038852 0.108576668 +0.709822798 0.21719876 0.323260055 0.980011493 0.012783811 0.001518977 +0.385405716 0.907601505 0.431206944 0.890289271 0.04527338 0.428476789 +0.75243687 0.420513646 0.492377625 0.372908268 0.10134161 0.904537497 +0.168809718 0.032303424 0.594826518 0.676667974 0.617638028 0.525141001 +0.776174919 0.801912464 0.589120472 0.612844495 0.353515496 0.470763575 +0.015024725 0.821191081 0.436437232 0.887839392 0.706063054 0.557258275 +0.822079788 0.089162655 0.226109688 0.2410088 0.362590574 0.420880807 +0.289955676 0.466841653 0.502828394 0.141155133 0.549726314 0.967619201 +0.024440541 0.84379713 0.916702703 0.098429728 0.073479493 0.609433296 +0.313726208 0.429201942 0.28931551 0.097199719 0.579278952 0.082986509 +0.317108217 0.421017664 0.537498074 0.754582128 0.322852636 0.442203596 +0.741067063 0.689986275 0.822855146 0.153412283 0.906637461 0.403340926 +0.687804524 0.591529052 0.287433063 0.182862691 0.560825485 0.595384248 +0.088805241 0.174243604 0.707260848 0.033962122 0.887595575 0.096215452 +0.146673211 0.153923424 0.920781753 0.726588548 0.925488223 0.567376719 +0.033443381 0.515461996 0.084730594 0.552908618 0.615696986 0.706597936 +0.785662841 0.021137874 0.761914948 0.563898226 0.062185845 0.743906981 +0.964638525 0.638295461 0.492522523 0.42159033 0.10575813 0.384794687 +0.846962856 0.696297292 0.329015223 0.855346351 0.251480862 0.101263739 +0.493432919 0.396434241 0.706869102 0.041408858 0.38156637 0.102561305 +0.077027971 0.077807384 0.93917386 0.577299074 0.903538461 0.315405459 +0.970684531 0.198507641 0.511928129 0.390787875 0.776287359 0.71083464 +0.371377172 0.720620787 0.831380026 0.622223962 0.457198576 0.807946766 +0.463706568 0.942656477 0.701839806 0.840244728 0.614430577 0.359547034 +0.639968236 0.390865434 0.69758238 0.454125157 0.528879172 0.597612729 +0.315288575 0.323324287 0.458899818 0.249644352 0.278367821 0.161707804 +0.786138785 0.166018806 0.313870633 0.418788629 0.956016179 0.318927529 +0.742834888 0.427127313 0.219289651 0.626784065 0.603248872 0.078080291 +0.564722678 0.739555891 0.789384827 0.383185988 0.124884941 0.671380193 +0.60046959 0.362559943 0.347914954 0.50504347 0.037877395 0.608019411 +0.876153287 0.083646901 0.927015834 0.639728364 0.797466483 0.415017879 +0.166189195 0.883016783 0.305794655 0.536261499 0.729100461 0.889047219 +0.787004958 0.098852957 0.377697523 0.234481061 0.160640185 0.387261635 +0.967085891 0.543518774 0.480523833 0.043901101 0.968285828 0.036491103 +0.171343411 0.465559721 0.771553315 0.713734841 0.525868748 0.777146985 +0.847639753 0.411715263 0.508176914 0.52343849 0.114926359 0.270754181 +0.378549225 0.785583069 0.674550647 0.376657663 0.407386648 0.302746594 +0.788923546 0.703626676 0.067216655 0.944378631 0.063798107 0.882550995 +0.487073355 0.30803449 0.404983264 0.605147995 0.95210507 0.944959215 +0.76326469 0.217881321 0.762380263 0.860164038 0.623046617 0.77759302 +0.256574543 0.369834964 0.737319697 0.667661505 0.553194266 0.271011188 +0.984134375 0.456704417 0.466089041 0.642217332 0.438323626 0.235206029 +0.90717826 0.125940094 0.735560463 0.778651011 0.921022711 0.014598767 +0.941748879 0.138194059 0.342856294 0.889069336 0.861325865 0.240826432 +0.490788268 0.779395062 0.519604044 0.14627023 0.637261212 0.653275057 +0.992581837 0.311358274 0.978243697 0.049793833 0.359972854 0.030448401 +0.665302831 0.161894377 0.559989178 0.646161317 0.239489915 0.416912034 +0.858383287 0.92449534 0.057317513 0.614767443 0.310804689 0.27998035 +0.04759847 0.696767058 0.537274079 0.659274388 0.514333598 0.295902791 +0.314228757 0.703907077 0.846203049 0.657342804 0.578722119 0.108458497 +0.177493276 0.262609576 0.760829351 0.27767857 0.253749346 0.852668135 +0.211837915 0.67435441 0.045839965 0.419857973 0.153301216 0.745721516 +0.056547284 0.823445495 0.227004778 0.174790399 0.339160886 0.563209855 +0.392569258 0.775968979 0.393366785 0.961611007 0.851886372 0.346886316 +0.248309534 0.168169508 0.433453308 0.947421979 0.361466368 0.305177153 +0.563821134 0.639254502 0.056295114 0.133723366 0.606484626 0.230545175 +0.50804761 0.931000471 0.581568942 0.332875606 0.032147066 0.271812915 +0.194782206 0.799793626 0.878643871 0.708006335 0.049518516 0.289084951 +0.175412998 0.626591641 0.974538705 0.899603357 0.482304113 0.151132658 +0.025513253 0.641939776 0.245438731 0.357190632 0.775047094 0.368683742 +0.86998562 0.600798585 0.226983663 0.214059467 0.920832354 0.716804014 +0.99779775 0.762708762 0.657613621 0.074465553 0.551916015 0.85324938 +0.564980359 0.131909735 0.429512736 0.472490798 0.068775875 0.368944183 +0.102096439 0.611817682 0.531040261 0.768782726 0.429980662 0.894461505 +0.435107543 0.602734216 0.806460855 0.724500246 0.939324276 0.180831744 +0.438408484 0.44702349 0.324571841 0.848412243 0.295973829 0.190200202 +0.989177418 0.664403983 0.807550257 0.588946134 0.801652425 0.840127838 +0.519127662 0.02811789 0.992801396 0.598752241 0.553669407 0.438306429 +0.651685248 0.037105066 0.704640437 0.430772562 0.163897201 0.54521163 +0.221403339 0.168180979 0.933114252 0.543489194 0.132358971 0.579606347 +0.706096009 0.32138796 0.059745905 0.488269152 0.883823653 0.335134573 +0.197883489 0.155392047 0.707607478 0.996690439 0.816409143 0.912441963 +0.908030743 0.909262236 0.315905863 0.469383722 0.582678577 0.065690891 +0.804787235 0.935144701 0.876567034 0.187448925 0.397761679 0.707722446 +0.565966512 0.822179204 0.935198267 0.70820614 0.56065439 0.912050777 +0.786725583 0.689258927 0.661337331 0.520354428 0.331802127 0.01035812 +0.371855904 0.967980027 0.582364356 0.185070547 0.100968015 0.761380162 +0.546257097 0.144227747 0.088366258 0.433732505 0.691217135 0.833682666 +0.067339453 0.600907213 0.10444638 0.89244464 0.572196715 0.927776761 +0.361233052 0.288582988 0.723252022 0.039141583 0.500441703 0.905284005 +0.837973675 0.866684835 0.057004591 0.747181442 0.328636516 0.895830128 +0.25353779 0.529665692 0.266194719 0.798203151 0.33729367 0.486109149 +0.66514788 0.450420683 0.400993114 0.639999214 0.582308442 0.863895873 +0.820366839 0.826945981 0.910297879 0.543397331 0.362819309 0.277375909 +0.293410235 0.958611475 0.504864305 0.739638253 0.207264189 0.226462825 +0.90551488 0.813225486 0.674100353 0.12194225 0.792568764 0.049750523 +0.25244643 0.399960921 0.681573672 0.982278653 0.543510121 0.669927251 +0.778255969 0.794624642 0.037061847 0.600397044 0.786103304 0.471181783 +0.329748292 0.261807937 0.993632511 0.921852818 0.884583621 0.570057126 +0.458042601 0.880525486 0.019786244 0.851350385 0.003852839 0.696939849 +0.2073577 0.808530879 0.935857808 0.695160245 0.644765598 0.115942578 +0.477402304 0.677505319 0.406127811 0.842103448 0.508486045 0.324873561 +0.857837135 0.144920607 0.659112594 0.43070846 0.157142759 0.611493815 +0.407748255 0.227850305 0.917523635 0.258649709 0.636934083 0.413254763 +0.843038394 0.946443705 0.306464801 0.215157992 0.260012768 0.478596886 +0.679502106 0.227824363 0.334636365 0.043137078 0.801401116 0.150816688 +0.971791285 0.836722002 0.845934076 0.085110963 0.352865485 0.917991935 +0.686080398 0.785318397 0.51342968 0.297672667 0.003235894 0.756841854 +0.520997348 0.244204316 0.741617682 0.295458195 0.422475099 0.661298145 +0.13151805 0.188092052 0.214222606 0.864154702 0.211423385 0.758550472 +0.247849412 0.377567336 0.286075413 0.675282218 0.024046781 0.015021346 +0.644314819 0.489964824 0.695113637 0.632538272 0.95468582 0.583701705 +0.652194382 0.351403838 0.062290317 0.318883391 0.111124332 0.147299811 +0.277874901 0.082862735 0.769637436 0.430020888 0.971114957 0.350422578 +0.494096936 0.630576191 0.712142251 0.210372261 0.201794527 0.146037778 +0.414149837 0.482939742 0.916749553 0.761266939 0.204813093 0.366177354 +0.932019666 0.582125594 0.523186054 0.173516968 0.062315467 0.421189417 +0.669791531 0.635027666 0.425150032 0.707622544 0.456764731 0.129536742 +0.697734548 0.723529525 0.631854308 0.376239035 0.009436715 0.291818133 +0.181462229 0.184459797 0.120426773 0.665356396 0.34234936 0.528411679 +0.785206614 0.993942359 0.59326968 0.331541737 0.254069699 0.851564006 +0.455812789 0.291157984 0.200508731 0.86617969 0.274542562 0.776396065 +0.979196728 0.61183674 0.791471401 0.3648223 0.781770173 0.263009773 +0.561898093 0.092689171 0.320563941 0.029092269 0.924161166 0.964111995 +0.09838044 0.459159378 0.060426802 0.84038334 0.270398386 0.137081731 +0.514259751 0.95443031 0.683773488 0.596531799 0.938545536 0.759375636 +0.514793095 0.306656212 0.513440148 0.064702421 0.72935183 0.593516305 +0.279857141 0.493743603 0.486970305 0.847794487 0.931208257 0.825810817 +0.29208305 0.496508096 0.439308031 0.682957081 0.986923098 0.874453297 +0.526576599 0.508455262 0.515643802 0.492108344 0.820795436 0.180687962 +0.83749306 0.521926846 0.763646898 0.436505123 0.282405778 0.794314962 +0.376513829 0.089937549 0.72964866 0.986112245 0.251679775 0.277716368 +0.386357642 0.60475258 0.827178309 0.001171415 0.475424099 0.933894238 +0.935733319 0.528310947 0.877966043 0.032855091 0.321710921 0.875218944 +0.434929525 0.613507996 0.96956029 0.543886102 0.655490295 0.183127846 +0.604498714 0.326902063 0.541227662 0.611353155 0.974080914 0.022380743 +0.151021615 0.91511199 0.1067052 0.290356164 0.685550375 0.938828355 +0.878906163 0.231364238 0.652426216 0.083179682 0.179958341 0.450021313 +0.97087262 0.519275427 0.937615959 0.825495694 0.466583984 0.471503376 +0.460316391 0.813288354 0.999098559 0.77809972 0.149528347 0.653759142 +0.227687676 0.280243889 0.267554172 0.147711518 0.457396365 0.884282674 +0.688513753 0.820499845 0.061743084 0.657494721 0.612461558 0.508612896 +0.389376303 0.232785093 0.199190754 0.060882484 0.761393217 0.596751669 +0.416960575 0.442900488 0.664501508 0.800701187 0.654340521 0.828032657 +0.108388248 0.81154625 0.698154926 0.199839811 0.355410171 0.688269277 +0.827438765 0.481095067 0.210182936 0.959950534 0.215909488 0.191955004 +0.578624235 0.236307872 0.44716669 0.258850646 0.790321767 0.648200137 +0.297490398 0.120248883 0.353671349 0.65257002 0.648570302 0.325804442 +0.748878617 0.994865589 0.702383919 0.951899704 0.640718522 0.395106263 +0.555636888 0.545696222 0.048510707 0.515641948 0.618424435 0.328354401 +0.149302597 0.885305123 0.039114159 0.173669834 0.089089168 0.158061023 +0.17505118 0.152929668 0.93122007 0.319216805 0.261046291 0.320553982 +0.549194782 0.374320664 0.664424809 0.54109775 0.60053906 0.857383664 +0.695842707 0.870614067 0.294751278 0.928126009 0.967942092 0.170438074 +0.280353528 0.513053542 0.719492061 0.567222672 0.650739403 0.711867675 +0.821482926 0.509250664 0.454370058 0.722520703 0.633547146 0.949409223 +0.210862205 0.52531235 0.263455966 0.013959119 0.452637175 0.800817329 +0.566053096 0.787720417 0.440772762 0.903868749 0.399892132 0.223503176 +0.978149315 0.996475989 0.185496019 0.840010404 0.533226842 0.635741034 +0.713466485 0.343521306 0.683766096 0.826606168 0.74422722 0.028988401 +0.312387486 0.866594973 0.616866955 0.731681365 0.817588532 0.530394507 +0.9458032 0.802173317 0.718068139 0.176918123 0.768612765 0.969179193 +0.251959824 0.891642379 0.814068725 0.540177718 0.367475417 0.614876722 +0.674028085 0.161912301 0.05624979 0.599801387 0.339799408 0.544294462 +0.83255625 0.559200916 0.518803987 0.9316899 0.72588596 0.1861418 +0.448305755 0.535525529 0.162599978 0.442296326 0.496737968 0.572821686 +0.198012776 0.37366694 0.146750996 0.268732679 0.580770784 0.473044568 +0.621299571 0.011957793 0.917990629 0.012889048 0.812045573 0.632731168 +0.426345764 0.226968106 0.789774972 0.997952343 0.791610446 0.812620201 +0.954945849 0.513319647 0.424633323 0.493338524 0.121913732 0.813810561 +0.558282078 0.844162342 0.238443 0.529139923 0.133133035 0.259347329 +0.269446196 0.389196922 0.501543338 0.885793102 0.894194275 0.683373109 +0.151790083 0.274076137 0.909237152 0.238370197 0.362084268 0.61242739 +0.251100434 0.494411275 0.352421451 0.335682143 0.521038594 0.6991721 +0.940229775 0.493167085 0.140003289 0.005639354 0.852674053 0.739033755 +0.715910385 0.265977162 0.592810103 0.799198998 0.237440218 0.769587594 +0.235831223 0.595063231 0.415450097 0.329568096 0.074773923 0.020489136 +0.652970343 0.47642725 0.21233475 0.580202681 0.297121093 0.103887823 +0.573205106 0.194568013 0.344641486 0.389032891 0.867707515 0.749124696 +0.958296581 0.182705937 0.545640401 0.780566439 0.416548613 0.009569892 +0.065552854 0.284901206 0.665014766 0.199542543 0.727110563 0.773380429 +0.379459729 0.350408133 0.021089936 0.111507653 0.197531442 0.178254815 +0.305091696 0.179252266 0.387696797 0.481515668 0.422254529 0.786626233 +0.019448051 0.56258461 0.365075278 0.34530192 0.177241106 0.258521662 +0.049002218 0.060196029 0.320083035 0.121915402 0.18751623 0.957147994 +0.729719563 0.512664915 0.494696863 0.938275209 0.245499573 0.424492936 +0.127580015 0.581842019 0.63982928 0.137132618 0.850338764 0.230097466 +0.703510578 0.289953472 0.670398905 0.853722449 0.774450004 0.648438302 +0.18952533 0.132926363 0.802308762 0.042390431 0.752072281 0.886249102 +0.510044535 0.949515743 0.341793517 0.331431651 0.800057643 0.539339982 +0.268620984 0.846889635 0.889272002 0.36587426 0.192258754 0.22439259 +0.498485646 0.098016518 0.173181039 0.987056357 0.511534414 0.43445616 +0.572348992 0.847642373 0.644646515 0.68459824 0.746909364 0.120786675 +0.718382554 0.905519936 0.941521439 0.484488356 0.360601146 0.539929621 +0.851224713 0.887325915 0.382766421 0.731995377 0.032139033 0.098974667 +0.97344554 0.821667674 0.067983429 0.577771939 0.577259378 0.341386078 +0.169991361 0.185572314 0.817467486 0.309184943 0.370343481 0.100534345 +0.626244828 0.492609923 0.463414937 0.504587158 0.178606292 0.703292746 +0.508063636 0.46065146 0.673770634 0.375543556 0.294035584 0.858936697 +0.911112816 0.927656436 0.324887328 0.240424353 0.205005064 0.167670287 +0.458516847 0.553264603 0.213545717 0.619980633 0.38971931 0.524164575 +0.178868538 0.306831897 0.595490546 0.738130181 0.324443907 0.571631434 +0.734493163 0.612123874 0.677138897 0.394485436 0.563568874 0.384555382 +0.205552648 0.915022761 0.044189416 0.700298328 0.017080518 0.790920075 +0.493123392 0.641967384 0.510644503 0.867690076 0.872525981 0.002037652 +0.054574338 0.472243992 0.067984397 0.64661718 0.986461953 0.550909642 +0.818424514 0.391120591 0.489998612 0.694551484 0.137455511 0.862073566 +0.721623137 0.571965357 0.724826685 0.408769309 0.452261533 0.086482594 +0.413278842 0.858583474 0.921121348 0.210212896 0.422724417 0.056118644 +0.806870705 0.42645676 0.430320427 0.813749867 0.886388157 0.113760232 +0.481843975 0.692013387 0.882634089 0.354209487 0.433956602 0.416454092 +0.141570736 0.900162509 0.983298355 0.169979943 0.791308205 0.398667343 +0.761618622 0.502766161 0.214343931 0.580033693 0.262099219 0.306129285 +0.607310519 0.484296164 0.535503228 0.249963766 0.104918551 0.742540986 +0.129595851 0.413705681 0.054083011 0.8293164 0.736038677 0.472675352 +0.943355341 0.433898729 0.815023393 0.806106141 0.714970571 0.09004161 +0.850752511 0.875527566 0.075747652 0.992949884 0.239267249 0.150581337 +0.427508544 0.521407925 0.286389545 0.107141686 0.585010672 0.218102452 +0.454675667 0.774178923 0.755413842 0.011652196 0.017057211 0.823082951 +0.318488832 0.814823122 0.759868077 0.01160433 0.634115431 0.72485545 +0.442754782 0.149437236 0.875403066 0.949189186 0.425240521 0.390718409 +0.239407765 0.394464281 0.255440004 0.562428268 0.718405886 0.998691933 +0.342916029 0.093356028 0.083515973 0.917923465 0.043516741 0.749155767 +0.034867243 0.792822974 0.732320977 0.07176394 0.07431325 0.071341649 +0.821893591 0.953648895 0.848491684 0.925378763 0.200213622 0.513196339 +0.764708498 0.372197315 0.896788231 0.901382854 0.261686299 0.179515918 +0.209395495 0.158300537 0.259563149 0.482721975 0.856092253 0.734322093 +0.369401774 0.496658926 0.53057139 0.924200306 0.690473255 0.826692579 +0.199986165 0.626319064 0.903002398 0.030112809 0.514702249 0.362698811 +0.75152198 0.361661134 0.740910064 0.785911869 0.208696736 0.626915828 +0.855721448 0.69361362 0.329069895 0.883981915 0.640372737 0.937790702 +0.353328687 0.686713164 0.973565184 0.069735953 0.451899257 0.831623754 +0.254443622 0.426821149 0.65141401 0.75240486 0.935073427 0.678383144 +0.722072343 0.955858187 0.838262461 0.14345425 0.133340288 0.364562943 +0.308102553 0.218179023 0.158554335 0.957700134 0.426123029 0.8390393 +0.053489261 0.120518135 0.239808282 0.306632583 0.306209717 0.756107782 +0.188639215 0.906433008 0.843682043 0.212117339 0.518869045 0.620547927 +0.355790557 0.963825265 0.734905362 0.4040841 0.160393721 0.40202113 +0.633612081 0.587272617 0.081708984 0.396777358 0.989954456 0.91862625 +0.234987697 0.944317221 0.044567606 0.872732848 0.588185149 0.851653077 +0.445608985 0.972345705 0.94919083 0.020189708 0.076905274 0.937502304 +0.398969677 0.582510762 0.223263027 0.623068458 0.924678386 0.47264566 +0.208061368 0.47073101 0.140330772 0.882489621 0.202654506 0.285568368 +0.065803356 0.471376844 0.665178835 0.822032681 0.976430438 0.428088803 +0.787723967 0.241608451 0.046459353 0.127552771 0.345544942 0.565868195 +0.532290531 0.689328342 0.437872737 0.58682053 0.284282641 0.263663662 +0.526479616 0.653691368 0.845035483 0.741542283 0.337575544 0.675408475 +0.003194313 0.402659789 0.144592765 0.581237611 0.670565403 0.333078651 +0.334965163 0.815093987 0.006540705 0.383621679 0.522138385 0.970120109 +0.531353066 0.783383392 0.548075252 0.424972583 0.299056418 0.589959171 +0.398708646 0.431519409 0.79803375 0.184941703 0.859895368 0.750309545 +0.164352017 0.38755434 0.705198631 0.88308038 0.911066562 0.35408306 +0.625893199 0.913130268 0.757788799 0.587418137 0.436747264 0.389107078 +0.193751242 0.870258702 0.188793945 0.772191962 0.385488912 0.359953876 +0.01880368 0.84168273 0.963409151 0.341888786 0.994404589 0.744637265 +0.866499405 0.246830638 0.740113206 0.203857638 0.145305865 0.108034809 +0.929395089 0.474683251 0.34941906 0.487406635 0.846258222 0.802561067 +0.276470059 0.731650155 0.330843185 0.44821089 0.515447837 0.654611829 +0.108326669 0.791314528 0.23541221 0.654028396 0.824792295 0.419764289 +0.792434827 0.427658418 0.340828489 0.201863456 0.932596833 0.529502928 +0.291652306 0.441536015 0.42686277 0.168287346 0.699163826 0.945005361 +0.305753328 0.704551883 0.156997485 0.522342606 0.078743 0.708740281 +0.02341509 0.811277839 0.222380674 0.038496716 0.397226439 0.575788234 +0.218810364 0.946591042 0.005882777 0.587072242 0.653107294 0.328699245 +0.431364334 0.473419946 0.333443301 0.727489776 0.059277702 0.49788402 +0.937821744 0.026745967 0.304850412 0.573519374 0.738329414 0.062509478 +0.007327333 0.001221234 0.47113014 0.303340563 0.385045188 0.898568653 +0.702304546 0.110485033 0.403868982 0.81581899 0.614858135 0.921020615 +0.177695046 0.842105356 0.937753028 0.63235366 0.417001718 0.627798284 +0.929478467 0.515814767 0.676090636 0.923188536 0.404315249 0.907090937 +0.765836912 0.832606304 0.761270364 0.816793771 0.825773235 0.681993976 +0.43546346 0.469221431 0.937677646 0.715531975 0.528908555 0.061955885 +0.486275349 0.144986611 0.67058761 0.618089341 0.110659385 0.826843012 +0.334222423 0.055865359 0.936882732 0.547238363 0.012761184 0.410488018 +0.990553658 0.159651101 0.57210695 0.507291896 0.061622815 0.562065968 +0.140140198 0.055203275 0.256554411 0.992351662 0.419760057 0.453845465 +0.955260764 0.389951626 0.768586937 0.857769303 0.439080865 0.951554868 +0.158233941 0.193424285 0.238386352 0.755399959 0.686828959 0.9131555 +0.916864944 0.327681542 0.706147341 0.957950853 0.981534462 0.669413613 +0.192067836 0.271801941 0.901941543 0.194453102 0.591671524 0.820372028 +0.027418929 0.863445822 0.565741453 0.771851002 0.753722147 0.524777538 +0.052315486 0.890255332 0.238630756 0.924866445 0.952916897 0.098797233 +0.093704787 0.881762098 0.455061111 0.729111715 0.070693158 0.853584504 +0.766502119 0.235694694 0.541736831 0.162429704 0.557472232 0.761901102 +0.46680167 0.145652484 0.692366531 0.815812525 0.235189153 0.312296254 +0.025618089 0.656961599 0.51966124 0.006138893 0.082586831 0.876911921 +0.336909465 0.673467544 0.452580512 0.554783542 0.36554174 0.119073308 +0.851294926 0.789628391 0.757689858 0.007419926 0.68607456 0.553882596 +0.782578309 0.967349735 0.216950623 0.021636798 0.844365572 0.108623364 +0.983065198 0.668111415 0.290690689 0.199555034 0.668636441 0.137444605 +0.466174729 0.55797896 0.414677328 0.272359921 0.910799168 0.115415435 +0.671387388 0.788839642 0.505808581 0.181284628 0.00147135 0.341468864 +0.133700687 0.502544917 0.676931158 0.826360509 0.820685516 0.937796532 +0.889831912 0.974817104 0.735087607 0.216272847 0.502120214 0.228569853 +0.173469537 0.958684548 0.306109634 0.397464834 0.129744316 0.453451034 +0.614953953 0.707066179 0.526195084 0.941616801 0.323275538 0.646646831 +0.776994173 0.601469841 0.513394956 0.739132009 0.179778033 0.338368438 +0.885210134 0.536488957 0.159221206 0.987371419 0.497278782 0.545945435 +0.580625718 0.219523888 0.020952223 0.524353034 0.842227854 0.991342111 +0.530942768 0.743865399 0.610810926 0.903653053 0.497415154 0.740554463 +0.701513726 0.285546931 0.84102384 0.207362331 0.081536319 0.128813965 +0.994011331 0.41474259 0.948931158 0.793680607 0.611667333 0.017593182 +0.585802863 0.905551268 0.826067021 0.082174012 0.592718054 0.181787218 +0.006916809 0.439491529 0.478040803 0.65744326 0.783085866 0.048630167 +0.054671253 0.379090093 0.968749825 0.941151771 0.229492883 0.755038567 +0.51751676 0.300455459 0.398876168 0.115319948 0.456269256 0.531745712 +0.353564373 0.64407067 0.638892007 0.715357768 0.007207118 0.548986564 +0.761060905 0.403567413 0.410196159 0.155090756 0.679184323 0.365011984 +0.899202934 0.436196123 0.41534332 0.692265337 0.178188967 0.983266065 +0.437383358 0.024683099 0.209283103 0.467809098 0.507537789 0.799894193 +0.262046517 0.491182994 0.814326758 0.38007897 0.47448295 0.288056106 +0.53846911 0.504424786 0.66452897 0.375211426 0.500489727 0.688138879 +0.946000912 0.531348866 0.133118875 0.314708946 0.739366857 0.168917995 +0.115162018 0.40465942 0.124430601 0.635211166 0.252707891 0.329639281 +0.719106798 0.759746447 0.900305225 0.186327288 0.007849367 0.376400694 +0.042159409 0.286807129 0.664105385 0.471609936 0.737403948 0.895811636 +0.045774626 0.291083809 0.780164984 0.051839526 0.560134328 0.55468344 +0.456404088 0.474988657 0.245514186 0.618255006 0.94378346 0.320623389 +0.255245398 0.506309823 0.179283987 0.510018194 0.781946808 0.181627481 +0.009874573 0.554764886 0.903981052 0.325402114 0.377237913 0.981228117 +0.805903492 0.696610622 0.68365202 0.751100191 0.346876461 0.728349756 +0.246633215 0.841022399 0.976966547 0.761954586 0.710332925 0.408894297 +0.630968521 0.194656641 0.612591789 0.850401593 0.668337852 0.397458908 +0.887538979 0.585574095 0.379277074 0.919214118 0.356869787 0.848080018 +0.829344843 0.167546001 0.655325032 0.488388037 0.861363492 0.910764335 +0.313737698 0.169941404 0.666685447 0.907302078 0.248601014 0.745957988 +0.043176755 0.414664986 0.453904854 0.779552847 0.742789816 0.252818002 +0.861794861 0.954920556 0.712419291 0.811553441 0.645462273 0.059346799 +0.926159325 0.442756286 0.601311711 0.884229976 0.433077558 0.779715036 +0.671816922 0.726340607 0.853881676 0.90045813 0.606437054 0.060169329 +0.795343631 0.277832983 0.268976303 0.774238864 0.469174991 0.858847792 +0.924663215 0.149478306 0.043630619 0.307382858 0.780500062 0.921664189 +0.650699651 0.091046903 0.542387231 0.902981353 0.787854199 0.687315568 +0.49622739 0.008332311 0.20141975 0.470797947 0.897271246 0.29745479 +0.496648585 0.038829132 0.973373611 0.037045728 0.053880071 0.215157485 +0.941300789 0.005605854 0.249089763 0.861051522 0.233753156 0.520636171 +0.975862611 0.146667219 0.422368816 0.537423385 0.897333537 0.157372747 +0.030484944 0.787005985 0.14066999 0.654498238 0.479219642 0.411575535 +0.946845662 0.673788601 0.719455335 0.332057889 0.064843123 0.750604428 +0.248077901 0.575666077 0.164315582 0.519313584 0.876556782 0.155467339 +0.623749467 0.989722861 0.403588797 0.43628355 0.334836194 0.181843911 +0.960364876 0.822331453 0.936265237 0.060668331 0.681611318 0.798995514 +0.549743323 0.19364614 0.972860168 0.383124883 0.247627024 0.542380553 +0.918599332 0.868722401 0.148872885 0.421625296 0.996985644 0.127710186 +0.225977456 0.343714843 0.252450193 0.606978156 0.60969737 0.256527129 +0.271651617 0.85468092 0.620790163 0.342594124 0.971703784 0.615328626 +0.312037703 0.916303806 0.998047065 0.202816258 0.713015143 0.354654336 +0.790464027 0.208556678 0.091648045 0.462822189 0.634049578 0.682642949 +0.503280817 0.285674884 0.36499608 0.923272178 0.819089504 0.055607028 +0.454362261 0.322692944 0.505282815 0.040609079 0.751122067 0.578777939 +0.187612411 0.927342123 0.192798863 0.40403399 0.161864027 0.883222375 +0.828182385 0.088497856 0.991331413 0.876087056 0.525061822 0.3061786 +0.367186466 0.39115214 0.353658655 0.04220234 0.713778079 0.585047518 +0.815687753 0.275685739 0.847357295 0.661017905 0.421476199 0.39432706 +0.952008025 0.517483337 0.053740126 0.482684585 0.805497434 0.784374605 +0.092142719 0.462499372 0.081815602 0.066710885 0.782862615 0.957070064 +0.636966517 0.906402659 0.924521587 0.173497452 0.561825101 0.025677265 +0.377061574 0.285838703 0.992416888 0.802998608 0.995592179 0.892181931 +0.258932683 0.171411285 0.708983103 0.027436013 0.461061331 0.805953461 +0.85504428 0.676002799 0.730806216 0.492254153 0.950513122 0.28990666 +0.957391142 0.638602078 0.620605957 0.701519075 0.33372438 0.070709722 +0.823254333 0.357858171 0.052565912 0.237207375 0.990691915 0.94070613 +0.886522584 0.919154443 0.435513131 0.387026482 0.290537909 0.775873189 +0.827620202 0.388989429 0.856924608 0.505023634 0.687998795 0.446488799 +0.500456438 0.8442041 0.902816823 0.883076366 0.867032878 0.042883031 +0.612464876 0.989457487 0.740583224 0.802359969 0.512720949 0.219004055 +0.207464616 0.016381262 0.08355138 0.231915311 0.54707896 0.980211648 +0.725191021 0.191465891 0.695227268 0.834354329 0.353441791 0.363099185 +0.462358889 0.274047171 0.645717595 0.950715449 0.43287544 0.557263488 +0.959561968 0.465426107 0.375415363 0.90342141 0.371481175 0.897999568 +0.898402759 0.328760193 0.716573431 0.801738777 0.131977504 0.992006564 +0.394294709 0.907174597 0.513120033 0.024484789 0.526153929 0.75581786 +0.627951972 0.498393569 0.107259641 0.790665316 0.775154374 0.276639431 +0.582743026 0.469486247 0.050415723 0.165697322 0.817443339 0.628419366 +0.056255056 0.3441275 0.96629261 0.286829457 0.436921514 0.228350664 +0.504918266 0.650991307 0.5315304 0.158594593 0.485509128 0.08096595 +0.989940879 0.264038155 0.310788985 0.998322082 0.311062458 0.52040861 +0.792652559 0.064583976 0.640949102 0.08918548 0.494395957 0.591347715 +0.130968787 0.743474192 0.09332339 0.37965189 0.057148648 0.320048118 +0.890357209 0.512964796 0.152824498 0.244708045 0.943507817 0.231288048 +0.356340881 0.582434709 0.227304505 0.849936763 0.88103944 0.841725856 +0.528002466 0.599451896 0.723576768 0.384821445 0.800688308 0.596355148 +0.257096039 0.744927096 0.940519723 0.345973658 0.801709413 0.926718185 +0.404277116 0.356411599 0.030766889 0.132334356 0.69827725 0.636331474 +0.59150377 0.964369284 0.776368203 0.889145422 0.51151256 0.524558661 +0.579793953 0.317664839 0.476863797 0.309596074 0.243607927 0.461076312 +0.087693388 0.960133062 0.28780946 0.332256421 0.363648927 0.642072436 +0.605017659 0.019591536 0.563425528 0.153429621 0.296456116 0.889315191 +0.04806823 0.761942861 0.918106827 0.50416084 0.195573142 0.730911867 +0.834377569 0.64416712 0.870108619 0.156567147 0.864670197 0.188194687 +0.888310722 0.100724473 0.300465335 0.980904367 0.893686929 0.571788365 +0.321610446 0.654604834 0.247511574 0.845344124 5.45637E-06 0.074344087 +0.007017176 0.944256323 0.016844643 0.214081724 0.590268466 0.646913576 +0.684661693 0.85063447 0.495531525 0.016527286 0.389429179 0.064428181 +0.542736498 0.223300841 0.505364977 0.732928054 0.429319937 0.863586813 +0.585076493 0.655421972 0.739034508 0.79234283 0.330171128 0.389062554 +0.479596688 0.435633101 0.901595791 0.718270984 0.835327663 0.769962359 +0.029575989 0.848415965 0.08115723 0.796474191 0.733826347 0.834029887 +0.545331043 0.031309916 0.377937273 0.589643803 0.470801172 0.189228049 +0.583867908 0.387761497 0.760043701 0.819051262 0.628414947 0.362216549 +0.351554869 0.628485874 0.908079566 0.921740718 0.162276128 0.812164374 +0.422905583 0.877654076 0.697648086 0.695334266 0.241517159 0.951176353 +0.166712614 0.042378274 0.844461537 0.439988549 0.113908671 0.964364598 +0.065683679 0.995031157 0.727916368 0.618346363 0.702291751 0.871322914 +0.258398252 0.189693929 0.593999307 0.309741155 0.329907429 0.046055106 +0.776395313 0.487564991 0.792807758 0.430352649 0.481681848 0.909310358 +0.460421668 0.623328233 0.744229569 0.872191664 0.895203765 0.951472566 +0.188787553 0.647139927 0.468750219 0.755328454 0.044780901 0.351275471 +0.211810736 0.346185763 0.728179427 0.934767692 0.06991541 0.530053869 +0.933895675 0.055637744 0.586407641 0.268237899 0.366592273 0.199557916 +0.23785041 0.05502711 0.695507971 0.550603008 0.583341473 0.423944692 +0.333007637 0.882735989 0.425435963 0.332960437 0.043390473 0.955712969 +0.930279776 0.99362779 0.677450502 0.02945231 0.81968706 0.004182334 +0.647311537 0.738807651 0.993357223 0.75053907 0.687636384 0.007441535 +0.302333791 0.218125942 0.191497261 0.947283384 0.614507894 0.069028503 +0.955256335 0.534299373 0.889515069 0.333520585 0.193465172 0.521652906 +0.824568647 0.821649383 0.705109879 0.15911338 0.172635543 0.019247936 +0.814169824 0.587107087 0.956502918 0.489248277 0.460622297 0.480815464 +0.112205223 0.501678203 0.827669538 0.095499562 0.187851246 0.066925875 +0.144703469 0.164856033 0.758261386 0.807643614 0.022748099 0.934525162 +0.410957827 0.553957859 0.00429899 0.96630628 0.00312677 0.513036143 +0.115740112 0.606522308 0.349998414 0.920858596 0.847229176 0.733131387 +0.362878924 0.47367126 0.522079677 0.032316244 0.305768481 0.195603527 +0.271058314 0.852933076 0.31904436 0.498227425 0.033610063 0.612527788 +0.898016873 0.227381763 0.45512488 0.455867315 0.303372715 0.667932879 +0.297871906 0.782395739 0.861439452 0.310046887 0.794440469 0.887899259 +0.565236696 0.034608344 0.098660793 0.040153301 0.944529297 0.252374616 +0.241540057 0.666925818 0.924306886 0.913226479 0.28194602 0.829017965 +0.902677228 0.684419391 0.396959277 0.693589267 0.781626003 0.51614506 +0.731036953 0.88446609 0.145840571 0.910666384 0.32164464 0.458031175 +0.349188024 0.129911197 0.024734598 0.455435083 0.078059637 0.028624082 +0.009409676 0.72570802 0.956715964 0.117948469 0.07047035 0.49795874 +0.464448764 0.125221488 0.8174517 0.01799031 0.017958514 0.520631797 +0.446133478 0.836761943 0.630953738 0.01102406 0.356376731 0.26969224 +0.764793036 0.74906072 0.857832156 0.284572131 0.076640703 0.935317689 +0.393066434 0.240335603 0.897930168 0.049265199 0.788247627 0.737457493 +0.138944148 0.781108192 0.534435438 0.085597552 0.885947473 0.300757685 +0.146808286 0.831439521 0.356977911 0.759506417 0.673219519 0.270640545 +0.156160723 0.046084324 0.874744725 0.338110336 0.62075798 0.965807694 +0.283334363 0.85103231 0.604216072 0.574935658 0.167079779 0.861677586 +0.345254787 0.610003501 0.776364132 0.13231419 0.950919639 0.570976531 +0.250611442 0.852022586 0.904824381 0.313674622 0.365526593 0.302130106 +0.642911035 0.899663819 0.844437218 0.509516608 0.467659192 0.592119955 +0.639315203 0.734648678 0.202320092 0.754156328 0.774422794 0.977715261 +0.019991391 0.398036021 0.271203408 0.059589254 0.379368164 0.514334456 +0.539703245 0.552798727 0.624753757 0.110191264 0.640751406 0.778659828 +0.815466032 0.070736838 0.686900791 0.380129659 0.11894601 0.701471748 +0.705865446 0.852143407 0.155064385 0.852089616 0.140955734 0.459953543 +0.359964522 0.298639425 0.148873333 0.699168618 0.226372913 0.252248934 +0.812660226 0.453376114 0.006141374 0.117696113 0.767559573 0.688518343 +0.675868726 0.323600205 0.485282345 0.045115344 0.063233534 0.680842162 +0.704346839 0.984655273 0.733444119 0.516239599 0.800694328 0.745028432 +0.184914984 0.477010196 0.094056292 0.866900474 0.265599115 0.994612324 +0.372491298 0.501455992 0.295448659 0.198441796 0.402046133 0.097970181 +0.07941628 0.521251258 0.136587917 0.961980835 0.803573771 0.300581779 +0.215536178 0.12843629 0.277124848 0.165504303 0.953664688 0.255907748 +0.463294012 0.226304421 0.716283187 0.079549227 0.552812894 0.473147877 +0.484703845 0.967202446 0.744401615 0.874939277 0.16706723 0.692339033 +0.801112093 0.728677672 0.18029159 0.965410669 0.469658112 0.611127224 +0.889128977 0.337162864 0.202393456 0.394470815 0.753862947 0.134641615 +0.301309293 0.476726231 0.143887656 0.369799189 0.746848119 0.878134893 +0.90116564 0.994102959 0.49893699 0.582227051 0.240056247 0.106840606 +0.039692341 0.318189911 0.855051132 0.732405251 0.542985487 0.723433535 +0.601668413 0.357527115 0.362033737 0.8469795 0.017403214 0.704974092 +0.756334036 0.540941628 0.512624433 0.913731663 0.065530225 0.766613472 +0.849944197 0.946074866 0.463306974 0.250405229 0.722374598 0.007957899 +0.93690098 0.228247501 0.272542644 0.096107522 0.108321348 0.964715855 +0.134474282 0.910939804 0.139254346 0.439404854 0.818564835 0.858865172 +0.875165934 0.396134825 0.066445667 0.771602814 0.027318788 0.317149041 +0.809279181 0.226907006 0.856296047 0.796221985 0.243085216 0.068423011 +0.950221894 0.704260808 0.973929622 0.924915027 0.746232071 0.134137062 +0.320181657 0.28973888 0.92260181 0.23998437 0.05048986 0.008728497 +0.686295866 0.866563308 0.143758045 0.026761941 0.729730311 0.510014422 +0.70183514 0.193289116 0.583975936 0.862074963 0.579097194 0.473687164 +0.184661958 0.67936217 0.696639359 0.420319515 0.382266521 0.557243027 +0.821577294 0.679589942 0.85568287 0.718688026 0.387009833 0.949125631 +0.473238615 0.001987905 0.020725114 0.9322799 0.933740361 0.01719074 +0.400789624 0.903400652 0.832862983 0.141805816 0.246630946 0.21330028 +0.342461555 0.862184339 0.983137095 0.14152543 0.229116833 0.993475105 +0.833822458 0.650357232 0.33969463 0.0395666 0.93234415 0.12813505 +0.113491907 0.362389508 0.924876532 0.446766313 0.091346413 0.626015179 +0.462124343 0.69281973 0.285005647 0.950490337 0.955538528 0.090567815 +0.957102359 0.345736275 0.178943123 0.285186794 0.912531012 0.943571028 +0.413003945 0.92107251 0.081757216 0.217010625 0.958826169 0.684102411 +0.816255076 0.617142593 0.231793927 0.289664601 0.383526485 0.843558498 +0.808259929 0.925530248 0.697614743 0.152136147 0.265500392 0.540873411 +0.272403541 0.445561169 0.307778203 0.386846431 0.305701103 0.331605944 +0.644571013 0.926396946 0.761514873 0.930615487 0.514978902 0.580657386 +0.700427113 0.829712558 0.408677415 0.007606088 0.717926666 0.969042672 +0.10119879 0.150512121 0.2056158 0.505071982 0.827055401 0.646306835 +0.26434073 0.932838744 0.913631773 0.454714665 0.363231837 0.140403874 +0.905326973 0.606462226 0.55578905 0.535331366 0.359162134 0.202940042 +0.068194102 0.222802156 0.36109038 0.958739694 0.988118924 0.408327366 +0.155206357 0.224217784 0.604807968 0.191647858 0.042603257 0.958147364 +0.537272706 0.302818214 0.085929953 0.813317929 0.975982871 0.831706209 +0.613253312 0.755672603 0.639787497 0.334480953 0.368825797 0.30439312 +0.159857557 0.123426281 0.897173216 0.636844522 0.046570226 0.245653611 +0.197375344 0.184117913 0.900628737 0.508587495 0.013285784 0.034256915 +0.358094122 0.171444129 0.266483001 0.82418995 0.727210163 0.716091683 +0.161170319 0.589952547 0.265648452 0.876893731 0.394694931 0.401991879 +0.123749711 0.728471261 0.60896587 0.727878589 0.574947407 0.613907356 +0.511682854 0.307873756 0.476962207 0.864651439 0.662466024 0.586387735 +0.335195524 0.089251608 0.312305705 0.198722004 0.320920123 0.135808772 +0.292572009 0.19618544 0.683962397 0.891896097 0.448198086 0.679965215 +0.616119654 0.23943149 0.960848604 0.908510573 0.507953991 0.0383419 +0.880524829 0.376221946 0.890546705 0.004292591 0.646335372 0.4437088 +0.520637024 0.560998958 0.899297586 0.615266595 0.312795491 0.05507136 +0.893433733 0.006053666 0.562680264 0.518253589 0.241124798 0.695459488 +0.847507245 0.488250367 0.169686209 0.083661052 0.144207961 0.03253979 +0.641413439 0.899743568 0.11594974 0.702976572 0.088025174 0.191550588 +0.093980942 0.439394027 0.336345439 0.419696832 0.550061428 0.79116361 +0.880595444 0.045843527 0.700571602 0.665529373 0.360988811 0.977879918 +0.77147395 0.429808918 0.297824091 0.276713085 0.997243019 0.818975625 +0.094524438 0.08852079 0.535054155 0.694154528 0.467239644 0.281830684 +0.642684622 0.004136936 0.190795046 0.608422442 0.918569299 0.663817788 +0.327122875 0.659317808 0.946259885 0.575621599 0.997076558 0.04364506 +0.184890034 0.285069722 0.30207557 0.73648444 0.314596092 0.148854975 +0.789208088 0.271039087 0.189815723 0.59243445 0.413886572 0.05100276 +0.538302655 0.579705649 0.362248724 0.575250019 0.49918714 0.391683855 +0.742489369 0.491054112 0.43898985 0.43055371 0.802733392 0.1132399 +0.635744904 0.234107195 0.929807371 0.608022276 0.876532487 0.501155359 +0.508321085 0.317457522 0.247478942 0.253272459 0.823111482 0.009737671 +0.663882972 0.11343342 0.492701573 0.421432319 0.451687047 0.292836629 +0.846859661 0.488465098 0.963609228 0.461527437 0.700631788 0.006931254 +0.154363926 0.890849692 0.809866649 0.284619438 0.604610053 0.741999172 +0.09023592 0.005332895 0.582634539 0.59374604 0.051537906 0.623078958 +0.149868497 0.69762579 0.561674875 0.449579344 0.301472887 0.605226809 +0.41928794 0.013134477 0.839581966 0.164280435 0.330029428 0.775534081 +0.737042129 0.821627792 0.128974228 0.931959742 0.074465745 0.193620502 +0.960112834 0.337600812 0.294453905 0.399147132 0.616032493 0.014650022 +0.869398346 0.877393347 0.244437414 0.993118881 0.995657896 0.620091772 +0.68775989 0.888513922 0.288865735 0.037803965 0.045881415 0.218773136 +0.772146704 0.575839774 0.18117315 0.499502957 0.462141248 0.237000078 +0.281133019 0.919843405 0.179596469 0.447386417 0.557140955 0.946331881 +0.765111006 0.229535823 0.802302096 0.625299747 0.015187806 0.906680828 +0.647461354 0.639771091 0.687559015 0.128020766 0.143014944 0.684426477 +0.512717006 0.33065928 0.582706143 0.22224803 0.259876244 0.252642483 +0.033756614 0.721244099 0.0413673 0.217844143 0.700738362 0.728910388 +0.192584814 0.215921687 0.35314613 0.465566036 0.24547646 0.686663078 +0.40978655 0.838034642 0.734573603 0.662968665 0.905263891 0.318387628 +0.942890098 0.178952001 0.766686403 0.62427064 0.083975593 0.003319566 +0.432702942 0.807102204 0.340639407 0.972724534 0.696351661 0.50927747 +0.014758455 0.423924526 0.073021985 0.008965202 0.340396951 0.061170774 +0.408666417 0.045415205 0.444370607 0.963711227 0.72974735 0.575209885 +0.064351694 0.622086533 0.823719346 0.751226387 0.840286026 0.883819315 +0.502166215 0.343007703 0.596947943 0.40693788 0.075396961 0.137028044 +0.015301704 0.549750735 0.188849619 0.373092842 0.642336124 0.710973976 +0.662292957 0.755943875 0.582867508 0.851251151 0.642679707 0.522178201 +0.334538129 0.983790262 0.89437641 0.663403064 0.427544131 0.273942766 +0.823884474 0.397873849 0.156091049 0.565141028 0.275355145 0.68274359 +0.344962398 0.95938495 0.429558445 0.905222881 0.036223714 0.503446397 +0.657083651 0.742763127 0.671407576 0.803296266 0.79342417 0.0347376 +0.816943591 0.61609888 0.24846274 0.511642306 0.816246123 0.426563449 +0.393301671 0.683871994 0.514540373 0.765006718 0.715894019 0.009528296 +0.006653235 0.75130103 0.116271371 0.384651339 0.517720128 0.540813219 +0.566362418 0.277872647 0.452452071 0.164014276 0.817938913 0.25340198 +0.346103625 0.406349452 0.991960796 0.093155189 0.93948344 0.89157526 +0.245710841 0.836824652 0.409068535 0.343125859 0.915527068 0.611163821 +0.17872346 0.587935527 0.620605039 0.050284977 0.683795123 0.337511515 +0.53982806 0.884464055 0.464423701 0.110904645 0.111725762 0.669734619 +0.137051269 0.909842028 0.60704257 0.759252279 0.797675997 0.913581537 +0.510119569 0.920810846 0.795957111 0.848497396 0.679402601 0.296618464 +0.422870788 0.180789508 0.975997848 0.770546636 0.511968917 0.116349323 +0.264778838 0.195559965 0.915788963 0.298749635 0.250803956 0.547924204 +0.7591759 0.083287507 0.513335597 0.79563431 0.187047052 0.336990875 +0.952307729 0.529148335 0.698521648 0.29308883 0.833508545 0.786677512 +0.831840087 0.61583739 0.53640837 0.092367101 0.201720801 0.666340825 +0.64320453 0.309580014 0.312838548 0.647207621 0.037685364 0.065208796 +0.359399502 0.394992101 0.0899711 0.202640405 0.076892508 0.262817002 +0.896099577 0.899688548 0.542660114 0.384909713 0.158027394 0.69020135 +0.797428978 0.31663 0.799813544 0.063100502 0.913835872 0.189533227 +0.891872325 0.385091953 0.176764801 0.42884888 0.940518684 0.856558413 +0.847502382 0.046495912 0.47269047 0.030416107 0.764072664 0.427861735 +0.994522271 0.916957725 0.768148205 0.220983491 0.069456296 0.364074667 +0.91298553 0.647948768 0.291111142 0.584586606 0.637441314 0.721628955 +0.361297662 0.681868055 0.147401704 0.639247415 0.382399598 0.851690548 +0.827640172 0.123598975 0.515603945 0.242754891 0.738347443 0.730177222 +0.319886392 0.751493003 0.465838913 0.937041468 0.291220584 0.366943207 +0.839462954 0.508753998 0.424336652 0.604000357 0.340620222 0.746270904 +0.371717212 0.375102892 0.926394427 0.987803837 0.593444541 0.12014309 +0.701378808 0.140388429 0.35814708 0.116533973 0.023386688 0.409441267 +0.969814481 0.481521921 0.108043579 0.93880393 0.704720451 0.124549135 +0.953202612 0.460676028 0.689908898 0.498926007 0.521706252 0.732383666 +0.048445397 0.71056061 0.483876664 0.07895779 0.380763721 0.893957808 +0.649634858 0.563022855 0.69860311 0.274355615 0.327818078 0.656672821 +0.09893627 0.574474915 0.851803349 0.317743518 0.074384876 0.991517976 +0.513043601 0.764588309 0.518676174 0.415903785 0.913531357 0.289156721 +0.201216267 0.066627829 0.694856352 0.136117979 0.71939969 0.070878791 +0.121613035 0.481130673 0.838252352 0.908556243 0.939859428 0.230889763 +0.483303628 0.094863269 0.911886681 0.50093289 0.544918846 0.096181322 +0.869870597 0.347651912 0.65952477 0.561563321 0.239429217 0.241108075 +0.283820006 0.38305491 0.038437737 0.234531201 0.492936827 0.804929361 +0.448285613 0.75969379 0.353687773 0.081839087 0.662051406 0.574464322 +0.888629773 0.569349185 0.662016372 0.033198469 0.842025416 0.050673492 +0.527169586 0.840197311 0.304488129 0.801867402 0.279087054 0.985312279 +0.152202015 0.963222728 0.131687544 0.583250715 0.895345854 0.470814956 +0.317896011 0.752138915 0.083247523 0.56701524 0.154933532 0.168644159 +0.452610012 0.376469088 0.24260154 0.417058094 0.682420287 0.586146952 +0.700946139 0.356821108 0.440328995 0.708196252 0.218440026 0.30510737 +0.725295159 0.929687225 0.431972597 0.509972058 0.4097839 0.27207374 +0.114611338 0.781142794 0.9530156 0.269580437 0.686285946 0.56436851 +0.16760453 0.952357503 0.369884459 0.556833935 0.970765953 0.728718245 +0.896077188 0.533719344 0.836853574 0.74699032 0.321952231 0.845619272 +0.689764611 0.804836533 0.433483512 0.31523227 0.824192293 0.994675952 +0.277737857 0.081538542 0.05870159 0.763211406 0.635049731 0.494130259 +0.536106029 0.492811647 0.420925172 0.573129292 0.929032625 0.453845823 +0.555233457 0.498792822 0.500576884 0.156061586 0.661440515 0.742488247 +0.029231836 0.38840033 0.025128059 0.397897734 0.932911334 0.83560821 +0.673707478 0.928508947 0.140514358 0.713746185 0.860945125 0.838465319 +0.081749226 0.848723094 0.011951505 0.512101222 0.798171855 0.815444439 +0.040455545 0.054752616 0.808999451 0.209300545 0.981546998 0.504203408 +0.32544525 0.246248579 0.342930113 0.525891013 0.321120895 0.780568094 +0.551208632 0.279464536 0.408800269 0.374230808 0.26303893 0.526783335 +0.273823898 0.070046803 0.392118837 0.846611477 0.985897204 0.387915956 +0.534419454 0.542990484 0.14907347 0.596356228 0.300163871 0.663726464 +0.814526424 0.850297898 0.840252775 0.489113959 0.888286934 0.593645968 +0.873369476 0.683655342 0.107544316 0.316276671 0.62183862 0.240385333 +0.878370274 0.117770337 0.709645582 0.288445704 0.649062853 0.025949859 +0.635759161 0.312109263 0.684990731 0.625166978 0.165132799 0.367949225 +0.294277764 0.158923004 0.425185889 0.765030069 0.782678761 0.991554846 +0.440312116 0.108436324 0.286707929 0.160863474 0.327320394 0.728406595 +0.743441678 0.740501448 0.499352261 0.145062069 0.154995952 0.75650988 +0.667008791 0.726773876 0.5139437 0.151081944 0.508012782 0.354948288 +0.239155489 0.376092028 0.287762465 0.325347547 0.862373918 0.017855275 +0.276168998 0.392586286 0.730540396 0.953501492 0.233184675 0.890329438 +0.691721964 0.246493821 0.689754138 0.071362423 0.227658348 0.299602428 +0.090749215 0.652990677 0.26276084 0.461436733 0.510820325 0.251111303 +0.922736849 0.104595324 0.079561109 0.713306945 0.327082993 0.246811174 +0.59485815 0.263133014 0.085605778 0.32299973 0.949467161 0.756052819 +0.767552941 0.043201599 0.493272313 0.307036471 0.555405333 0.134691841 +0.753674817 0.504528291 0.382986572 0.982758244 0.234337963 0.499691417 +0.830737305 0.365579517 0.21346628 0.458648533 0.373559708 0.783746478 +0.144044112 0.454286288 0.625980173 0.683466024 0.125319258 0.840400429 +0.913715264 0.6806615 0.698542707 0.583042939 0.701122837 0.36103923 +0.302404155 0.975585155 0.785968766 0.579515214 0.986195599 0.268780314 +0.714015637 0.840236389 0.713322597 0.59568035 0.515682596 0.545266735 +0.829910517 0.719624498 0.156609401 0.71662948 0.588846406 0.579267029 +0.795909837 0.890200172 0.68311334 0.373303598 0.297488586 0.443419311 +0.174800745 0.84643824 0.793121306 0.328074571 0.953994427 0.614002602 +0.980537501 0.838963893 0.742851018 0.820834178 0.536151725 0.194934503 +0.240459008 0.18540009 0.409406238 0.039929597 0.089566686 0.274894234 +0.966653924 0.898793865 0.69143083 0.637911416 0.009575908 0.109591221 +0.455762518 0.782442844 0.412625732 0.730064478 0.864156857 0.420837619 +0.851980012 0.501858478 0.122868614 0.085745839 0.393565434 0.687116689 +0.242642342 0.640818233 0.147623697 0.944145638 0.328402679 0.390548933 +0.364372434 0.103664986 0.202944681 0.203971325 0.752660752 0.376779227 +0.70698376 0.102606456 0.813623181 0.115860126 0.325771403 0.546438937 +0.772331065 0.36608067 0.488500765 0.191395344 0.514651135 0.903811962 +0.336145346 0.197119243 0.079146778 0.721760185 0.264599673 0.293038967 +0.958006045 0.764565315 0.018662518 0.132276122 0.914310282 0.707859796 +0.514395117 0.4410144 0.840441209 0.06896563 0.850996021 0.346684503 +0.359127582 0.082431234 0.341716499 0.007644679 0.319320575 0.263307064 +0.152352312 0.739341799 0.92244015 0.2125228 0.889170275 0.071199966 +0.243117373 0.832229694 0.756930311 0.236672304 0.702707794 0.257049804 +0.746585007 0.21468542 0.802794062 0.669802915 0.896740712 0.534925495 +0.071387926 0.756384938 0.767531422 0.711403781 0.24978745 0.595750074 +0.195480365 0.453138872 0.245336143 0.030388908 0.914788524 0.908272096 +0.805953417 0.249837482 0.282490608 0.188542616 0.599047455 0.593983728 +0.474036047 0.449076151 0.451455858 0.07012459 0.277394069 0.901346215 +0.077715674 0.851932038 0.464097656 0.242670733 0.330214444 0.406388397 +0.459580645 0.102204815 0.188738603 0.244684923 0.098741608 0.853526953 +0.64388825 0.658322197 0.134155536 0.912413838 0.586465564 0.374884638 +0.994946509 0.872580842 0.847765741 0.724568529 0.057578059 0.121001988 +0.860706327 0.505265721 0.069350832 0.199195111 0.914879444 0.56967884 +0.703835587 0.178632826 0.432942662 0.514585594 0.494325213 0.505263462 +0.627527623 0.826745902 0.115416125 0.620201206 0.311618481 0.817691196 +0.827431694 0.474925881 0.665286715 0.917035209 0.428798758 0.807650985 +0.692563023 0.892366182 0.084008719 0.220023962 0.462599129 0.330889233 +0.385393488 0.536398516 0.383351415 0.760250193 0.432154798 0.566365696 +0.994551024 0.149786579 0.701681492 0.208543361 0.097003728 0.560259684 +0.193002178 0.899297375 0.913032876 0.304712319 0.070235772 0.872121769 +0.873827059 0.567666678 0.217252569 0.465737997 0.522591575 0.911040832 +0.654776771 0.07549213 0.574573291 0.536316133 0.640677541 0.010795312 +0.218274505 0.432918973 0.320707674 0.74724035 0.968460728 0.083527626 +0.517821659 0.00715791 0.614910253 0.549780405 0.752212294 0.302629987 +0.112880907 0.482226328 0.777044631 0.057890327 0.478996402 0.035918484 +0.502555097 0.965940522 0.495792322 0.976967814 0.255181988 0.09545778 +0.927036499 0.753733238 0.754646112 0.05057932 0.563101361 0.888486242 +0.566321597 0.95711126 0.009005602 0.347782064 0.686473274 0.796295573 +0.051688967 0.46294935 0.007893451 0.61275975 0.158804765 0.458208446 +0.582106043 0.55578176 0.222687888 0.207209576 0.829582535 0.972278379 +0.924469634 0.642288864 0.958971289 0.286946131 0.193317332 0.367652343 +0.406339641 0.956662765 0.15700646 0.496742638 0.306841638 0.997407267 +0.188800328 0.071089482 0.864631381 0.754063623 0.935318031 0.517380311 +0.046051782 0.151154434 0.576352847 0.246737133 0.241926975 0.485700009 +0.462304864 0.256209626 0.414736888 0.906205009 0.018047293 0.059089532 +0.638422901 0.698190484 0.622433584 0.072419814 0.522691015 0.032036381 +0.358891972 0.767838998 0.19217443 0.409457412 0.877643719 0.81762451 +0.380032629 0.360802703 0.877410075 0.486150134 0.804223509 0.837949145 +0.199514796 0.241856632 0.135308453 0.726084158 0.120954516 0.770526634 +0.301130644 0.460786771 0.207774108 0.499437115 0.072459933 0.687112727 +0.432420583 0.579688561 0.632203613 0.931242859 0.797035418 0.147173267 +0.142497674 0.321379721 0.586288586 0.773472865 0.566600831 0.03657692 +0.212456928 0.092194714 0.274208224 0.769834993 0.059832951 0.398258252 +0.666193546 0.911364845 0.106699705 0.217058727 0.961465032 0.314061556 +0.916624812 0.780176816 0.701282682 0.47498922 0.026500059 0.53696773 +0.185509871 0.046589577 0.432053857 0.430114529 0.264812684 0.647252003 +0.082896008 0.779286858 0.726258518 0.826308802 0.783632589 0.474136193 +0.951345731 0.384881451 0.738830016 0.059955522 0.389255244 0.073847371 +0.435756809 0.433495516 0.783300227 0.907642552 0.643917114 0.848093294 +0.143381812 0.870626038 0.792739656 0.536751475 0.239027139 0.063820064 +0.357992946 0.975536875 0.63020439 0.865219157 0.187446525 0.401888662 +0.246644867 0.749262526 0.704764685 0.538200543 0.98209493 0.248645027 +0.264559724 0.166771311 0.789649972 0.573538944 0.625445561 0.165984841 +0.993920569 0.298368683 0.677307413 0.772553933 0.464267345 0.683538006 +0.041254777 0.984257851 0.749505934 0.899838652 0.752786266 0.925364772 +0.88121023 0.683296513 0.526048656 0.072984298 0.328087834 0.271153512 +0.033239867 0.224506684 0.052578458 0.964600998 0.03317846 0.041813534 +0.220649478 0.900579504 0.603711304 0.669267727 0.721700949 0.923201086 +0.233332541 0.284286119 0.37681625 0.761724247 0.216913213 0.556587971 +0.357497918 0.173458671 0.72289755 0.947919526 0.628993948 0.2864762 +0.256205219 0.022325995 0.601006339 0.33594159 0.404359471 0.976253777 +0.219401047 0.22211746 0.087688925 0.423506933 0.985104903 0.118381789 +0.553800931 0.915937533 0.490529675 0.232155022 0.032766812 0.728147175 +0.609359487 0.46772219 0.459431258 0.259960599 0.638317965 0.431305431 +0.205072771 0.864686892 0.893148319 0.109625591 0.026949215 0.641657839 +0.885748757 0.924143925 0.239469291 0.750323607 0.995889416 0.652532149 +0.611337428 0.462118828 0.503622562 0.106038492 0.25290182 0.67705736 +0.265398032 0.595674818 0.772200833 0.300273809 0.582594454 0.246060724 +0.676821879 0.061165891 0.097555569 0.336948548 0.011227884 0.567800063 +0.455709373 0.340666574 0.465047412 0.910894365 0.668083841 0.432840753 +0.442547194 0.269821582 0.803120672 0.209622292 0.193268169 0.360012708 +0.002236415 0.381192153 0.339750764 0.261451841 0.368510325 0.394121868 +0.76540732 0.404450517 0.382056126 0.90728286 0.917451711 0.643290291 +0.784494756 0.21775568 0.327860062 0.528105441 0.562098858 0.040407026 +0.153278684 0.748457631 0.298238893 0.74733054 0.541960774 0.419799556 +0.108157888 0.624768783 0.152948888 0.135900302 0.699046335 0.921521568 +0.567448295 0.353259883 0.906660819 0.822885146 0.065393099 0.291889727 +0.136595832 0.37105874 0.714940513 0.109560167 0.764289225 0.619028036 +0.391288853 0.543193106 0.980664189 0.517743737 0.758717372 0.99665291 +0.859929881 0.610875222 0.600028561 0.770534898 0.720598196 0.212002834 +0.036320963 0.627180114 0.931468309 0.199561275 0.880514917 0.189936582 +0.168617709 0.743126551 0.634281667 0.340856298 0.616593964 0.206502347 +0.009499342 0.88102892 0.44065102 0.690158823 0.052787408 0.952945442 +0.15422211 0.406006866 0.838506317 0.847657154 0.921475856 0.957973885 +0.035134585 0.398831965 0.926616992 0.848910521 0.065718584 0.121806535 +0.768982995 0.975753608 0.334232117 0.738533574 0.821010879 0.551144496 +0.497078489 0.620509071 0.035472703 0.699171835 0.914712262 0.483234065 +0.070328942 0.140018487 0.323148557 0.577111985 0.803210494 0.303452249 +0.997472259 0.0700638 0.183303579 0.373977361 0.110448715 0.47224852 +0.484105292 0.526347128 0.077216539 0.288897119 0.294962262 0.396992019 +0.598519202 0.439730427 0.616245924 0.11138296 0.553758659 0.29401195 +0.079410991 0.579210615 0.153670298 0.550873842 0.300731609 0.422708288 +0.299173245 0.101908914 0.96943249 0.088837739 0.663718493 0.791681344 +0.197992066 0.424982599 0.532235815 0.724612641 0.13359056 0.415563401 +0.546585219 0.986499526 0.310415219 0.260673701 0.215216089 0.080940212 +0.388857693 0.633242746 0.026669802 0.179478084 0.654692965 0.094392726 +0.48254259 0.195152413 0.320099038 0.035667419 0.694253832 0.515753882 +0.46919335 0.531324493 0.673435878 0.644205753 0.563661143 0.475464391 +0.297277076 0.959772827 0.564625596 0.586266484 0.539585506 0.41659262 +0.179252442 0.594307078 0.969068074 0.465641355 0.244032024 0.184809513 +0.7957756 0.708397429 0.429905806 0.594052778 0.120174813 0.646274912 +0.14031633 0.377391856 0.584367646 0.995166831 0.417448214 0.68708457 +0.791564366 0.903169262 0.455915877 0.336013385 0.412628641 0.597316258 +0.008279061 0.139795096 0.881026131 0.989570159 0.446918624 0.040768457 +0.620159024 0.266569009 0.118842907 0.668637682 0.01533406 0.059283247 +0.497026539 0.036406059 0.6452501 0.830997728 0.879577288 0.647895038 +0.858928585 0.655429971 0.332121779 0.48082125 0.731459038 0.740127932 +0.15428358 0.893668788 0.027529624 0.535950979 0.875716463 0.817327553 +0.882012685 0.342526954 0.811758361 0.184490843 0.384855294 0.957428418 +0.483882458 0.413420601 0.627416552 0.10862769 0.438970841 0.111546 +0.511656976 0.633219665 0.983844548 0.576043448 0.726453088 0.955121305 +0.513986524 0.194394531 0.810004413 0.811002516 0.941607821 0.637727218 +0.056990849 0.072539276 0.405860746 0.25437687 0.096372027 0.606073697 +0.41468953 0.829386194 0.249581015 0.457110774 0.550088184 0.191423582 +0.72577452 0.401020179 0.629740688 0.834865134 0.231325094 0.495292086 +0.717227985 0.996350831 0.387669936 0.995871425 0.330502605 0.33809828 +0.201523819 0.237342361 0.568383494 0.6028373 0.986825291 0.225361155 +0.277023484 0.587486171 0.921225308 0.585598586 0.03838097 0.259713077 +0.592823866 0.584777341 0.753599433 0.375677838 0.037550312 0.269552514 +0.441758253 0.301795899 0.378569164 0.642667485 0.825351019 0.030918633 +0.639692566 0.487979451 0.482388723 0.353415123 0.388632505 0.405746733 +0.718396882 0.080697246 0.97052919 0.995242238 0.550580659 0.342997307 +0.084163784 0.905888942 0.736882095 0.646990222 0.187447902 0.39219298 +0.091101276 0.906192878 0.842117659 0.097281956 0.869078683 0.293556691 +0.834380402 0.207662964 0.356821585 0.474435124 0.880844716 0.97096172 +0.946096671 0.936933909 0.194174843 0.243747114 0.345217586 0.142889357 +0.011607063 0.384557689 0.999184197 0.337142203 0.33075543 0.676931107 +0.014446081 0.441641509 0.370102049 0.690420827 0.156099666 0.784863659 +0.221272695 0.096073861 0.216172504 0.651080767 0.575108375 0.405792099 +0.209876698 0.44735996 0.273798352 0.452982411 0.550134616 0.648907297 +0.929948004 0.043039609 0.148441795 0.298828126 0.075308634 0.815317467 +0.252966119 0.157100178 0.13336722 0.547126248 0.049232278 0.08276455 +0.030983412 0.787280742 0.170748776 0.930904114 0.15978497 0.125173441 +0.008676848 0.412575387 0.23352537 0.857896441 0.408234808 0.435187523 +0.219737701 0.723775007 0.861455575 0.87589752 0.434459418 0.965003952 +0.06152308 0.257401748 0.37102075 0.47646877 0.78958093 0.386757445 +0.537322826 0.908067601 0.043560554 0.303923801 0.108474211 0.032335201 +0.284240408 0.584288935 0.206888576 0.889461079 0.686681436 0.732372886 +0.728933138 0.980491333 0.648548419 0.837673194 0.923845662 0.144535505 +0.677765501 0.138527421 0.256619828 0.089282873 0.411611649 0.081363078 +0.912532789 0.811989822 0.262952997 0.920301613 0.309064491 0.812966386 +0.293609551 0.93460898 0.255141156 0.287605748 0.561463066 0.655994548 +0.733419893 0.491208335 0.551357761 0.773122961 0.845437278 0.045479845 +0.436521976 0.150461565 0.516453058 0.557065989 0.602102858 0.044828371 +0.163896821 0.748164556 0.992077317 0.446080663 0.264019918 0.720618753 +0.850177589 0.339762837 0.213183334 0.533084699 0.210029609 0.870636726 +0.043734694 0.458498904 0.663342281 0.633897577 0.216312095 0.478793618 +0.221050106 0.343783188 0.221853889 0.84992718 0.92785432 0.733180365 +0.479664995 0.685492974 0.736628475 0.46850213 0.303619764 0.58222414 +0.374346507 0.219168348 0.179769448 0.936658594 0.434154833 0.297049843 +0.240007406 0.615811999 0.482056226 0.063157002 0.0961389 0.27985701 +0.288864303 0.728970313 0.664369103 0.374341977 0.442499699 0.294333838 +0.851884585 0.604088735 0.771495707 0.041925223 0.982600699 0.605743859 +0.948020127 0.19707848 0.641617405 0.47780907 0.363132731 0.735593124 +0.09619448 0.25810946 0.786876085 0.393313274 0.487248498 0.459890469 +0.908982105 0.290190481 0.095235558 0.148519515 0.807811071 0.708042419 +0.37015243 0.415099674 0.339238327 0.504768756 0.905012595 0.85857422 +0.464849012 0.851741327 0.691102845 0.35068473 0.379132228 0.875920197 +0.391554395 0.687308817 0.614815604 0.683600497 0.516606055 0.780802919 +0.314056471 0.50983375 0.095400077 0.511854314 0.471933249 0.461001705 +0.172708084 0.033902129 0.450709199 0.13556417 0.085697209 0.165418284 +0.988230595 0.255706662 0.719128312 0.433134649 0.507442484 0.038997796 +0.095736741 0.202527496 0.228762096 0.157175567 0.18868996 0.279767333 +0.612083146 0.360426363 0.081465154 0.051018938 0.790755555 0.941363716 +0.957080236 0.905715002 0.053830632 0.106434688 0.063637084 0.968167402 +0.81825689 0.336638447 0.956913718 0.295017096 0.744144108 0.730693102 +0.431767751 0.615438876 0.738982939 0.970324683 0.675093475 0.015997358 +0.783756179 0.487842705 0.666748584 0.523981102 0.231017963 0.757386956 +0.21144871 0.771562607 0.62886419 0.533089552 0.066954494 0.013164525 +0.9168777 0.766998598 0.4870174 0.152213594 0.526996511 0.048278044 +0.956286357 0.751826368 0.204184769 0.930736 0.865618429 0.756840774 +0.16699675 0.429831775 0.332905443 0.622928249 0.012836225 0.06965892 +0.736957628 0.434731971 0.900281806 0.702452631 0.771017898 0.463892144 +0.833693999 0.695677485 0.799230971 0.299786769 0.257046726 0.257414288 +0.054370361 0.93511233 0.683668353 0.678921765 0.612224086 0.271206152 +0.014892301 0.893886068 0.726939807 0.267113824 0.905814779 0.476119075 +0.331427843 0.401737417 0.954016154 0.643706922 0.955433552 0.042819884 +0.810489192 0.938317711 0.22429258 0.739024272 0.013044269 0.965276884 +0.74290508 0.61458412 0.584526123 0.11348277 0.219328239 0.590709719 +0.260681027 0.397718664 0.065756335 0.152953507 0.478221468 0.67696357 +0.558299146 0.354505521 0.890295422 0.950907218 0.788700306 0.935832348 +0.986098549 0.613533228 0.63949368 0.849957099 0.301306632 0.879806933 +0.919559801 0.558468103 0.762629306 0.360240268 0.879279444 0.023601284 +0.387746575 0.917932884 0.087057977 0.636181009 0.871060917 0.178656254 +0.66329953 0.653930014 0.413559187 0.208921471 0.573781133 0.029162478 +0.36052316 0.099667865 0.582737154 0.925927403 0.220168642 0.400671924 +0.333608149 0.096894733 0.918701947 0.59902313 0.767628012 0.756624208 +0.377006763 0.708238861 0.242083941 0.034197463 0.872768957 0.590941102 +0.642640996 0.671095512 0.326831083 0.523767995 0.87381511 0.707851648 +0.653534953 0.705018639 0.32468049 0.133206937 0.313776745 0.968468902 +0.596194463 0.017771374 0.977515764 0.650910929 0.414520978 0.495598481 +0.488605368 0.681732627 0.710419523 0.694585205 0.320109681 0.730423376 +0.122872472 0.269842626 0.771689774 0.295042656 0.300528913 0.527574277 +0.743557853 0.929031734 0.206771902 0.361729368 0.43256622 0.12064847 +0.907109118 0.495865218 0.928546846 0.129870461 0.063412498 0.686995752 +0.669920902 0.692398406 0.446294787 0.990912503 0.027268431 0.944914251 +0.072542224 0.403663873 0.117995251 0.90272527 0.123009048 0.555317422 +0.592440237 0.713729154 0.328023804 0.697681738 0.947351995 0.681286359 +0.873576845 0.03460579 0.371196365 0.317239461 0.152250662 0.406647345 +0.01091741 0.679687688 0.078908231 0.328769755 0.133218066 0.836853762 +0.82785151 0.660638981 0.02004943 0.223822298 0.790671339 0.921865499 +0.800309651 0.397094143 0.923915486 0.300583058 0.179402603 0.577677819 +0.170065839 0.827260833 0.181371025 0.389096705 0.377581096 0.469053689 +0.816868881 0.741788017 0.281685156 0.426433236 0.730312174 0.714935727 +0.081772726 0.161572018 0.86585059 0.754093514 0.581242515 0.032454733 +0.565148312 0.459702697 0.379360694 0.791566208 0.798036714 0.292240395 +0.276808332 0.742638902 0.950595138 0.491492817 0.907989509 0.709870808 +0.488283314 0.766893092 0.170761486 0.434384804 0.171460517 0.511980989 +0.277346599 0.261213881 0.096186314 0.160660595 0.302343649 0.19768776 +0.207511184 0.211464659 0.799940697 0.114434224 0.370927425 0.729261335 +0.443659085 0.462663688 0.29750762 0.460199871 0.687806669 0.173966436 +0.208711987 0.895264337 0.936858274 0.403394101 0.408867021 0.361744437 +0.150531056 0.733768052 0.357422029 0.356575896 0.616784163 0.874026206 +0.978486147 0.180091828 0.13812253 0.184369215 0.632324552 0.30931136 +0.81256113 0.992537478 0.19727402 0.196196359 0.811269564 0.304769123 +0.95882982 0.284266234 0.417743732 0.891414324 0.387919073 0.588805459 +0.449159605 0.207592008 0.205924149 0.390492517 0.526306757 0.104897721 +0.625122725 0.689425457 0.467332188 0.233506058 0.196545331 0.24108932 +0.91515843 0.904627251 0.835953184 0.117729753 0.013774927 0.320843528 +0.159294678 0.795083673 0.861417171 0.359624712 0.523876354 0.121713993 +0.44814334 0.079513925 0.735840641 0.305906758 0.402139442 0.822556733 +0.418213267 0.52988238 0.162148958 0.766259975 0.013030154 0.958333069 +0.686859053 0.144090133 0.043453311 0.540162687 0.634514169 0.328695469 +0.124772082 0.289022028 0.437076061 0.756695119 0.95613298 0.476931572 +0.901169261 0.860964515 0.174363537 0.950384359 0.969173515 0.465034315 +0.595960027 0.529231779 0.019957339 0.344885403 0.369891616 0.561314942 +0.656789156 0.728313477 0.609545146 0.842955815 0.190145274 0.175431526 +0.368121672 0.209236633 0.685949869 0.753386749 0.992514281 0.824591141 +0.326398842 0.714772829 0.224764309 0.054163152 0.955558355 0.660460004 +0.584490467 0.498521678 0.183802741 0.743688292 0.718282308 0.877139843 +0.975023389 0.750418235 0.4581664 0.577416284 0.405679463 0.798634825 +0.680473015 0.150250556 0.899113723 0.811397243 0.671136294 0.330745917 +0.565209942 0.184344094 0.310091393 0.860900958 0.612682752 0.532956976 +0.857004385 0.943463456 0.565533645 0.662785353 0.940576883 0.238919923 +0.144419988 0.900456893 0.079423628 0.82629431 0.482959987 0.079974527 +0.014174624 0.953491452 0.57895183 0.280592021 0.166705864 0.158651416 +0.295637255 0.336895373 0.324401334 0.908456245 0.216463212 0.329963715 +0.311906585 0.197118388 0.953360265 0.536302858 0.501195138 0.364475235 +0.548649928 0.01736278 0.295560425 0.492373833 0.200758863 0.095049242 +0.560216095 0.039413231 0.674174886 0.691658912 0.672111212 0.324288008 +0.617260399 0.588361027 0.523914032 0.826410701 0.890015487 0.350902895 +0.873284127 0.385803405 0.570693475 0.701577183 0.190939428 0.251359921 +0.426480539 0.334847579 0.408046874 0.156626392 0.582685966 0.788490584 +0.617346092 0.391561032 0.43272271 0.929907041 0.345608082 0.24289758 +0.765627381 0.952712058 0.799251683 0.774872251 0.043048197 0.081968376 +0.190340501 0.442833404 0.101825524 0.264447382 0.214135537 0.287829384 +0.817117163 0.402947578 0.38305725 0.291804151 0.112192569 0.337555914 +0.0843462 0.143013669 0.930576465 0.337076124 0.724541603 0.506563322 +0.35614782 0.327479176 0.35451206 0.73092953 0.216202031 0.624399173 +0.014307193 0.417897666 0.990304738 0.251031202 0.567480057 0.12688938 +0.187112837 0.690927929 0.294259235 0.481028719 0.330593994 0.430174106 +0.258403569 0.604543109 0.127108884 0.151834004 0.38844346 0.283070622 +0.570149214 0.703973816 0.766358331 0.55632809 0.14057653 0.210115204 +0.658778991 0.410810291 0.700515229 0.3359259 0.161075854 0.377069482 +0.74724236 0.115975467 0.66185665 0.280229197 0.139060234 0.936746562 +0.043798122 0.648553655 0.313990944 0.088896439 0.32509099 0.439381199 +0.58685648 0.282594989 0.017690735 0.960438349 0.297736376 0.291200099 +0.326012136 0.023878767 0.684267793 0.261862315 0.575262607 0.750060983 +0.415613886 0.95816697 0.621612081 0.614104895 0.942445616 0.167328013 +0.153482696 0.288251102 0.663665561 0.014861724 0.482271466 0.485045239 +0.641821317 0.083475083 0.706466198 0.195929498 0.10354292 0.458428886 +0.176059957 0.435409882 0.279057595 0.289411115 0.374707792 0.520835774 +0.411113832 0.872018909 0.569319749 0.803124503 0.840823117 0.560054314 +0.404955541 0.943263282 0.63680973 0.146602219 0.71883676 0.091200637 +0.927454036 0.678215796 0.814014588 0.715703335 0.710710524 0.647421306 +0.568840745 0.852478486 0.173241654 0.162335264 0.833613109 0.938109511 +0.928393267 0.136975274 0.377159817 0.934811851 0.056671401 0.778687842 +0.714142132 0.578483185 0.587890564 0.885401908 0.905762978 0.846806248 +0.490098765 0.269364842 0.83586454 0.124374279 0.949217653 0.36008112 +0.66359427 0.171382681 0.36932244 0.723723351 0.907664854 0.429933226 +0.031643185 0.034469093 0.109756541 0.646477547 0.446961094 0.084579894 +0.148866116 0.202489839 0.977242259 0.185836257 0.626697195 0.224637401 +0.016925964 0.570258913 0.9868201 0.287732245 0.249228793 0.394045804 +0.609409489 0.910875057 0.229717395 0.428827017 0.886100165 0.91503278 +0.320680889 0.232496883 0.546084092 0.737164674 0.53638374 0.208198779 +0.338432371 0.036480938 0.85245649 0.031090349 0.87713491 0.468487248 +0.31458212 0.898881565 0.204198777 0.464333271 0.873479334 0.372890888 +0.130253924 0.15325248 0.133992178 0.035079938 0.967598629 0.688346661 +0.961874887 0.019427584 0.021024034 0.003204703 0.176375297 0.696972845 +0.764498105 0.025924867 0.676069662 0.171909721 0.805904841 0.735921604 +0.217960488 0.269056995 0.261245965 0.116223798 0.189836541 0.430577191 +0.146703667 0.237229017 0.108686005 0.208984752 0.592489955 0.343356665 +0.263924893 0.851886835 0.088817909 0.080601946 0.319254718 0.994499934 +0.793499764 0.3114061 0.579903483 0.865293103 0.110386574 0.717206685 +0.353618449 0.788747964 0.176579796 0.613155836 0.324488993 0.835755797 +0.900410618 0.519984492 0.31762877 0.411113762 0.162265396 0.564062168 +0.881751918 0.061349755 0.31407603 0.619230963 0.864217441 0.551871129 +0.955718235 0.856160404 0.885751219 0.826492815 0.664972422 0.272585623 +0.811927719 0.952331682 0.268932319 0.705674835 0.415694724 0.605876439 +0.284574662 0.199268833 0.512627842 0.63254438 0.729275933 0.466276178 +0.451005315 0.116917905 0.859557875 0.972318887 0.545810902 0.072529654 +0.362133141 0.664439986 0.72614662 0.610749083 0.955514373 0.162726832 +0.996360338 0.838426916 0.05954987 0.158131201 0.96493648 0.821293733 +0.817674528 0.471784852 0.710147117 0.383456415 0.1642446 0.294761255 +0.770497556 0.142175383 0.698471135 0.311377486 0.655091421 0.160090754 +0.578517197 0.822102847 0.805835254 0.178720096 0.051531918 0.413611989 +0.833514058 0.797457679 0.71564252 0.616536663 0.218217934 0.316996281 +0.238059282 0.349543493 0.575496653 0.398977644 0.287691686 0.626195501 +0.887141271 0.807735021 0.300477487 0.729158599 0.156858355 0.055538677 +0.747528082 0.201310216 0.806279148 0.466845344 0.964803403 0.431645994 +0.179591053 0.476716143 0.87523176 0.642313493 0.818407994 0.558454655 +0.979447423 0.877282872 0.368340292 0.139419671 0.971387354 0.982532246 +0.662948813 0.187536808 0.419874375 0.493665997 0.136915431 0.130371586 +0.544932231 0.795816916 0.234921232 0.415653883 0.810765465 0.016509101 +0.400649401 0.999874914 0.873689261 0.988183607 0.73051057 0.115289157 +0.829703306 0.992105407 0.522670317 0.914591734 0.471343476 0.113707329 +0.024755131 0.934566607 0.502394944 0.078047271 0.045903448 0.631296173 +0.220190356 0.115610876 0.717257544 0.597670143 0.104349374 0.370149362 +0.916183826 0.690573889 0.228642222 0.756625096 0.653074274 0.726372687 +0.264176679 0.197347687 0.716436278 0.714281881 0.974613231 0.710172914 +0.859023994 0.462992301 0.822092595 0.389088614 0.496721887 0.2868014 +0.441607858 0.034070905 0.155088184 0.522706248 0.630463014 0.006545724 +0.352482659 0.421343563 0.333150395 0.019507592 0.940375822 0.271379927 +0.070607559 0.246702865 0.444225599 0.619112609 0.053182635 0.902686152 +0.153494044 0.602160686 0.816155207 0.350580241 0.008669554 0.373226651 +0.634952252 0.598867683 0.683149644 0.107891188 0.826552925 0.610330014 +0.854440232 0.946663443 0.694632564 0.803423029 0.62969304 0.548728755 +0.223092501 0.500822366 0.748802204 0.065275129 0.573443188 0.520223865 +0.491250236 0.255618412 0.071790863 0.019058394 0.575191728 0.626727037 +0.376259874 0.122597144 0.214593181 0.150736101 0.785621558 0.822103183 +0.410250186 0.158523689 0.603474519 0.279390415 0.905715838 0.516419917 +0.836689414 0.619431234 0.039393341 0.564453861 0.448843301 0.894982324 +0.186051355 0.240553315 0.115255078 0.343194827 0.36202041 0.209281373 +0.105038752 0.924904506 0.471458318 0.747353281 0.178253003 0.615657414 +0.395576415 0.920559302 0.199543922 0.021818243 0.579600322 0.426375844 +0.100252631 0.936785596 0.870976992 0.339002875 0.575321903 0.987904459 +0.409913572 0.496968783 0.893245065 0.530637914 0.37051595 0.290065973 +0.852453894 0.836500245 0.40598677 0.517102931 0.622253148 0.12229252 +0.551477347 0.303035446 0.144378337 0.444075731 0.85823656 0.689703113 +0.09182015 0.324356558 0.522766259 0.93299547 0.123685329 0.80452623 +0.388572889 0.955872954 0.971922756 0.754764914 0.357562784 0.603768159 +0.618465165 0.144740098 0.7938885 0.798097637 0.768943351 0.366112728 +0.621172118 0.924822516 0.305086983 0.600700002 0.845222843 0.830570952 +0.566443957 0.368202275 0.114838491 0.422704501 0.833749562 0.22703948 +0.007276529 0.306026392 0.140356853 0.022488089 0.207300779 0.663709293 +0.580034848 0.355667167 0.332769982 0.124775668 0.105911622 0.603591441 +0.597337126 0.586438417 0.610479357 0.069245324 0.293772615 0.657870451 +0.385510081 0.508401819 0.888777707 0.431749718 0.349181908 0.194960661 +0.664494398 0.575912374 0.54388916 0.623456041 0.110328506 0.182465503 +0.129922338 0.981232892 0.958725549 0.390086883 0.790155007 0.065520587 +0.917302301 0.826989814 0.406070748 0.497865178 0.077405164 0.327498016 +0.790058446 0.274078408 0.356606298 0.371856034 0.660675693 0.819350975 +0.004902943 0.107025731 0.324456457 0.469969547 0.130262511 0.333076891 +0.316570356 0.209426247 0.245923677 0.692620334 0.229609462 0.143115612 +0.53480385 0.501010142 0.12775919 0.647069548 0.967027373 0.877878547 +0.533960609 0.321629122 0.966740606 0.820814734 0.40367927 0.328074048 +0.95370408 0.487056898 0.861566758 0.051874926 0.753228255 0.104556316 +0.785016992 0.880912874 0.940231708 0.873380725 0.74108161 0.430924433 +0.972470251 0.015431669 0.985378465 0.252850082 0.868131091 0.094451179 +0.584404555 0.42859446 0.088032842 0.823171538 0.533277348 0.200554179 +0.968249491 0.232240807 0.959387417 0.338072676 0.488790992 0.439426654 +0.952196388 0.129991265 0.443658088 0.704686611 0.113297532 0.379635742 +0.903209404 0.680637533 0.711044002 0.720334494 0.502938963 0.444355553 +0.705662368 0.907752098 0.664269701 0.641714517 0.372451829 0.640075147 +0.860786981 0.628625211 0.832671202 0.03875447 0.334386967 0.790178931 +0.664857044 0.624981605 0.136867804 0.33415805 0.688910473 0.491206471 +0.653624462 0.237774157 0.498769147 0.648830696 0.024837148 0.655969001 +0.598884691 0.967432489 0.56151144 0.922727821 0.309384649 0.54996017 +0.588565939 0.017544681 0.066019731 0.0126967 0.953366996 0.516414076 +0.987538062 0.539732834 0.402975439 0.95094472 0.029866231 0.924979921 +0.056488581 0.734967549 0.779423582 0.668521213 0.20095713 0.855945219 +0.792905743 0.276078022 0.554735829 0.825948085 0.531077557 0.791903118 +0.022459069 0.772823926 0.621882862 0.127380337 0.980608831 0.92507685 +0.72429765 0.190036559 0.622908687 0.294294808 0.868947619 0.558080893 +0.893449562 0.283912393 0.436726015 0.089919596 0.385444337 0.773510915 +0.148547885 0.993609817 0.613290918 0.627711567 0.105189192 0.630327505 +0.94956391 0.591221499 0.664040799 0.281730651 0.474664886 0.256699303 +0.623600107 0.335404677 0.59652695 0.648761329 0.65247552 0.408856777 +0.379017065 0.80605069 0.256628241 0.46524362 0.611861241 0.635807876 +0.751065056 0.707104611 0.211289123 0.516326022 0.942288664 0.237400246 +0.876950847 0.031890102 0.5093085 0.917311554 0.198260439 0.098774625 +0.259128358 0.050107853 0.57353741 0.340683674 0.618135717 0.838354398 +0.253102542 0.395381109 0.062745835 0.975593152 0.02932792 0.029647668 +0.5841239 0.76437758 0.880919017 0.233727236 0.661805285 0.229327353 +0.326686881 0.932293352 0.46714788 0.126796647 0.338223504 0.197109906 +0.086937625 0.669099099 0.482901136 0.499960302 0.093554133 0.368093451 +0.816284626 0.698789864 0.00724519 0.933626991 0.263812872 0.008954995 +0.409327766 0.025289022 0.744785107 0.745296585 0.28307372 0.946303059 +0.88073619 0.942084685 0.762532998 0.49611503 0.222043238 0.68007884 +0.066548248 0.043512049 0.329657405 0.711559428 0.341912754 0.651296822 +0.334708652 0.188140166 0.861622692 0.621943296 0.58101694 0.726256268 +0.289723461 0.058201158 0.37039346 0.331097152 0.245365772 0.543696037 +0.564762981 0.469063442 0.689951748 0.468509671 0.349503959 0.266527262 +0.900512868 0.090360458 0.367051829 0.069616136 0.276054393 0.84765208 +0.47811338 0.412618756 0.04871227 0.778460804 0.985967704 0.465276308 +0.666661767 0.091374346 0.091726574 0.564482669 0.476029634 0.779318664 +0.031586741 0.739909705 0.201815121 0.93649487 0.796910122 0.397233289 +0.385840129 0.693148883 0.625668972 0.238694958 0.147693396 0.71127466 +0.156312978 0.117569712 0.04025703 0.680614781 0.490241447 0.764185812 +0.597654889 0.160722689 0.218794445 0.039928471 0.462063395 0.604059657 +0.152597525 0.361786723 0.480350154 0.119686809 0.159014133 0.615669773 +0.969370329 0.65393737 0.715131307 0.859508566 0.871046007 0.931644823 +0.396484607 0.29841464 0.334551787 0.43246275 0.876260129 0.112336324 +0.084684653 0.005078058 0.497296883 0.903671776 0.502804951 0.138573625 +0.087812477 0.326860766 0.55934389 0.047191725 0.061595852 0.650002871 +0.337410136 0.742042868 0.188260465 0.931545259 0.982857179 0.831021912 +0.244808288 0.503210577 0.656758641 0.720538409 0.915330848 0.276768124 +0.323661811 0.430312606 0.133475852 0.153171963 0.804189208 0.549930463 +0.523242054 0.000914978 0.444485328 0.624137819 0.881230898 0.642764932 +0.770392752 0.148308447 0.610932016 0.67524694 0.750427349 0.987551511 +0.720448777 0.420487994 0.561086885 0.679741387 0.453844856 0.739061413 +0.706637234 0.434626436 0.88498805 0.225812667 0.679823483 0.912847486 +0.354418955 0.904231874 0.440910488 0.140769899 0.526497712 0.42210671 +0.783890462 0.032321797 0.457387448 0.791476396 0.109708946 0.088801482 +0.544208828 0.238646028 0.476266364 0.015594418 0.925846039 0.500010629 +0.193468426 0.631924775 0.251083259 0.721486115 0.366851207 0.554173276 +0.324592426 0.987658323 0.901640266 0.641948648 0.037053021 0.802063516 +0.67402323 0.658051293 0.874914004 0.311573918 0.120744053 0.219704279 diff --git a/tests/csv_pipeline_test/input/data/DX56_D_FZ2_WR00_43.TXT b/tests/csv_pipeline_test/input/data/DX56_D_FZ2_WR00_43.TXT index 8c6a3aa7..5f59fa5c 100755 --- a/tests/csv_pipeline_test/input/data/DX56_D_FZ2_WR00_43.TXT +++ b/tests/csv_pipeline_test/input/data/DX56_D_FZ2_WR00_43.TXT @@ -1,24 +1,24 @@ -"Pr�finstitut" "institute_1" +"Prüfinstitut" "institute_1" "Projektnummer" "123456" "Projektname" "proj_name_1" "Datum/Uhrzeit" 44335.4 "" "Maschinendaten" "maschine_1" "Kraftaufnehmer" "Kraftaufnehmer_1" "Wegaufnehmer" "Wegaufnehmer_1" -"Pr�fnorm" "ISO-XX" +"Prüfnorm" "ISO-XX" "Werkstoff" "Werkstoff_1" "Probentyp" "Probentyp_1" -"Pr�fer" "abc" +"Prüfer" "abc" "Probenkennung 2" "Probentyp_2" -"Messl�nge Standardweg" 80 "mm' -"Versuchsl�nge" 120 "mm" +"Messlänge Standardweg" 80 "mm" +"Versuchslänge" 120 "mm" "Probendicke" 1.55 "mm" "Probenbreite" 20.04 "mm" -"Pr�fgeschwindigkeit" 0.1 "mm/s" +"Prüfgeschwindigkeit" 0.1 "mm/s" "Vorkraft" 2 "MPa" -"Temperatur" 22 "�C" +"Temperatur" 22 "°C" "Bemerkung" "" -"Pr�fzeit" "Standardkraft" "Traversenweg absolut" "Standardweg" "Breiten�nderung" "Dehnung" +"Prüfzeit" "Standardkraft" "Traversenweg absolut" "Standardweg" "Breitenänderung" "Dehnung" "s" "N" "mm" "mm" "mm" "mm" 0.902359827 0.576537916 0.261094396 0.767421407 0.950183725 0.035807567 0.440620562 0.989528723 0.983277189 0.765300358 0.83547718 0.86967659 diff --git a/tests/csv_pipeline_test/input/mapping/bad_tensile_test_mapping.json b/tests/csv_pipeline_test/input/mapping/bad_tensile_test_mapping.json new file mode 100644 index 00000000..40784572 --- /dev/null +++ b/tests/csv_pipeline_test/input/mapping/bad_tensile_test_mapping.json @@ -0,0 +1,111 @@ +{ + "Bemerkung": { + "iri": "https://w3id.org/steel/ProcessOntology/Remark", + "key": "Bemerkung" + }, + "Breiten\u00e4nderung": { + "iri": "https://w3id.org/steel/ProcessOntology/WidthChange", + "key": "Breiten\u00e4nderung" + }, + "Datum/Uhrzeit": { + "iri": "https://w3id.org/steel/ProcessOntology/TimeStamp", + "key": "Datum/Uhrzeit" + }, + "Dehnung": { + "iri": "https://w3id.org/steel/ProcessOntology/Elongation", + "key": "Dehnung" + }, + "Kraftaufnehmer": { + "iri": "https://w3id.org/steel/ProcessOntology/ForceMeasuringDevice", + "key": "Kraftaufnehmer" + }, + "Maschinendaten": { + "iri": "https://w3id.org/steel/ProcessOntology/MachineData", + "key": "Maschinendaten" + }, + "Messl\u00e4nge Standardweg": { + "iri": "https://w3id.org/steel/ProcessOntology/OriginalGaugeLength", + "key": "Messl\u00e4nge Standardweg" + }, + "Probenbreite": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecimenWidth", + "key": "Probenbreite" + }, + "Probendicke": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecimenThickness", + "key": "Probendicke" + }, + "Probenkennung 2": { + "iri": "https://w3id.org/steel/ProcessOntology/SampleIdentifier-2", + "key": "Probenkennung 2" + }, + "Probentyp": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecimenType", + "key": "Probentyp" + }, + "Projektname": { + "iri": "https://w3id.org/steel/ProcessOntology/ProjectName", + "key": "Projektname" + }, + "Projektnummer": { + "iri": "https://w3id.org/steel/ProcessOntology/ProjectNumber", + "key": "Projektnummer" + }, + "Pr\u00fcfer": { + "iri": "https://w3id.org/steel/ProcessOntology/Tester", + "key": "Pr\u00fcfer" + }, + "Pr\u00fcfgeschwindigkeit": { + "iri": "https://w3id.org/steel/ProcessOntology/TestingRate", + "key": "Pr\u00fcfgeschwindigkeit" + }, + "Pr\u00fcfinstitut": { + "iri": "https://w3id.org/steel/ProcessOntology/TestingFacility", + "key": "Pr\u00fcfinstitut" + }, + "Pr\u00fcfnorm": { + "iri": "https://w3id.org/steel/ProcessOntology/TestStandard", + "key": "Pr\u00fcfnorm" + }, + "Pr\u00fcfzeit": { + "iri": "https://w3id.org/steel/ProcessOntology/TestTime", + "key": "Pr\u00fcfzeit" + }, + "Standardkraft": { + "iri": "https://w3id.org/steel/ProcessOntology/StandardForce", + "key": "Standardkraft" + }, + "Standardweg": { + "iri": "https://w3id.org/steel/ProcessOntology/Extension", + "key": "Standardweg" + }, + "Temperatur": { + "iri": "https://w3id.org/steel/ProcessOntology/Temperature", + "key": "Temperatur" + }, + "Traversenweg absolut": { + "iri": "https://w3id.org/steel/ProcessOntology/AbsoluteCrossheadTravel", + "key": "Traversenweg absolut" + }, + "Versuchsl\u00e4nge": { + "iri": "https://w3id.org/steel/ProcessOntology/ParallelLength", + "key": "Versuchsl\u00e4nge" + }, + "Vorkraft": { + "iri": "https://w3id.org/steel/ProcessOntology/Preload", + "key": "Vorkraft" + }, + "Wegaufnehmer": { + "iri": "https://w3id.org/steel/ProcessOntology/DisplacementTransducer", + "key": "Wegaufnehmer" + }, + "Werkstoff": { + "annotation": "https://w3id.org/steel/ProcessOntology", + "iri": "https://w3id.org/steel/ProcessOntology/Material", + "key": "Werkstoff" + }, + "foobar": { + "iri": "https://w3id.org/steel/ProcessOntology/foobar", + "key": "foobar" + } +} diff --git a/tests/csv_pipeline_test/input/mapping/tensile_test_mapping.csv b/tests/csv_pipeline_test/input/mapping/tensile_test_mapping.csv new file mode 100644 index 00000000..ab7165b3 --- /dev/null +++ b/tests/csv_pipeline_test/input/mapping/tensile_test_mapping.csv @@ -0,0 +1,27 @@ +key;iri;annotation +Prüfinstitut;https://w3id.org/steel/ProcessOntology/TestingFacility; +Projektnummer;https://w3id.org/steel/ProcessOntology/ProjectNumber; +Projektname;https://w3id.org/steel/ProcessOntology/ProjectName; +Datum/Uhrzeit;https://w3id.org/steel/ProcessOntology/TimeStamp; +Maschinendaten;https://w3id.org/steel/ProcessOntology/MachineData; +Kraftaufnehmer;https://w3id.org/steel/ProcessOntology/ForceMeasuringDevice; +Wegaufnehmer;https://w3id.org/steel/ProcessOntology/DisplacementTransducer; +Prüfnorm;https://w3id.org/steel/ProcessOntology/TestStandard; +Werkstoff;https://w3id.org/steel/ProcessOntology/Material;https://w3id.org/steel/ProcessOntology +Probentyp;https://w3id.org/steel/ProcessOntology/SpecimenType; +Prüfer;https://w3id.org/steel/ProcessOntology/Tester; +Probenkennung 2;https://w3id.org/steel/ProcessOntology/SampleIdentifier-2; +Messlänge Standardweg;https://w3id.org/steel/ProcessOntology/OriginalGaugeLength; +Versuchslänge;https://w3id.org/steel/ProcessOntology/ParallelLength; +Probendicke;https://w3id.org/steel/ProcessOntology/SpecimenThickness; +Probenbreite;https://w3id.org/steel/ProcessOntology/SpecimenWidth; +Prüfgeschwindigkeit;https://w3id.org/steel/ProcessOntology/TestingRate; +Vorkraft;https://w3id.org/steel/ProcessOntology/Preload; +Temperatur;https://w3id.org/steel/ProcessOntology/Temperature; +Bemerkung;https://w3id.org/steel/ProcessOntology/Remark; +Prüfzeit;https://w3id.org/steel/ProcessOntology/TestTime; +Standardkraft;https://w3id.org/steel/ProcessOntology/StandardForce; +Traversenweg absolut;https://w3id.org/steel/ProcessOntology/AbsoluteCrossheadTravel; +Standardweg;https://w3id.org/steel/ProcessOntology/Extension; +Breitenänderung;https://w3id.org/steel/ProcessOntology/WidthChange; +Dehnung;https://w3id.org/steel/ProcessOntology/Elongation; diff --git a/tests/csv_pipeline_test/input/mapping/tensile_test_mapping.json b/tests/csv_pipeline_test/input/mapping/tensile_test_mapping.json new file mode 100644 index 00000000..9346b76c --- /dev/null +++ b/tests/csv_pipeline_test/input/mapping/tensile_test_mapping.json @@ -0,0 +1,107 @@ +{ + "Bemerkung": { + "iri": "https://w3id.org/steel/ProcessOntology/Remark", + "key": "Bemerkung" + }, + "Breiten\u00e4nderung": { + "iri": "https://w3id.org/steel/ProcessOntology/WidthChange", + "key": "Breiten\u00e4nderung" + }, + "Datum/Uhrzeit": { + "iri": "https://w3id.org/steel/ProcessOntology/TimeStamp", + "key": "Datum/Uhrzeit" + }, + "Dehnung": { + "iri": "https://w3id.org/steel/ProcessOntology/Elongation", + "key": "Dehnung" + }, + "Kraftaufnehmer": { + "iri": "https://w3id.org/steel/ProcessOntology/ForceMeasuringDevice", + "key": "Kraftaufnehmer" + }, + "Maschinendaten": { + "iri": "https://w3id.org/steel/ProcessOntology/MachineData", + "key": "Maschinendaten" + }, + "Messl\u00e4nge Standardweg": { + "iri": "https://w3id.org/steel/ProcessOntology/OriginalGaugeLength", + "key": "Messl\u00e4nge Standardweg" + }, + "Probenbreite": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecimenWidth", + "key": "Probenbreite" + }, + "Probendicke": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecimenThickness", + "key": "Probendicke" + }, + "Probenkennung 2": { + "iri": "https://w3id.org/steel/ProcessOntology/SampleIdentifier-2", + "key": "Probenkennung 2" + }, + "Probentyp": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecimenType", + "key": "Probentyp" + }, + "Projektname": { + "iri": "https://w3id.org/steel/ProcessOntology/ProjectName", + "key": "Projektname" + }, + "Projektnummer": { + "iri": "https://w3id.org/steel/ProcessOntology/ProjectNumber", + "key": "Projektnummer" + }, + "Pr\u00fcfer": { + "iri": "https://w3id.org/steel/ProcessOntology/Tester", + "key": "Pr\u00fcfer" + }, + "Pr\u00fcfgeschwindigkeit": { + "iri": "https://w3id.org/steel/ProcessOntology/TestingRate", + "key": "Pr\u00fcfgeschwindigkeit" + }, + "Pr\u00fcfinstitut": { + "iri": "https://w3id.org/steel/ProcessOntology/TestingFacility", + "key": "Pr\u00fcfinstitut" + }, + "Pr\u00fcfnorm": { + "iri": "https://w3id.org/steel/ProcessOntology/TestStandard", + "key": "Pr\u00fcfnorm" + }, + "Pr\u00fcfzeit": { + "iri": "https://w3id.org/steel/ProcessOntology/TestTime", + "key": "Pr\u00fcfzeit" + }, + "Standardkraft": { + "iri": "https://w3id.org/steel/ProcessOntology/StandardForce", + "key": "Standardkraft" + }, + "Standardweg": { + "iri": "https://w3id.org/steel/ProcessOntology/Extension", + "key": "Standardweg" + }, + "Temperatur": { + "iri": "https://w3id.org/steel/ProcessOntology/Temperature", + "key": "Temperatur" + }, + "Traversenweg absolut": { + "iri": "https://w3id.org/steel/ProcessOntology/AbsoluteCrossheadTravel", + "key": "Traversenweg absolut" + }, + "Versuchsl\u00e4nge": { + "iri": "https://w3id.org/steel/ProcessOntology/ParallelLength", + "key": "Versuchsl\u00e4nge" + }, + "Vorkraft": { + "iri": "https://w3id.org/steel/ProcessOntology/Preload", + "key": "Vorkraft" + }, + "Wegaufnehmer": { + "iri": "https://w3id.org/steel/ProcessOntology/DisplacementTransducer", + "key": "Wegaufnehmer" + }, + "Werkstoff": { + "annotation": "https://w3id.org/steel/ProcessOntology", + "iri": "https://w3id.org/steel/ProcessOntology/Material", + "key": "Werkstoff" + } +} diff --git a/tests/csv_pipeline_test/input/mapping/tensile_test_mapping.xlsx b/tests/csv_pipeline_test/input/mapping/tensile_test_mapping.xlsx index d7a28bbe..1ef47410 100755 Binary files a/tests/csv_pipeline_test/input/mapping/tensile_test_mapping.xlsx and b/tests/csv_pipeline_test/input/mapping/tensile_test_mapping.xlsx differ diff --git a/tests/csv_pipeline_test/input/method-graph/tensile_test_method_v6.mod.ttl b/tests/csv_pipeline_test/input/method-graph/tensile_test_method_v6.mod.ttl new file mode 100644 index 00000000..9fbdc9ea --- /dev/null +++ b/tests/csv_pipeline_test/input/method-graph/tensile_test_method_v6.mod.ttl @@ -0,0 +1,122 @@ +@prefix rdf: . +@prefix rdfs: . +@prefix prov: . +@prefix fileid: . + +# Describe the Tester and the Facility and lab + +fileid:TestingFacility rdf:type prov:Organization , prov:Location . + +fileid:TestingLab rdf:type prov:Location, prov:Agent ; + prov:atLocation fileid:TestingFacility . + +fileid:Tester rdf:type prov:Agent ; + prov:actedOnBehalfOf fileid:TestingFacility ; + prov:atLocation fileid:TestingLab . + +fileid:Temperature rdf:type prov:Entity ; + prov:wasAttributedTo fileid:TestingLab . + + +# describe the project + +fileid:Project rdf:type prov:Activity ; + prov:wasAssociatedWith fileid:TestingFacility ; + prov:generated fileid:ProjectName , + fileid:ProjectNumber . + +fileid:ProjectName rdf:type prov:Entity . + +fileid:ProjectNumber rdf:type prov:Entity . + + +# Describe the Specimen and its attributes + +fileid:SamplePreparatation rdf:type prov:Activity ; + prov:wasAssociatedWith fileid:TensileTestSpecimen , + fileid:Material ; + prov:generated fileid:ParallelLength , + fileid:SpecimenThickness , + fileid:SpecimenType , + fileid:SpecimenWidth ; + prov:wasInfluencedBy fileid:Project . + +fileid:TensileTestSpecimen rdf:type prov:Agent , prov:Entity . + +fileid:Material rdf:type prov:Agent . + +fileid:ParallelLength rdf:type prov:Entity ; + prov:wasAttributedTo fileid:TensileTestSpecimen . + +fileid:SpecimenThickness rdf:type prov:Entity ; + prov:wasAttributedTo fileid:TensileTestSpecimen . + +fileid:SpecimenType rdf:type prov:Entity ; + prov:wasAttributedTo fileid:TensileTestSpecimen . + +fileid:SpecimenWidth rdf:type prov:Entity ; + prov:wasAttributedTo fileid:TensileTestSpecimen . + +# Describe the experiment preparation + +fileid:ExperimentPreparation rdf:type prov:Activity ; + prov:atLocation fileid:TestingLab ; + prov:wasAssociatedWith fileid:Tester , + fileid:ForceMeasuringDevice , + fileid:DisplacementTransducer , + fileid:TensileTestSpecimen , + fileid:TensileTestingMachine ; + prov:generated fileid:Preload , + fileid:OriginalGaugeLength , + fileid:TestingRate ; + prov:wasInfluencedBy fileid:SamplePreparatation . + +fileid:TensileTestingMachine rdf:type prov:Agent, prov:Entity ; + prov:atLocation fileid:TestingLab . + +fileid:ForceMeasuringDevice rdf:type prov:Agent, prov:Entity ; + prov:atLocation fileid:TestingLab . + +fileid:DisplacementTransducer rdf:type prov:Agent , prov:Entity ; + prov:atLocation fileid:TestingLab . + +fileid:TestingRate rdf:type prov:Entity ; + prov:wasAttributedTo fileid:TensileTestingMachine . + +fileid:Preload rdf:type prov:Entity ; + prov:wasAttributedTo fileid:TensileTestingMachine . + +fileid:OriginalGaugeLength rdf:type prov:Entity ; + prov:wasAttributedTo fileid:DisplacementTransducer . + + +# Describe the experiment and its data produced by which device + +fileid:dataset rdf:type prov:Entity . + +fileid:TensileTestExperiment rdf:type prov:Activity ; + prov:wasAssociatedWith fileid:Tester ; + prov:used fileid:TensileTestSpecimen , + fileid:TensileTestingMachine , + fileid:ForceMeasuringDevice , + fileid:DisplacementTransducer , + fileid:TestingFacility ; + prov:generated fileid:Extension , + fileid:StandardForce , + fileid:AbsoluteCrossheadTravel , + fileid:Remark , + fileid:TimeStamp , + fileid:dataset ; + prov:hadPlan fileid:TestStandard ; + prov:wasInfluencedBy fileid:ExperimentPreparation . + +fileid:AbsoluteCrossheadTravel rdf:type prov:Entity; + prov:wasDerivedFrom fileid:DisplacementTransducer . + +fileid:StandardForce rdf:type prov:Entity ; + prov:wasDerivedFrom fileid:ForceMeasuringDevice . + +fileid:Extension rdf:type prov:Entity ; + prov:wasDerivedFrom fileid:DisplacementTransducer . + +fileid:TestingStandard rdf:type prov:Plan . diff --git a/tests/csv_pipeline_test/input/method-graph/tensile_test_method_v6.xml b/tests/csv_pipeline_test/input/method-graph/tensile_test_method_v6.xml deleted file mode 100755 index 66fc8df6..00000000 --- a/tests/csv_pipeline_test/input/method-graph/tensile_test_method_v6.xml +++ /dev/null @@ -1 +0,0 @@ -7V1bc9s40v01rtp5kIvgnY++JLOZsTee2LuZPE3RIiRxLJEakort79d/IEVQIgDxIvECJZ2aGouieANxTh80Gt0X2s3q7dfIXS/uQw8vL1TFe7vQbi9UVTcUg/xJv3nffoNMxdx+M498L/9u98Wj/384/1LJv934Ho5LP0zCcJn46/KX0zAI8DQpfedGUfha/tksXJavunbnmPviceou+W+/+l6y2H5rG8ru+39jf76gV0ZKvmfl0h/nX8QL1wtf977SPlxoN1EYJttPq7cbvExbj7bL9riPB/YWNxbhIGlywNUiVEzFvvF+u3rAv73owUzxJ/lZvrvLTf7AF6q5JOe79vzv5OM8/Ui/eqZfrBL6Fblc8e2FdrVIkjX5k96E+hGvVuGlH8zC/DP544Ur1w/IhxWeLtzAJ+08SXCc+MH8QtX2Tiq4etUNxV52Vf6eSjf0+vp6GeOVGyT+9BU/X4YRuerHOHEXy4nnz/3EXZ50FyschUc2TBKus1aJcEg+hstw/n7SrSzCpU+addqkWQS3s/I9jyBA/VicZ3czzxF71SPeF175ITltfOr97U7U7Q1G2NtMEz8Msqc/+TbLp+v4Xtc4mh7Z7YobTM+B18mmAQLitRukdJa85xxp/rNJOex6FgbJJM4YnFxRQWj9Rv5kRyoJfksm7tKfB9udU0JaOCp2P7vTl3kUbgJvMiWdP9r+KJo//0s1jPRX6g35P/P5l92lG77HA69x77vtw/X3dg823sAN1O4l1jazH/9zKkTSU9TgYv/l1Hy9A8fiPT4ZHOQcqan6aV/vCieLsJGJTXAQ+0ucGfXJ9rCtme3szcrSxDuK8WaNeliqPl61XHSoSqoTPyoopQ9vNomnCyJMKpupOPEbUTvi6x3bdEyDGKhog9LHX4rGzLrRzF35y/ftYeRc7mqd7dQ0nfx1Iz+1Jcy3xcm4PQu8/I4JvNzDx8RuEE9iHPmzRi9V23uRpc+Cl1r5otJ39Of93WP9KzpMRi36K3tvWzY6bLVaA4Lr0bVU2P6RpUMpUf2bmTtNNlE21jjNIDAnG6B5mlB0lA8bOqWGgd5X86bfPWebZldLD6eSsfg6/RiECflz/brwE/y4dqfpd6+Ru87uaLUkWyg9f/GQnzfJ0g9w/r3nRi+fyVF+kno3lEvFSIlv21a3SzzbXXp/lE6H3Dgibbv3VT5q/xWH6TOS51OoFyV3IOQuFOpPeN25I3TqdFjsuSKK49zcBTIvzrzzEqQtunUUtHAaqEc5DbxUfk8j7CZ5NxFS2pb7g+c4/ZP/+i+09+OWg6PwlTzaFWnsmOjzT2mfOnRphbzAyxOulD1f4idL3PDpPtzffyaXvboO03HSyg/8VWYyhdc/0IG9cLpZZV2rthOn/Rd7d8/0i6X7jJfXRde+2cKXnFybZf9SViBYe8F7e5Ts38VWR+bOOqTm26LfbaUmwQYx5qV/+hBQ0QRYycQAixWnA6gY6pu1+mfxP/UP/HnxSbn/4796IvCvrcglr562MvmJqOR77MabCGcvkX3L0fadpQ1Y/4LjwF0/hQ+hn7Ve+s06/Zw9kXFN/st6941yYdymTJxuq8y2xmzrzLbBbJvMtsVs28y2U95Ot8g9lbc1Zttgti1m29k7f/p8iHk+xDwfYp4PMc+HmOdDzPMh5vkQ83y7bcQ8H2KeDzHPh5jnQ7vnI/8RjPnL5R7GPAPbni5Cqa0+a6bZDaKMMqJ0k0cUsgXWR+sNUdpB69NYxGSEw2uQnc904cYPbkQ+++SUSVNVgb05fsw3w4iMfedh4C4/7L69LgN695u7MFznoP0bJ8l7Tq3uJgnLICcvMnr/Mz8+2/iW0atBN2/f9nfevudb2z5CZzA0vjdhRPqTJepNjmlpbmVvisNNNMUV7ywXDIkbzXFS9W7zTpM2ZGXnjPDSTfzv5Tma7rua+UO94plr2ooiesU3lmYoyjCv2Oj6FWeHXkWR+773g9z07c68tYsFrSGtzGtmPlG56y7bM+46T3FrJ/Qni6OubHiz5ZsoXBNWfhd2ubtUq5W7CRVP+YBMu045PfVSXuU78iFT6gMnKsx9zs6ncLLgVvjaK/HAWY9i+jW/SmmGU2RViNS2S+1PhVK7t757rfQn4WwW44RDfruX9zu6/TL5d/Rh+mY+G8nj+1+3798mGnBB51zgSMkFFuqWC4TdiUJJfiqoQkMXTKAiUz8zLrCBC07gAgUv5s7fxtfF3d2nrw8z/272ekWbVDIqsIegAsT7086KC+zuuEDTHFTmAlUiLrDDpz+freelnqC/0MebO/zb1XqiOkAGJ5CBuE3lIAPGm+g43ZKB8NE13mMoKxlUwqELNjAc25KXDYKnbxvz9svq5vXl12j1pj69XN9P9FHJAJXJwGpEBvsuRct5VprRxAyb02nXZCBsUjnJAOn5JbpiA+GzGxwZZNMHhAo+BesNP2EwCg9UAaETGjDKJKBJRAJ/e5r2bKz+bfz9H/f3L76NkOcVbkyBi5qc2k3bYOFGcd7rqRt6k8xSKdU6pIuZd8+n2emfXy7EATu7eJvdfiYubG/H9qLpniCM0lnK3b7X3Omf7tRzfaAsCV/haBKnk+PBnD9S6JDf7fEJHwb5ORV6J9meJHKDeEbORM+ZTsane1/DyCtfrziwJkahCFAoohOyozw/Xi/dvLX8YDvtnz31MnQT5vJnPZVwqtUoJgiaTzJ0ajWEGOzctdR0JkF4N+ZhIv+8SQ4xec8d4PC8Ye2LLOYej+1E/XcAU+tFN3DCYMIIA1tlZj63d5ofdZKx+c/kD8e8/d/H+//99/P7/XJzh//BtD3OlDuQYmkObtLlnslLnWVnfPOTbOR7qeZb3+iNkM+7C6cbrbqb0C9VLDqrG7NSL07v/c1Uyx3OsJgOt30mrsO1VbwTZDlqWfPSaICPBw9BTLzAMYfYWs0hzqkHOE632l0ITD5OQULtXkUpXWh30zBlGrNXWRSBWt9ULYAodu4Fc314W+PIh1guiOVqF8s1m83UzJ3Cu2TMZ4KhKhN2fCwXpcXRYrkcDnnZQt6n7Yrgj2Qwt/QF3k6AEkBp5LBIk400tg0eS+aQWKpwOjU1Y4A6QJ3UBoxFnY5GR53OoS4zYQ9R+DcRyv/ZrJ7T1VIAJYCS3AbMEAX2Dwsl3kfazoAB5gBzZ2W+DNEAbFjM2RzmSubLXWEAEgBJduNlWqMDiXdlHGe8AHGAuDMwXZYyIOKEE3P89MrN0o1j8tXpGBpppS0zS6UJmlgVNHEXeR6ETcyPbT8Fnv/d97I0cd2381BecKadRcZj0HbmlwVu3eD+Cj8macoIMAhgECSXYNaQEqxqBdHx/m+AG8DtXPSXPbr+QvxClcxq3bvThR/gWzcNdAYgAZDksluTnd6j6wl0QZaogbGknmi7AHQAOomtlwB02pC+bzHo+BQMmQH7GEZTvM3K5gfzW/zdn4JLDkAloSXTmbjmiSoCldMTqIS5AAzEQUX65QhN1rkc8SZrlxbQdFD7SwvMP4zkVV//9rtvXn/9Pdl8Cf77fUJpceQlsBNVc8pLMY36wHvltANMsyJSnz/cYkJcTbp2tPvFOOLuzwu5Buu85EjjYRxioGOye1l23hInr64qH9HJKoBKNB6twUE3gG44DzHO6wZR8FdfukG8zI6PXs7E+G22CnuapUd+Std+e5spBHcBrGSU4yqzMFMTBCcPCyreRdvOpAH6AH3nYtRY9JkDok+8IFxs0dJlNo+JG3hu5AGSAEmy2TF2ptExBNqwL0dtVTbARlasjC7eogHiAHGy2S4OcfbYiONjKzPT9bjG0zS5wb2b4G15PwATgEku88Wlx0EmGhtOfBxt29l9wBvgTU7jJcCbPjbe+IWkJfP19L4GxzxA6QxM16CrbIRQ4mNk2pkuwBxg7rzMlyVadjUo5g4tB8JxAs53AJF8hgspZhlEwiqhg2Lo5MVAADYAm5QWiwfbkJHUQrDxuQ+yoDeq/T7dAo4AR7IZrYnNLElAxuiOwpNzOALkAHLymi4B5Eb3FR5axvo58ud+4C5/dTdzfIeDObk9gBRASjYrptkMpBwRpKxBIdUmYENkxQB7gL1zMGc89kRJUIbF3oHQjQc3cpdLvAQ0AZrOxJKl5QTHFoenRm4A7AB2Z2bEVGXITF5i2FXXhfniJjCXDFCSzoKxcbxIGTKQV5g5gFZjHykdQ/ra9xIyFPvGrkcuXmaQv4ThS8seSmbAhCbobDfpLpmBsPPQy8ldwbCy35+ey2BCqE/XtNKLkKoCeWVfPrUYFJhaMLUyqlbO1KLR5+4Ei63zUhp4GboeoAhQJL1gFaZCHxZFp84dANwAbuditNTRw/vVA9MFT3i1xpGbbCKQf4Ak+Q2XMIHVsEg6daoAIAeQOyvjNXrYsXpgnecXvHKjFwARgEh2u2WPP946dYEngA3Adh4Wyxl9tKWZHE4GnY27KCVHNxrNxlXNuSmuprii13h9aynZvN3B17g/GycsqJr7gfYn46oW+o2cGh2Zdqmv1eU5R8warta/16t/bzsn/h7V3A+7CI05oCZPO2muS81QHR0hy9QtxVLZ1ijvLr+tbd/hpj25q5hMMnhkqISU9v71lhtejP7DCcbjtRuUeMH8ZxOmOwjVJZN8/pSYX2WJZ8luL7XBi3Dpx4k/3c7NPrjp7KpPTpnsGeztJQ4kwRtl4raSIrtIQq/bdFBOE/JenDRtS7FSroEwUZnu2d+srq7+WPbDNW1FGPdxY2lGtge/+UlR14N83rsy2dpdON2g121kc4Knbxvz9svq5vXl12j1pj69XN83tjk0LHTsehyIYW2kI6OSEfkjbLvmCJ0l0dZHqEr5iDrb4FTbBrMb28CG7hvGmLZB5/3weLUKc0KPwjWhw3eJaZsyk8S0rSpOuVsOxdq0JsywrN0J+x5gfqeG+Rsx8EmqX5WDgVWdkf1KNTeyv0eUjw8fwM7Qtz1Aq7klzq/LHFDD1uSJqtjaRL0oeVVja7H3zM/GmfNzUZdKXn5GyBGddQB+tqXk52fkeTMhPyPF0hx8UB1bler42FJ5x3M6jcw7E1eOzVSg02tcM6zrpP3vzcrfI7awBXNAnZxGlnKpKGrBwkwFP8W4RNbJBI0Qm0bPcAZmaEESIhyFO5eIzOxMs5VJyM6d8q9w1M3HzWarDJ5wEPtLnBV0yLPacK8QZplglmnsZcucl1kTTer2VXlIiKhxp5kYYdHMTSiSN80lUiNxcpLLT47x5q5qemOPH3cELYkrlA9dcTo/1SGjMa4CTxe2GGllsYUkMsXClY1I+F7OhTgKv1Vz31f/xGHKQRxqa+LgjrD0bolD2AP5kD5Z/SxVAOqEPFQ6LJCXL0YRGhzurwjq9Ua49wjqLa0L3I+NZ4N12xpGDZ4tVH1EjR/h8PE9jPCFnU2QFh+v/JAgOt7yw2OKanm5oTNhMSEDN0c3ZScH2j1ATRylJsRt2vk4pOlAU3w7fJr9szLXtIt2Ya81jea9pIFB0st947wdBXIitHOBcBpCeat5XgjtdDhumWWESu8bV7m313ZRITjRwYku/VIN3omuixZr9OVEFzIPL23YaSk/mN+704UfwIJdwJR8E1PIYdZoTNQ8tGsfVCoaElSCzJ7UbJELuKlVX7hRnCssus5hk8xSOLLLHmpXT0y3LZsunIjmz/9Ku91FlnMj+/NLdgplFgbJZOau/OX79qcLvPyOU1mztz/OxGy6F6H12/6O7UXTPUEYrdzl3r7XvEXTnXouP5Ul0cY4mpB7nhL+4I9kV3wUWovu8wmxBPlZFXov2Z4kcoN4Rs5Fzxrg7d7XMPLKVywOfHanL/OMrSZMa6np4ChtqP0PeZt5frxeunl7+cHSp1eaLUM3YS7Pvjah16b5OpWRVjvUxUdxWNY19dawmoxOLNNUbLfp6KQqJeX+6ETBi7nzt/F1cXf36evDzL+bvV4VpRnGdl8ih5ldmNAVbhVLF9hDNM2pPmSXe//AIf3MYRRvbaykq85+122ddLWv+ffTOq4l1bBakDdJxgnuyu7ZiSMa6Tbj9dIlGlOLn18dA57nATN6wtHtg20woRN15kFFauURPVE9n/XpfHiAOpc64QFbKfvWpHd+Hx6JtHatgSMAHAESO9d4RwCyRncEiDzbLFUGHqHs8DU1ymsclLGSjrD3Gkwh/5xM9+ZrYnarxL9R2VuxJsb76Kf3n215brzIEMuo6mJ+qomqJqfMpUBaAcGNpvlWYzMuVsGIt+Pi5m06T7zXAQzB+6ffnVrKIH1B5S5YlJ1pu9SE2FxkXSrFP9omhf7sb2mguKn5oQAxEe4q5fbcaOxvRd4sdXzEm+ebpRvHn2fF7nnpx2IHSOrn6U84CDCVua2WqV65LjxFZQYj/5prjgL2XWgOTbWs07on7TPWJQXMADG2AsmYusw+pW49f+aTlwgiAkTEYRHRhSRIJ9jKtGmIVq0og0oCUSrCTiXBviCoSSIjoyQQrx1sqgiarq4dSBFYjCYlI/5jBQFS7JIgoItYizP3VzdJ3NTCRF+gCKpR/xMrggOhBqAIQBEMpghsZqoMWaIInEEFgSri0S4FQTlvhnZ2gkDoI7AaCgJaIk8SQcD6qByNWV3SOFeQpu4lcrOdcuk+Bw27aEXluR20QC3gf14toPLTEn78Txp36K9gdgFkQM8ygI2xsYyxRYCgCG2fIqALr4A2qAgQ5twSzPeL6+QaUokAmxEBpD8eJwLYJF6qNawLQKPIA7Nfb/YLiP+8Zl/jJwU6Yrn2wxalb8YS+jEFwxYxY8k1s8ll56OFENqn0NMZl7zeXwY9cR/kc28AZ9UC9uflLH1YZVaX1lQ+94w4G6rOE524eVW5iE5h8n9YrORvnnq/ykFjsfzZM+vpoNSas54OSq2odACTNeClkcRLY44+VSOoX9KnFjiP2I16Ey+Z94Vxmpj2sVMw1RZ+4HGNLhpbg4WvAfJPbOH5cTBYeLDw41p4e3QL/4PVrm1ee5B0P5M6HwqtcFh8kI0HHPmk1VO2H6oelhxphpGmlrqtoVav2mR/b6vVSUzZqOW2v3fKSY9rUp5yT3O0x8MQ3/ZgCujMk8DpHSaB0zSHWTCkniZRBhAkohgiqQdX7cj65MGVeKJIa0iJ4wyu7GMHV0hh2WTo8ZRw5TSMp6qxK8d4Kj+X1kdxPXH+Tt69ng2maDbK5GnhT18CHMfcq4dBFQyqRs+hx856IVU0EjOHHIkVtTyPzVxBsQfQA+gdAb2hslZw0NPQ6NATpP3at2ZbhwOgCdAkvyETlikcFk3CiZkjDBnADmB3LkZMmNh8UNiZvH7MjNitm7iPmM9YBzgCHI1tvlTGkW9RD/p4KJKqdk6R8bfHJL+7+bDms2EH3/3+zJfQfZs3b62bl770jme+BBX3mLVJJvWDDlX+7oxTjZodTuAgjWJf3hkb0x6DHLoFudMY5IdIqS5l/gDk0Hm5vKOmxSeqzSTHpZU4DuY0ctj6nswRNVPXXH1QyxiYrQRBVGfDVp3N2RChZdM+WCS+lJ68HJmUTeuqgCeRni2RsjGaZmzrWtnY5sCFffnEf+fDFXQyvAOuMHR6trPhCupDlIMrWtfo+WFGQUY/8X8CrjD0S2rbaVCdzUQT9E0XfDTb2dAFxUsXdGHqmsTlTMWPj4Tv5qdwmtiZU7nnIOLTRktqLyTSfrTELhgyawZLbOaE1gcgxbGY/l4zumJSzCrUOzMUBwpShp4NBx5y/x7BgZZB1wVJTHqqTKQ37HhqJI10v354XVxr7tvXv/68nV0lN5/Nz5N+2E00nGLIQVWYSYi+yYEP0D0fcqCTk12Qg87UpJI/1N8U1RXMIyBgfhbmZ2WNc+DmZ42x52dtUV4Xlva6qybxgySPRgJjKm5euVbXTFTWiakyHat5eSnbFpWXGsh202qqsLimgViwOxtJnG2yAlsgGNxgM3OnySbalnu/xd/9KeSOBtnQe1GpIiVc4ZCkpFwrA/RLWjWneyXQW27VH1kJUPtZrwSaTj0MVmqSXQ/b3PRbQtNPFYU9sBSAfKwtpADkY7UF0+ggBUAKjCIF2JQnqkAI2EP6AxzRwKoTFSChRRfmCGpcPNqRK8X6RGOSYSHnhFKRVnWpyIbFo1vPabLSGDnl1EjlGceuTILDjw5BQtQyxM8rIRx+qLStPnWHgzkssQTh0H8ZSkY3IHv0zIdOb3WpJVEO9YJAstrRms2KS3Z1Q2eCgJMafQkCVdGGEARQmrqFIIDS1A4fZwaCAATBmIKgSI08miBASt+xBT9ktQOkyBUzwGbkRKrFrHvqpt4BKuTKQBMHSBH5usDK16H55zXzBTQ5O//p8Y9bHJHH8P7YuEHiC/JEg80Hm9+pzRck3dQFNl9kGnq0+X1HEfygNl+u6ADe5qOebD4bf9i7zYdogTY2H8IFCmiyeeDuQtcDIw9Gfmgjj0Se/oGNvMg9Cka+1sg7cht5dOxigBojrw5cxwcpokowYOTr0PwzG3nRWtAkIq06J+e9unETPA8jwgLew+I9Tt8ljPNBAowlARSbXzZYjP27lgDiRDocXPJKafduEvlvAAoAhXTJkXUmlMDQB1x8W5WSQbSKnTTCZhWka9kBS4Al6Rayc1iyxsYSEsXwdjkmLS9fO31M2jLhzMnB7sJkL4Kxq7B1HUOqoesEqTafYE/PsHrMAJb0HrZkrtFszHo4oO2EMYq4gwvLwMCgtpoN5BjTFhGZZc/IhFnL28kAV1zlVemZHc/dYyduNVUq1mMddo7FGNOO/HUKG+DTnb9O3MyiODFgthoky8FsPXvrKmG511/WmHT8dbJxl2mZwffVc7j0p9y7h5ETjJw6ds2xlCzyKfQ1OVdZzx3AAeCQDBy2qJTmsODgx1AADgDHGODQmER8BhrdcvCTOgAOAMcI4LAZZ9ygcc1CbGiI6/VjVKrzLOc5G0/WJhmfzbCZzQMcfB21iVDoMKt+3fNFMy/JyU5fjeaeKCKWmkUP8w4Q3bm0kK7aRvZ/kz2tZlzSfen/GTfdATdL67XNiKuvoHa8uFncl/nhcxbQunDjT8F6I0na80oYduL80HXWHStTYRjx8+vj0VAF2TSYwN/VOmhR3qXPgpnibI5NPcM9FZJqTyEWTUVNHRA1JV24A2xHqT7CYaKP2h9QV2amcJqID6irMkP42dhzZztO+WwI2Y3oW3BfhvhBhvKLa4LioDlRf94kkjN1lytHFJsmZZOYmqUqdN6sxF9XlK42pvRG1FwlMscqB9qemR3KOzl7mHYdbzLustYHWHmF0LF507LK2YGsoXlTUPnwbHizy2Q658CbxgEj9+EtwUHshwH3ssDdBO6msWOJUbGQmGpDkft20ABIg48mvlDNLGJiQz5k0RBFeDHdQ65U7ATEAeKOQNxAEcc84kYP3zd4nRGn4Lp6jsPlJsE3URjHC+x6T5H7nWgLgBXASnpDZqkCWDmDwkq4ereFIQP8Af7O1qwJS0IOiz9+LXRm1h4TN/DcyPsYRlAcBcB0DsbMpFMR4y3xFC28aGPMAHWAujMzYaYoXGdY1PErSjIT9pDGswWJO8cflmEwdxPwdgCmJLVkyiUDK6SIcNVXdTAxrtQTrRkAEAB4LkZNAEDRAoZhAciv7skM2xOOkyd/BQIRsHQmxgw1rnndG5aECRVaGDMAHYDuvAwYEhWFGRR0NLWA/Gl6DieU6DUuuXI8W5+nR6488mmNFXSpoF3lOLXUIR3TvrRVbu8R6XvYXLaKdPl7LGF8BmS5qKYJObJcjJ6/x+LnZCSlzZGym1UGaNTTplwlt9JCQzVLD5pTI2LSpNkGcz+jMyMdQQMzNmFGygTAjNvOw7v6z4oZTbNONtZK0QcckVFo1ndPJcymqyzoQlxpCdM6tkihgDBp35aHMIVueCDMaoIAwty2ByTKPWYErjVlRl02ZlSNS8U4NAJHisO4epoTpWoyRGkypxqfKCFnbguihJy5Qo3DFXuFUCxw+tc5/Q9amjYufJ3JpCAMZxx0/tnhxcMWE3c4mJNbAlAAKPoGBTvSGx8UvMrYggImhwESQ0BCc8qQQEhQIAwpg2KCn+cFQwGoGNRQMNn1hLm5hzUU/BQwgAJAMaZ6Qoo2OipE631/dodkrZ+xMOfyOBqRcqkoBx2N6vGORmTpl0x2KqdhjZrhfI2OKEQDfI01mAdfYxnNbBqsp4U/fQlwHIM4AHHQtzhQHYfl2V1k5WhDSWJYQCAcIxCkC2pj65hrnUqCxnXrBqzZSUUQiIImRTuVQ5z106oCfrolUwXbxL2gCEARjKAIdAkUgSiuQ2ZFIEU5W6RItjrIVBlBYKpHR20qtrXnfSBaoHxmS2c6Y885qIucKGD5G1n+LssFnGdV2wKd+/XXFu9pr7h3yTv0XchgCBa/b4tf1OgsKFkUXjGwtefz7HZr7c+xeP1+xHLw9G1j3n5Z3by+/Bqt3tSnl+v7SXNV0LR+20CqgO2BisOco7EoMKs1gW400wSta39onKNDq6ho1J0BESbOBclRwyo/s+Tg56wy/8LjGk/9FYbUXCA4+hYcXOYGVZSjZFjBQel75GqvhKI0Bxd7Kqp1PSPPm1GpwvsvrEpF00hiCGtyNV4U1U+1RIHhpSawCJg/1p+gsuW52amKvv0HtHLTPjXjKNyWsXpwI5mLWBUAOt22ks6r04ExNZHqaZa2U7t6v354XVxr7tvXv/68nV0lN5/NzxP+1WVJ+jIA3yzcYA5R4WBYzyNPnyMKD+wrY5gQTKpoUNMiSx+gDlB3FOpGTNTnmP2hjmxGYZjsWzzS1Rf3oZcqhw//Dw== diff --git a/tests/csv_pipeline_test/input/method-graph/tensile_test_method_v6/tensile_test_method_v6.mod.ttl b/tests/csv_pipeline_test/input/method-graph/tensile_test_method_v6/tensile_test_method_v6.mod.ttl deleted file mode 100755 index 854b1f40..00000000 --- a/tests/csv_pipeline_test/input/method-graph/tensile_test_method_v6/tensile_test_method_v6.mod.ttl +++ /dev/null @@ -1,344 +0,0 @@ -@prefix dc: . -@prefix emmo: . -@prefix holistic: . -@prefix isq: . -@prefix manufacturing: . -@prefix mero: . -@prefix method: . -@prefix metrology: . -@prefix mt: . -@prefix owl: . -@prefix perceptual: . -@prefix phys: . -@prefix rdfs: . -@prefix sd: . -@prefix semiotics: . - -emmo:hasProperty a owl:ObjectProperty ; - rdfs:label "has property" . - -mt: a owl:Ontology ; - dc:creator "creator_1" ; - dc:description "Ontology code created by Chowlk" ; - dc:title "EMMO ABox minimal" ; - owl:versionInfo "0.0.1" . - -mt:Individual a owl:DatatypeProperty ; - rdfs:label "individual>" ; - rdfs:domain mt:ClassName . - -mt:Load a owl:Class ; - rdfs:label "Load" . - -mt:Thickness a owl:Class ; - rdfs:label "Thickness" . - -mt:Width a owl:Class ; - rdfs:label "Width" . - -mt:hasInput a owl:ObjectProperty ; - rdfs:label "has input" . - -mt:hasOutput a owl:ObjectProperty ; - rdfs:label "has output" . - -holistic:hasParticipant a owl:ObjectProperty ; - rdfs:label "has participant" . - -isq:ISQDerivedQuantity a owl:Class ; - rdfs:label "I S Q Derived Quantity" . - -metrology:CategorizedPhysicalQuantity a owl:Class ; - rdfs:label "Categorized Physical Quantity" . - -phys:Material a owl:Class ; - rdfs:label "Material" . - -semiotics:hasSign a owl:ObjectProperty ; - rdfs:label "has sign" . - -mero:hasPart a owl:ObjectProperty ; - rdfs:label "has part" ; - rdfs:domain emmo:Matrix, - mt:DataSet . - -method:ColumnData a owl:DatatypeProperty ; - rdfs:label "column data" ; - rdfs:domain emmo:Matrix . - -method:DataSet a owl:DatatypeProperty ; - rdfs:label "data set" ; - rdfs:domain mt:DataSet . - -method:PercentageElongation a sd:PercentageElongation, - owl:NamedIndividual ; - rdfs:label "PercentageElongation" . - -method:Preload a sd:Preload, - owl:NamedIndividual ; - rdfs:label "Preload" ; - mt:hasInput method:TensileTestingMachine . - -method:SpecimenID a mt:SpecimenID, - owl:NamedIndividual ; - rdfs:label "SpecimenID" . - -method:TensileTestExperiment a mt:TensileTestMeasurement, - owl:NamedIndividual ; - rdfs:label "TensileTestExperiment" ; - emmo:hasProperty method:ProjectName, - method:ProjectNumber, - method:Remark, - method:Temperature, - method:TestStandard, - method:TimeStamp ; - mt:hasInput method:TensileTestSpecimen ; - holistic:hasParticipant method:TensileTestingMachine, - method:Tester, - method:TestingFacility . - -method:TestTime a sd:TestTime, - owl:NamedIndividual ; - rdfs:label "TestTime" . - -method:TestingRate a sd:TestingRate, - owl:NamedIndividual ; - rdfs:label "TestingRate" ; - mt:hasInput method:TensileTestingMachine . - -method:WidthChange a sd:WidthChange, - owl:NamedIndividual ; - rdfs:label "WidthChange" . - -mt:ClassName a owl:Class ; - rdfs:label "Class Name>" . - -mt:Extension a owl:Class ; - rdfs:label "Extension" . - -mt:Specimen a owl:Class ; - rdfs:label "Specimen" . - -mt:SpecimenID a owl:Class ; - rdfs:label "Specimen I D" . - -mt:SpecimenWidth a owl:Class ; - rdfs:label "Specimen Width" . - -mt:SpecimentThickness a owl:Class ; - rdfs:label "Speciment Thickness" . - -mt:TensileTestMeasurement a owl:Class ; - rdfs:label "Tensile Test Measurement" . - -mt:TensileTestSpecimen a owl:Class ; - rdfs:label "Tensile Test Specimen" ; - rdfs:subClassOf mt:Specimen . - -mt:TensileTestingMachine a owl:Class ; - rdfs:label "Tensile Testing Machine" . - -isq:Force a owl:Class ; - rdfs:label "Force" . - -method:AbsoluteCrossheadTravel a sd:AbsoluteCrossheadTravel, - owl:NamedIndividual ; - rdfs:label "AbsoluteCrossheadTravel" . - -method:DisplacementTransducer a sd:DisplacementTransducer, - owl:NamedIndividual ; - rdfs:label "DisplacementTransducer" ; - mt:hasInput method:OriginalGaugeLength ; - mt:hasOutput method:Extension . - -method:Extension a mt:Extension, - owl:NamedIndividual ; - rdfs:label "Extension" . - -method:ForceMeasuringDevice a sd:ForceMeasuringDevice, - owl:NamedIndividual ; - rdfs:label "ForceMeasuringDevice" ; - mt:hasOutput method:StandardForce . - -method:MachineData a sd:MachineData, - owl:NamedIndividual ; - rdfs:label "MachineData" . - -method:Material a sd:SpecimenMaterial, - owl:NamedIndividual ; - rdfs:label "Material" . - -method:OriginalGaugeLength a sd:OriginalGaugeLength, - owl:NamedIndividual ; - rdfs:label "OriginalGaugeLength" . - -method:ParallelLength a sd:ParallelLength, - owl:NamedIndividual ; - rdfs:label "ParallelLength" . - -method:ProjectName a sd:ProjectName, - owl:NamedIndividual ; - rdfs:label "ProjectName" . - -method:ProjectNumber a sd:ProjectNumber, - owl:NamedIndividual ; - rdfs:label "ProjectNumber" . - -method:Remark a sd:Remark, - owl:NamedIndividual ; - rdfs:label "Remark" . - -method:SpecimenThickness a mt:SpecimentThickness, - owl:NamedIndividual ; - rdfs:label "SpecimenThickness" . - -method:SpecimenType a sd:SpecimenType, - owl:NamedIndividual ; - rdfs:label "SpecimenType" . - -method:SpecimenWidth a mt:SpecimenWidth, - owl:NamedIndividual ; - rdfs:label "SpecimenWidth" . - -method:StandardForce a sd:StandardForce, - owl:NamedIndividual ; - rdfs:label "StandardForce" . - -method:Temperature a sd:Temperature, - owl:NamedIndividual ; - rdfs:label "Temperature" . - -method:TensileTestSpecimen a mt:TensileTestSpecimen, - owl:NamedIndividual ; - rdfs:label "TensileTestSpecimen" ; - emmo:hasProperty method:ParallelLength, - method:SpecimenThickness, - method:SpecimenType, - method:SpecimenWidth ; - mero:hasPart method:Material . - -method:TestStandard a sd:TestStandard, - owl:NamedIndividual ; - rdfs:label "TestStandard" . - -method:TestingFacility a sd:TestingFacility, - owl:NamedIndividual ; - rdfs:label "TestingFacility" ; - mero:hasPart method:Tester . - -method:TimeStamp a sd:TimeStamp, - owl:NamedIndividual ; - rdfs:label "TimeStamp" . - -sd:AbsoluteCrossheadTravel a owl:Class ; - rdfs:label "Absolute Crosshead Travel" ; - rdfs:subClassOf isq:Length . - -sd:DisplacementTransducer a owl:Class ; - rdfs:label "Displacement Transducer" ; - rdfs:subClassOf manufacturing:Device . - -sd:ForceMeasuringDevice a owl:Class ; - rdfs:label "Force Measuring Device" ; - rdfs:subClassOf manufacturing:Device . - -sd:MachineData a owl:Class ; - rdfs:label "Machine Data" ; - rdfs:subClassOf mt:Identifier . - -sd:OriginalGaugeLength a owl:Class ; - rdfs:label "Original Gauge Length" ; - rdfs:subClassOf isq:Length . - -sd:ParallelLength a owl:Class ; - rdfs:label "Parallel Length" . - -sd:PercentageElongation a owl:Class ; - rdfs:label "Percentage Elongation" ; - rdfs:subClassOf isq:Length . - -sd:Preload a owl:Class ; - rdfs:label "Preload" . - -sd:ProjectName a owl:Class ; - rdfs:label "Project Name" . - -sd:ProjectNumber a owl:Class ; - rdfs:label "Project Number" ; - rdfs:subClassOf mt:Identifier . - -sd:Remark a owl:Class ; - rdfs:label "Remark" . - -sd:SpecimenMaterial a owl:Class ; - rdfs:label "Specimen Material" . - -sd:SpecimenType a owl:Class ; - rdfs:label "Specimen Type" ; - rdfs:subClassOf mt:Identifier . - -sd:StandardForce a owl:Class ; - rdfs:label "Standard Force" ; - rdfs:subClassOf isq:Force . - -sd:Temperature a owl:Class ; - rdfs:label "Temperature" . - -sd:TestStandard a owl:Class ; - rdfs:label "Test Standard" . - -sd:TestTime a owl:Class ; - rdfs:label "Test Time" ; - rdfs:subClassOf isq:Time . - -sd:Tester a owl:Class ; - rdfs:label "Tester" ; - rdfs:subClassOf perceptual:Symbolic . - -sd:TestingFacility a owl:Class ; - rdfs:label "Testing Facility" ; - rdfs:subClassOf perceptual:Symbolic . - -sd:TestingRate a owl:Class ; - rdfs:label "Testing Rate" . - -sd:TimeStamp a owl:Class ; - rdfs:label "Time Stamp" ; - rdfs:subClassOf isq:Time . - -sd:WidthChange a owl:Class ; - rdfs:label "Width Change" ; - rdfs:subClassOf isq:Length . - -emmo:Matrix a owl:Class ; - rdfs:label "Matrix" . - -mt:DataSet a owl:Class ; - rdfs:label "Data Set" . - -isq:Time a owl:Class ; - rdfs:label "Time" . - -manufacturing:Device a owl:Class ; - rdfs:label "Device" . - -method:Tester a sd:Tester, - owl:NamedIndividual ; - rdfs:label "Tester" . - -perceptual:Symbolic a owl:Class ; - rdfs:label "Symbolic" . - -mt:Identifier a owl:Class ; - rdfs:label "Identifier" . - -method:TensileTestingMachine a mt:TensileTestingMachine, - owl:NamedIndividual ; - rdfs:label "TensileTestingMachine" ; - mt:hasOutput method:AbsoluteCrossheadTravel ; - semiotics:hasSign method:MachineData ; - mero:hasPart method:DisplacementTransducer, - method:ForceMeasuringDevice . - -isq:Length a owl:Class ; - rdfs:label "Length" . diff --git a/tests/csv_pipeline_test/input/method-graph/tensile_test_method_v6/tensile_test_method_v6.mod.xml b/tests/csv_pipeline_test/input/method-graph/tensile_test_method_v6/tensile_test_method_v6.mod.xml deleted file mode 100755 index 66fc8df6..00000000 --- a/tests/csv_pipeline_test/input/method-graph/tensile_test_method_v6/tensile_test_method_v6.mod.xml +++ /dev/null @@ -1 +0,0 @@ -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 diff --git a/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.abox.ttl b/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.abox.ttl deleted file mode 100755 index 854b1f40..00000000 --- a/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.abox.ttl +++ /dev/null @@ -1,344 +0,0 @@ -@prefix dc: . -@prefix emmo: . -@prefix holistic: . -@prefix isq: . -@prefix manufacturing: . -@prefix mero: . -@prefix method: . -@prefix metrology: . -@prefix mt: . -@prefix owl: . -@prefix perceptual: . -@prefix phys: . -@prefix rdfs: . -@prefix sd: . -@prefix semiotics: . - -emmo:hasProperty a owl:ObjectProperty ; - rdfs:label "has property" . - -mt: a owl:Ontology ; - dc:creator "creator_1" ; - dc:description "Ontology code created by Chowlk" ; - dc:title "EMMO ABox minimal" ; - owl:versionInfo "0.0.1" . - -mt:Individual a owl:DatatypeProperty ; - rdfs:label "individual>" ; - rdfs:domain mt:ClassName . - -mt:Load a owl:Class ; - rdfs:label "Load" . - -mt:Thickness a owl:Class ; - rdfs:label "Thickness" . - -mt:Width a owl:Class ; - rdfs:label "Width" . - -mt:hasInput a owl:ObjectProperty ; - rdfs:label "has input" . - -mt:hasOutput a owl:ObjectProperty ; - rdfs:label "has output" . - -holistic:hasParticipant a owl:ObjectProperty ; - rdfs:label "has participant" . - -isq:ISQDerivedQuantity a owl:Class ; - rdfs:label "I S Q Derived Quantity" . - -metrology:CategorizedPhysicalQuantity a owl:Class ; - rdfs:label "Categorized Physical Quantity" . - -phys:Material a owl:Class ; - rdfs:label "Material" . - -semiotics:hasSign a owl:ObjectProperty ; - rdfs:label "has sign" . - -mero:hasPart a owl:ObjectProperty ; - rdfs:label "has part" ; - rdfs:domain emmo:Matrix, - mt:DataSet . - -method:ColumnData a owl:DatatypeProperty ; - rdfs:label "column data" ; - rdfs:domain emmo:Matrix . - -method:DataSet a owl:DatatypeProperty ; - rdfs:label "data set" ; - rdfs:domain mt:DataSet . - -method:PercentageElongation a sd:PercentageElongation, - owl:NamedIndividual ; - rdfs:label "PercentageElongation" . - -method:Preload a sd:Preload, - owl:NamedIndividual ; - rdfs:label "Preload" ; - mt:hasInput method:TensileTestingMachine . - -method:SpecimenID a mt:SpecimenID, - owl:NamedIndividual ; - rdfs:label "SpecimenID" . - -method:TensileTestExperiment a mt:TensileTestMeasurement, - owl:NamedIndividual ; - rdfs:label "TensileTestExperiment" ; - emmo:hasProperty method:ProjectName, - method:ProjectNumber, - method:Remark, - method:Temperature, - method:TestStandard, - method:TimeStamp ; - mt:hasInput method:TensileTestSpecimen ; - holistic:hasParticipant method:TensileTestingMachine, - method:Tester, - method:TestingFacility . - -method:TestTime a sd:TestTime, - owl:NamedIndividual ; - rdfs:label "TestTime" . - -method:TestingRate a sd:TestingRate, - owl:NamedIndividual ; - rdfs:label "TestingRate" ; - mt:hasInput method:TensileTestingMachine . - -method:WidthChange a sd:WidthChange, - owl:NamedIndividual ; - rdfs:label "WidthChange" . - -mt:ClassName a owl:Class ; - rdfs:label "Class Name>" . - -mt:Extension a owl:Class ; - rdfs:label "Extension" . - -mt:Specimen a owl:Class ; - rdfs:label "Specimen" . - -mt:SpecimenID a owl:Class ; - rdfs:label "Specimen I D" . - -mt:SpecimenWidth a owl:Class ; - rdfs:label "Specimen Width" . - -mt:SpecimentThickness a owl:Class ; - rdfs:label "Speciment Thickness" . - -mt:TensileTestMeasurement a owl:Class ; - rdfs:label "Tensile Test Measurement" . - -mt:TensileTestSpecimen a owl:Class ; - rdfs:label "Tensile Test Specimen" ; - rdfs:subClassOf mt:Specimen . - -mt:TensileTestingMachine a owl:Class ; - rdfs:label "Tensile Testing Machine" . - -isq:Force a owl:Class ; - rdfs:label "Force" . - -method:AbsoluteCrossheadTravel a sd:AbsoluteCrossheadTravel, - owl:NamedIndividual ; - rdfs:label "AbsoluteCrossheadTravel" . - -method:DisplacementTransducer a sd:DisplacementTransducer, - owl:NamedIndividual ; - rdfs:label "DisplacementTransducer" ; - mt:hasInput method:OriginalGaugeLength ; - mt:hasOutput method:Extension . - -method:Extension a mt:Extension, - owl:NamedIndividual ; - rdfs:label "Extension" . - -method:ForceMeasuringDevice a sd:ForceMeasuringDevice, - owl:NamedIndividual ; - rdfs:label "ForceMeasuringDevice" ; - mt:hasOutput method:StandardForce . - -method:MachineData a sd:MachineData, - owl:NamedIndividual ; - rdfs:label "MachineData" . - -method:Material a sd:SpecimenMaterial, - owl:NamedIndividual ; - rdfs:label "Material" . - -method:OriginalGaugeLength a sd:OriginalGaugeLength, - owl:NamedIndividual ; - rdfs:label "OriginalGaugeLength" . - -method:ParallelLength a sd:ParallelLength, - owl:NamedIndividual ; - rdfs:label "ParallelLength" . - -method:ProjectName a sd:ProjectName, - owl:NamedIndividual ; - rdfs:label "ProjectName" . - -method:ProjectNumber a sd:ProjectNumber, - owl:NamedIndividual ; - rdfs:label "ProjectNumber" . - -method:Remark a sd:Remark, - owl:NamedIndividual ; - rdfs:label "Remark" . - -method:SpecimenThickness a mt:SpecimentThickness, - owl:NamedIndividual ; - rdfs:label "SpecimenThickness" . - -method:SpecimenType a sd:SpecimenType, - owl:NamedIndividual ; - rdfs:label "SpecimenType" . - -method:SpecimenWidth a mt:SpecimenWidth, - owl:NamedIndividual ; - rdfs:label "SpecimenWidth" . - -method:StandardForce a sd:StandardForce, - owl:NamedIndividual ; - rdfs:label "StandardForce" . - -method:Temperature a sd:Temperature, - owl:NamedIndividual ; - rdfs:label "Temperature" . - -method:TensileTestSpecimen a mt:TensileTestSpecimen, - owl:NamedIndividual ; - rdfs:label "TensileTestSpecimen" ; - emmo:hasProperty method:ParallelLength, - method:SpecimenThickness, - method:SpecimenType, - method:SpecimenWidth ; - mero:hasPart method:Material . - -method:TestStandard a sd:TestStandard, - owl:NamedIndividual ; - rdfs:label "TestStandard" . - -method:TestingFacility a sd:TestingFacility, - owl:NamedIndividual ; - rdfs:label "TestingFacility" ; - mero:hasPart method:Tester . - -method:TimeStamp a sd:TimeStamp, - owl:NamedIndividual ; - rdfs:label "TimeStamp" . - -sd:AbsoluteCrossheadTravel a owl:Class ; - rdfs:label "Absolute Crosshead Travel" ; - rdfs:subClassOf isq:Length . - -sd:DisplacementTransducer a owl:Class ; - rdfs:label "Displacement Transducer" ; - rdfs:subClassOf manufacturing:Device . - -sd:ForceMeasuringDevice a owl:Class ; - rdfs:label "Force Measuring Device" ; - rdfs:subClassOf manufacturing:Device . - -sd:MachineData a owl:Class ; - rdfs:label "Machine Data" ; - rdfs:subClassOf mt:Identifier . - -sd:OriginalGaugeLength a owl:Class ; - rdfs:label "Original Gauge Length" ; - rdfs:subClassOf isq:Length . - -sd:ParallelLength a owl:Class ; - rdfs:label "Parallel Length" . - -sd:PercentageElongation a owl:Class ; - rdfs:label "Percentage Elongation" ; - rdfs:subClassOf isq:Length . - -sd:Preload a owl:Class ; - rdfs:label "Preload" . - -sd:ProjectName a owl:Class ; - rdfs:label "Project Name" . - -sd:ProjectNumber a owl:Class ; - rdfs:label "Project Number" ; - rdfs:subClassOf mt:Identifier . - -sd:Remark a owl:Class ; - rdfs:label "Remark" . - -sd:SpecimenMaterial a owl:Class ; - rdfs:label "Specimen Material" . - -sd:SpecimenType a owl:Class ; - rdfs:label "Specimen Type" ; - rdfs:subClassOf mt:Identifier . - -sd:StandardForce a owl:Class ; - rdfs:label "Standard Force" ; - rdfs:subClassOf isq:Force . - -sd:Temperature a owl:Class ; - rdfs:label "Temperature" . - -sd:TestStandard a owl:Class ; - rdfs:label "Test Standard" . - -sd:TestTime a owl:Class ; - rdfs:label "Test Time" ; - rdfs:subClassOf isq:Time . - -sd:Tester a owl:Class ; - rdfs:label "Tester" ; - rdfs:subClassOf perceptual:Symbolic . - -sd:TestingFacility a owl:Class ; - rdfs:label "Testing Facility" ; - rdfs:subClassOf perceptual:Symbolic . - -sd:TestingRate a owl:Class ; - rdfs:label "Testing Rate" . - -sd:TimeStamp a owl:Class ; - rdfs:label "Time Stamp" ; - rdfs:subClassOf isq:Time . - -sd:WidthChange a owl:Class ; - rdfs:label "Width Change" ; - rdfs:subClassOf isq:Length . - -emmo:Matrix a owl:Class ; - rdfs:label "Matrix" . - -mt:DataSet a owl:Class ; - rdfs:label "Data Set" . - -isq:Time a owl:Class ; - rdfs:label "Time" . - -manufacturing:Device a owl:Class ; - rdfs:label "Device" . - -method:Tester a sd:Tester, - owl:NamedIndividual ; - rdfs:label "Tester" . - -perceptual:Symbolic a owl:Class ; - rdfs:label "Symbolic" . - -mt:Identifier a owl:Class ; - rdfs:label "Identifier" . - -method:TensileTestingMachine a mt:TensileTestingMachine, - owl:NamedIndividual ; - rdfs:label "TensileTestingMachine" ; - mt:hasOutput method:AbsoluteCrossheadTravel ; - semiotics:hasSign method:MachineData ; - mero:hasPart method:DisplacementTransducer, - method:ForceMeasuringDevice . - -isq:Length a owl:Class ; - rdfs:label "Length" . diff --git a/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.datastorage.hdf5 b/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.datastorage.hdf5 deleted file mode 100755 index fee2c508..00000000 Binary files a/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.datastorage.hdf5 and /dev/null differ diff --git a/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.generic.xlsx b/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.generic.xlsx deleted file mode 100755 index 336cbee5..00000000 Binary files a/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.generic.xlsx and /dev/null differ diff --git a/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.mapping-result.xlsx b/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.mapping-result.xlsx deleted file mode 100755 index 2e46360a..00000000 Binary files a/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.mapping-result.xlsx and /dev/null differ diff --git a/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.mapping.ttl b/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.mapping.ttl deleted file mode 100755 index 3a9cfb14..00000000 --- a/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.mapping.ttl +++ /dev/null @@ -1,27 +0,0 @@ -@prefix owl: . - - owl:sameAs . - - owl:sameAs . - - owl:sameAs . - - owl:sameAs . - - owl:sameAs . - - owl:sameAs . - - owl:sameAs . - - owl:sameAs . - - owl:sameAs . - - owl:sameAs . - - owl:sameAs . - - owl:sameAs . - - owl:sameAs . diff --git a/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.metadata.ttl b/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.metadata.ttl deleted file mode 100755 index 477fc8d6..00000000 --- a/tests/csv_pipeline_test/output/DX56_D_FZ2_WR00_43.metadata.ttl +++ /dev/null @@ -1,288 +0,0 @@ -@prefix dcat: . -@prefix fileid: . -@prefix ns1: . -@prefix ns2: . -@prefix ns3: . -@prefix ns4: . -@prefix ns5: . -@prefix rdfs: . -@prefix xsd: . - -fileid:dataset a dcat:Dataset ; - ns1:composition fileid:column-0, - fileid:column-1, - fileid:column-2, - fileid:column-3, - fileid:column-4, - fileid:column-5, - fileid:metadata-0, - fileid:metadata-1, - fileid:metadata-10, - fileid:metadata-11, - fileid:metadata-12, - fileid:metadata-13, - fileid:metadata-14, - fileid:metadata-15, - fileid:metadata-16, - fileid:metadata-17, - fileid:metadata-18, - fileid:metadata-19, - fileid:metadata-2, - fileid:metadata-3, - fileid:metadata-4, - fileid:metadata-5, - fileid:metadata-6, - fileid:metadata-7, - fileid:metadata-8, - fileid:metadata-9 ; - dcat:downloadURL "/root/2023/data2rdf/tests/csv_pipeline_test/input/data/DX56_D_FZ2_WR00_43.TXT" . - -fileid:MetricPrefix-13 a . - -fileid:MetricPrefix-14 a . - -fileid:MetricPrefix-15 a . - -fileid:MetricPrefix-17 a . - -fileid:UnitSymbol-13 a . - -fileid:UnitSymbol-14 a . - -fileid:UnitSymbol-15 a . - -fileid:UnitSymbol-17 a . - -fileid:column-0 a ns1:DataInstance ; - rdfs:label "s" ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-0, - fileid:unitliteral-0 . - -fileid:column-1 a ns1:DataInstance ; - rdfs:label "N" ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-1, - fileid:unitliteral-1 . - -fileid:column-2 a ns1:DataInstance ; - rdfs:label "mm" ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-2, - fileid:unitliteral-2 . - -fileid:column-3 a ns1:DataInstance ; - rdfs:label "mm.1" ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-3, - fileid:unitliteral-3 . - -fileid:column-4 a ns1:DataInstance ; - rdfs:label "mm.2" ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-4, - fileid:unitliteral-4 . - -fileid:column-5 a ns1:DataInstance ; - rdfs:label "mm.3" ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-5, - fileid:unitliteral-5 . - -fileid:metadata-0 a ns1:Metadata ; - rdfs:label "Pr�finstitut" ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "institute_1"^^xsd:string . - -fileid:metadata-1 a ns1:Metadata ; - rdfs:label "Projektnummer" ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "123456"^^xsd:string . - -fileid:metadata-10 a ns1:Metadata ; - rdfs:label "Pr�fer" ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "abc"^^xsd:string . - -fileid:metadata-11 a ns1:Metadata ; - rdfs:label "Probenkennung 2" ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "Probentyp_2"^^xsd:string . - -fileid:metadata-12 a ns1:Metadata, - ns3:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Messl�nge Standardweg" ; - ns3:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-12 . - -fileid:metadata-13 a ns1:Metadata, - ns3:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Versuchsl�nge" ; - ns3:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-13 . - -fileid:metadata-14 a ns1:Metadata, - ns3:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Probendicke" ; - ns3:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-14 . - -fileid:metadata-15 a ns1:Metadata, - ns3:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Probenbreite" ; - ns3:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-15 . - -fileid:metadata-16 a ns1:Metadata, - ns3:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Pr�fgeschwindigkeit" ; - ns3:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-16 . - -fileid:metadata-17 a ns1:Metadata, - ns3:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Vorkraft" ; - ns3:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-17 . - -fileid:metadata-18 a ns1:Metadata, - ns3:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Temperatur" ; - ns3:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-18 . - -fileid:metadata-19 a ns1:Metadata ; - rdfs:label "Bemerkung" ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "nan"^^xsd:string . - -fileid:metadata-2 a ns1:Metadata ; - rdfs:label "Projektname" ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "proj_name_1"^^xsd:string . - -fileid:metadata-3 a ns1:Metadata ; - rdfs:label "Datum/Uhrzeit" ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "44335.4"^^xsd:string . - -fileid:metadata-4 a ns1:Metadata ; - rdfs:label "Maschinendaten" ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "maschine_1"^^xsd:string . - -fileid:metadata-5 a ns1:Metadata ; - rdfs:label "Kraftaufnehmer" ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "Kraftaufnehmer_1"^^xsd:string . - -fileid:metadata-6 a ns1:Metadata ; - rdfs:label "Wegaufnehmer" ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "Wegaufnehmer_1"^^xsd:string . - -fileid:metadata-7 a ns1:Metadata ; - rdfs:label "Pr�fnorm" ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "ISO-XX"^^xsd:string . - -fileid:metadata-8 a ns1:Metadata ; - rdfs:label "Werkstoff" ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "Werkstoff_1"^^xsd:string . - -fileid:metadata-9 a ns1:Metadata ; - rdfs:label "Probentyp" ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "Probentyp_1"^^xsd:string . - -fileid:numeric-12 a ns5:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns5:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "80.0"^^xsd:float ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-12, - fileid:unitliteral-12 . - -fileid:numeric-13 a ns5:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns5:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "120.0"^^xsd:float ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-13, - fileid:unitliteral-13 . - -fileid:numeric-14 a ns5:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns5:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "1.55"^^xsd:float ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-14, - fileid:unitliteral-14 . - -fileid:numeric-15 a ns5:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns5:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "20.04"^^xsd:float ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-15, - fileid:unitliteral-15 . - -fileid:numeric-16 a ns5:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns5:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "0.1"^^xsd:float ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-16, - fileid:unitliteral-16 . - -fileid:numeric-17 a ns5:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns5:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "2.0"^^xsd:float ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-17, - fileid:unitliteral-17 . - -fileid:numeric-18 a ns5:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns5:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "22.0"^^xsd:float ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-18, - fileid:unitliteral-18 . - -fileid:unit-0 a ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "0.902359827"^^xsd:string . - -fileid:unit-1 a ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "0.576537916"^^xsd:string . - -fileid:unit-12 a ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm'"^^xsd:string . - -fileid:unit-13 a ns3:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns4:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-13, - fileid:UnitSymbol-13 . - -fileid:unit-14 a ns3:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns4:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-14, - fileid:UnitSymbol-14 . - -fileid:unit-15 a ns3:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns4:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-15, - fileid:UnitSymbol-15 . - -fileid:unit-16 a ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm/s"^^xsd:string . - -fileid:unit-17 a ns3:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns4:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-17, - fileid:UnitSymbol-17 . - -fileid:unit-18 a ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "�C"^^xsd:string . - -fileid:unit-2 a ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "0.261094396"^^xsd:string . - -fileid:unit-3 a ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "0.767421407"^^xsd:string . - -fileid:unit-4 a ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "0.950183725"^^xsd:string . - -fileid:unit-5 a ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "0.035807567"^^xsd:string . - -fileid:unitliteral-0 a ns3:UnitLiteral ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 "0.902359827"^^xsd:string . - -fileid:unitliteral-1 a ns3:UnitLiteral ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 "0.576537916"^^xsd:string . - -fileid:unitliteral-12 a ns3:UnitLiteral ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm'"^^xsd:string . - -fileid:unitliteral-13 a ns3:UnitLiteral ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm"^^xsd:string . - -fileid:unitliteral-14 a ns3:UnitLiteral ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm"^^xsd:string . - -fileid:unitliteral-15 a ns3:UnitLiteral ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm"^^xsd:string . - -fileid:unitliteral-16 a ns3:UnitLiteral ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm/s"^^xsd:string . - -fileid:unitliteral-17 a ns3:UnitLiteral ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "MPa"^^xsd:string . - -fileid:unitliteral-18 a ns3:UnitLiteral ; - ns2:EMMO_23b579e1_8088_45b5_9975_064014026c42 "�C"^^xsd:string . - -fileid:unitliteral-2 a ns3:UnitLiteral ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 "0.261094396"^^xsd:string . - -fileid:unitliteral-3 a ns3:UnitLiteral ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 "0.767421407"^^xsd:string . - -fileid:unitliteral-4 a ns3:UnitLiteral ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 "0.950183725"^^xsd:string . - -fileid:unitliteral-5 a ns3:UnitLiteral ; - ns3:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 "0.035807567"^^xsd:string . diff --git a/tests/csv_pipeline_test/output/output_csv_parser.ttl b/tests/csv_pipeline_test/output/output_csv_parser.ttl new file mode 100644 index 00000000..3de5929f --- /dev/null +++ b/tests/csv_pipeline_test/output/output_csv_parser.ttl @@ -0,0 +1,222 @@ +@prefix csvw: . +@prefix dcterms: . +@prefix fileid: . +@prefix foaf: . +@prefix qudt: . +@prefix rdfs: . +@prefix xsd: . + +fileid:tableGroup a csvw:TableGroup ; + csvw:table [ a csvw:Table ; + rdfs:label "Time series data" ; + csvw:tableSchema [ a csvw:Schema ; + csvw:column [ a csvw:Column ; + qudt:quantity fileid:TestTime ; + csvw:titles "Prüfzeit"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-0"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:StandardForce ; + csvw:titles "Standardkraft"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-1"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:Extension ; + csvw:titles "Standardweg"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-3"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:Elongation ; + csvw:titles "Dehnung"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-5"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:AbsoluteCrossheadTravel ; + csvw:titles "Traversenweg absolut"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-2"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:WidthChange ; + csvw:titles "Breitenänderung"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-4"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ] ] ], + [ a csvw:Table ; + rdfs:label "Metadata" ; + csvw:row [ a csvw:Row ; + csvw:describes fileid:MachineData ; + csvw:rownum 4 ; + csvw:titles "Maschinendaten"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:ParallelLength ; + csvw:rownum 13 ; + csvw:titles "Versuchslänge"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:TimeStamp ; + csvw:rownum 3 ; + csvw:titles "Datum/Uhrzeit"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:ProjectName ; + csvw:rownum 2 ; + csvw:titles "Projektname"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:TestingRate ; + csvw:rownum 16 ; + csvw:titles "Prüfgeschwindigkeit"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:Material ; + csvw:rownum 8 ; + csvw:titles "Werkstoff"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:Temperature ; + csvw:rownum 18 ; + csvw:titles "Temperatur"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:SpecimenType ; + csvw:rownum 9 ; + csvw:titles "Probentyp"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:OriginalGaugeLength ; + csvw:rownum 12 ; + csvw:titles "Messlänge Standardweg"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:SpecimenWidth ; + csvw:rownum 15 ; + csvw:titles "Probenbreite"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:SampleIdentifier-2 ; + csvw:rownum 11 ; + csvw:titles "Probenkennung 2"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:TestingFacility ; + csvw:rownum 0 ; + csvw:titles "Prüfinstitut"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:Preload ; + csvw:rownum 17 ; + csvw:titles "Vorkraft"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:SpecimenThickness ; + csvw:rownum 14 ; + csvw:titles "Probendicke"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:ProjectNumber ; + csvw:rownum 1 ; + csvw:titles "Projektnummer"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:TestStandard ; + csvw:rownum 7 ; + csvw:titles "Prüfnorm"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:Tester ; + csvw:rownum 10 ; + csvw:titles "Prüfer"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:DisplacementTransducer ; + csvw:rownum 6 ; + csvw:titles "Wegaufnehmer"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:ForceMeasuringDevice ; + csvw:rownum 5 ; + csvw:titles "Kraftaufnehmer"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:Remark ; + csvw:rownum 19 ; + csvw:titles "Bemerkung"^^xsd:string ] ] . + +fileid:AbsoluteCrossheadTravel a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI . + +fileid:DisplacementTransducer a ; + rdfs:label "Wegaufnehmer_1" . + +fileid:Elongation a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI . + +fileid:Extension a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI . + +fileid:ForceMeasuringDevice a ; + rdfs:label "Kraftaufnehmer_1" . + +fileid:MachineData a ; + rdfs:label "maschine_1" . + +fileid:Material a , + ; + rdfs:label "Werkstoff_1" . + +fileid:OriginalGaugeLength a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "80.0"^^xsd:float . + +fileid:ParallelLength a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "120.0"^^xsd:float . + +fileid:Preload a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MegaPA"^^xsd:anyURI ; + qudt:value "2.0"^^xsd:float . + +fileid:ProjectName a ; + rdfs:label "proj_name_1" . + +fileid:ProjectNumber a ; + rdfs:label "123456" . + +fileid:Remark a ; + rdfs:label "" . + +fileid:SampleIdentifier-2 a ; + rdfs:label "Probentyp_2" . + +fileid:SpecimenThickness a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "1.55"^^xsd:float . + +fileid:SpecimenType a ; + rdfs:label "Probentyp_1" . + +fileid:SpecimenWidth a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "20.04"^^xsd:float . + +fileid:StandardForce a ; + qudt:hasUnit "http://qudt.org/vocab/unit/N"^^xsd:anyURI . + +fileid:Temperature a ; + qudt:hasUnit "http://qudt.org/vocab/unit/DEG_C"^^xsd:anyURI ; + qudt:value "22.0"^^xsd:float . + +fileid:TestStandard a ; + rdfs:label "ISO-XX" . + +fileid:TestTime a ; + qudt:hasUnit "http://qudt.org/vocab/unit/SEC"^^xsd:anyURI . + +fileid:Tester a ; + rdfs:label "abc" . + +fileid:TestingFacility a ; + rdfs:label "institute_1" . + +fileid:TestingRate a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM-PER-SEC"^^xsd:anyURI ; + qudt:value "0.1"^^xsd:float . + +fileid:TimeStamp a ; + rdfs:label "44335.4" . + +fileid:WidthChange a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI . diff --git a/tests/csv_pipeline_test/output/output_pipeline.ttl b/tests/csv_pipeline_test/output/output_pipeline.ttl new file mode 100644 index 00000000..633232e4 --- /dev/null +++ b/tests/csv_pipeline_test/output/output_pipeline.ttl @@ -0,0 +1,322 @@ +@prefix csvw: . +@prefix dcat: . +@prefix dcterms: . +@prefix fileid: . +@prefix foaf: . +@prefix ns1: . +@prefix qudt: . +@prefix rdfs: . +@prefix xsd: . + +fileid:TensileTestExperiment a ns1:Activity ; + ns1:generated fileid:AbsoluteCrossheadTravel, + fileid:Extension, + fileid:Remark, + fileid:StandardForce, + fileid:TimeStamp, + fileid:dataset ; + ns1:hadPlan fileid:TestStandard ; + ns1:used fileid:DisplacementTransducer, + fileid:ForceMeasuringDevice, + fileid:TensileTestSpecimen, + fileid:TensileTestingMachine, + fileid:TestingFacility ; + ns1:wasAssociatedWith fileid:Tester ; + ns1:wasInfluencedBy fileid:ExperimentPreparation . + +fileid:TestingStandard a ns1:Plan . + +fileid:Elongation a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI . + +fileid:ExperimentPreparation a ns1:Activity ; + ns1:atLocation fileid:TestingLab ; + ns1:generated fileid:OriginalGaugeLength, + fileid:Preload, + fileid:TestingRate ; + ns1:wasAssociatedWith fileid:DisplacementTransducer, + fileid:ForceMeasuringDevice, + fileid:TensileTestSpecimen, + fileid:TensileTestingMachine, + fileid:Tester ; + ns1:wasInfluencedBy fileid:SamplePreparatation . + +fileid:MachineData a ; + rdfs:label "maschine_1" . + +fileid:Project a ns1:Activity ; + ns1:generated fileid:ProjectName, + fileid:ProjectNumber ; + ns1:wasAssociatedWith fileid:TestingFacility . + +fileid:SampleIdentifier-2 a ; + rdfs:label "Probentyp_2" . + +fileid:SamplePreparatation a ns1:Activity ; + ns1:generated fileid:ParallelLength, + fileid:SpecimenThickness, + fileid:SpecimenType, + fileid:SpecimenWidth ; + ns1:wasAssociatedWith fileid:Material, + fileid:TensileTestSpecimen ; + ns1:wasInfluencedBy fileid:Project . + +fileid:Temperature a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/DEG_C"^^xsd:anyURI ; + qudt:value "22.0"^^xsd:float ; + ns1:wasAttributedTo fileid:TestingLab . + +fileid:TestTime a ; + qudt:hasUnit "http://qudt.org/vocab/unit/SEC"^^xsd:anyURI . + +fileid:WidthChange a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI . + +fileid:dataset a dcat:Dataset, + ns1:Entity ; + dcterms:hasPart fileid:tableGroup ; + dcat:distribution [ a dcat:Distribution ; + dcat:accessURL "https://www.example.org/download/"^^xsd:anyURI ; + dcat:mediaType "http://www.iana.org/assignments/media-types/text/csv"^^xsd:anyURI ] . + +fileid:tableGroup a csvw:TableGroup ; + csvw:table [ a csvw:Table ; + rdfs:label "Time series data" ; + csvw:tableSchema [ a csvw:Schema ; + csvw:column [ a csvw:Column ; + qudt:quantity fileid:StandardForce ; + csvw:titles "Standardkraft"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-1"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:AbsoluteCrossheadTravel ; + csvw:titles "Traversenweg absolut"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-2"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:Elongation ; + csvw:titles "Dehnung"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-5"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:TestTime ; + csvw:titles "Prüfzeit"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-0"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:Extension ; + csvw:titles "Standardweg"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-3"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:WidthChange ; + csvw:titles "Breitenänderung"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-4"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ] ] ], + [ a csvw:Table ; + rdfs:label "Metadata" ; + csvw:row [ a csvw:Row ; + csvw:describes fileid:Tester ; + csvw:rownum 10 ; + csvw:titles "Prüfer"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:Remark ; + csvw:rownum 19 ; + csvw:titles "Bemerkung"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:OriginalGaugeLength ; + csvw:rownum 12 ; + csvw:titles "Messlänge Standardweg"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:TimeStamp ; + csvw:rownum 3 ; + csvw:titles "Datum/Uhrzeit"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:SpecimenWidth ; + csvw:rownum 15 ; + csvw:titles "Probenbreite"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:TestStandard ; + csvw:rownum 7 ; + csvw:titles "Prüfnorm"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:SpecimenType ; + csvw:rownum 9 ; + csvw:titles "Probentyp"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:ProjectNumber ; + csvw:rownum 1 ; + csvw:titles "Projektnummer"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:ParallelLength ; + csvw:rownum 13 ; + csvw:titles "Versuchslänge"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:Temperature ; + csvw:rownum 18 ; + csvw:titles "Temperatur"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:MachineData ; + csvw:rownum 4 ; + csvw:titles "Maschinendaten"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:Material ; + csvw:rownum 8 ; + csvw:titles "Werkstoff"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:TestingFacility ; + csvw:rownum 0 ; + csvw:titles "Prüfinstitut"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:ProjectName ; + csvw:rownum 2 ; + csvw:titles "Projektname"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:Preload ; + csvw:rownum 17 ; + csvw:titles "Vorkraft"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:TestingRate ; + csvw:rownum 16 ; + csvw:titles "Prüfgeschwindigkeit"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:SampleIdentifier-2 ; + csvw:rownum 11 ; + csvw:titles "Probenkennung 2"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:DisplacementTransducer ; + csvw:rownum 6 ; + csvw:titles "Wegaufnehmer"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:ForceMeasuringDevice ; + csvw:rownum 5 ; + csvw:titles "Kraftaufnehmer"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:SpecimenThickness ; + csvw:rownum 14 ; + csvw:titles "Probendicke"^^xsd:string ] ] . + +fileid:AbsoluteCrossheadTravel a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + ns1:wasDerivedFrom fileid:DisplacementTransducer . + +fileid:Extension a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + ns1:wasDerivedFrom fileid:DisplacementTransducer . + +fileid:Material a ns1:Agent, + , + ; + rdfs:label "Werkstoff_1" . + +fileid:OriginalGaugeLength a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "80.0"^^xsd:float ; + ns1:wasAttributedTo fileid:DisplacementTransducer . + +fileid:ParallelLength a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "120.0"^^xsd:float ; + ns1:wasAttributedTo fileid:TensileTestSpecimen . + +fileid:Preload a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/MegaPA"^^xsd:anyURI ; + qudt:value "2.0"^^xsd:float ; + ns1:wasAttributedTo fileid:TensileTestingMachine . + +fileid:ProjectName a ns1:Entity, + ; + rdfs:label "proj_name_1" . + +fileid:ProjectNumber a ns1:Entity, + ; + rdfs:label "123456" . + +fileid:Remark a ; + rdfs:label "" . + +fileid:SpecimenThickness a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "1.55"^^xsd:float ; + ns1:wasAttributedTo fileid:TensileTestSpecimen . + +fileid:SpecimenType a ns1:Entity, + ; + rdfs:label "Probentyp_1" ; + ns1:wasAttributedTo fileid:TensileTestSpecimen . + +fileid:SpecimenWidth a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "20.04"^^xsd:float ; + ns1:wasAttributedTo fileid:TensileTestSpecimen . + +fileid:StandardForce a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/N"^^xsd:anyURI ; + ns1:wasDerivedFrom fileid:ForceMeasuringDevice . + +fileid:TestStandard a ; + rdfs:label "ISO-XX" . + +fileid:TestingRate a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM-PER-SEC"^^xsd:anyURI ; + qudt:value "0.1"^^xsd:float ; + ns1:wasAttributedTo fileid:TensileTestingMachine . + +fileid:TimeStamp a ; + rdfs:label "44335.4" . + +fileid:Tester a ns1:Agent, + ; + rdfs:label "abc" ; + ns1:actedOnBehalfOf fileid:TestingFacility ; + ns1:atLocation fileid:TestingLab . + +fileid:ForceMeasuringDevice a ns1:Agent, + ns1:Entity, + ; + rdfs:label "Kraftaufnehmer_1" ; + ns1:atLocation fileid:TestingLab . + +fileid:TensileTestingMachine a ns1:Agent, + ns1:Entity ; + ns1:atLocation fileid:TestingLab . + +fileid:TestingFacility a ns1:Location, + ns1:Organization, + ; + rdfs:label "institute_1" . + +fileid:DisplacementTransducer a ns1:Agent, + ns1:Entity, + ; + rdfs:label "Wegaufnehmer_1" ; + ns1:atLocation fileid:TestingLab . + +fileid:TestingLab a ns1:Agent, + ns1:Location ; + ns1:atLocation fileid:TestingFacility . + +fileid:TensileTestSpecimen a ns1:Agent, + ns1:Entity . diff --git a/tests/csv_pipeline_test/test_abox_pipeline.py b/tests/csv_pipeline_test/test_abox_pipeline.py deleted file mode 100755 index f81ac741..00000000 --- a/tests/csv_pipeline_test/test_abox_pipeline.py +++ /dev/null @@ -1,29 +0,0 @@ -import os -import shutil -import unittest - -from data2rdf.cli.abox_conversion import run_abox_pipeline_for_folder - -from .test_utils import check_file_identifier_in_folder - -test_folder = os.path.dirname(os.path.abspath(__file__)) -abox_folder_path = os.path.join(test_folder, "input", "method-graph") -output_folder = os.path.join(abox_folder_path, "tensile_test_method_v6") - - -class TestAboxPipeline(unittest.TestCase): - def setUp(self): - shutil.rmtree(output_folder, ignore_errors=True) - run_abox_pipeline_for_folder(abox_folder_path) - - def test_file_exist(self): - self.assertTrue( - check_file_identifier_in_folder(output_folder, ".mod.ttl") - ) - self.assertTrue( - check_file_identifier_in_folder(output_folder, ".mod.xml") - ) - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/csv_pipeline_test/test_csv2rdf.py b/tests/csv_pipeline_test/test_csv2rdf.py deleted file mode 100755 index 51f8db68..00000000 --- a/tests/csv_pipeline_test/test_csv2rdf.py +++ /dev/null @@ -1,94 +0,0 @@ -import os -import shutil -import unittest - -from data2rdf.annotation_pipeline import AnnotationPipeline -from data2rdf.csv_parser import CSVParser - -from .test_utils import check_file_identifier_in_folder - -test_folder = os.path.dirname(os.path.abspath(__file__)) -working_folder = os.path.join(test_folder, "input") - -output_folder = os.path.join(test_folder, "output") - -template = os.path.join( - working_folder, - "method-graph", - "tensile_test_method_v6", - "tensile_test_method_v6.mod.ttl", -) -mapping_file = os.path.join( - working_folder, "mapping", "tensile_test_mapping.xlsx" -) -raw_data = os.path.join(working_folder, "data", "DX56_D_FZ2_WR00_43.TXT") - -parser = "csv" -parser_args = {"header_sep": "\t", "column_sep": "\t", "header_length": 20} - - -class TestAnnotationPipelineCSV(unittest.TestCase): - def setUp(self): - self.pipeline = AnnotationPipeline( - raw_data, - parser, - parser_args, - template, - mapping_file, - output_folder, - ) - - shutil.rmtree(output_folder, ignore_errors=True) - - self.pipeline.run_pipeline() - - def test_file_exist(self): - self.assertTrue( - check_file_identifier_in_folder(self.pipeline.output, "abox.ttl") - ) - self.assertTrue( - check_file_identifier_in_folder( - self.pipeline.output, "generic.xlsx" - ) - ) - self.assertTrue( - check_file_identifier_in_folder( - self.pipeline.output, "mapping.ttl" - ) - ) - self.assertTrue( - check_file_identifier_in_folder( - self.pipeline.output, "datastorage.hdf5" - ) - ) - self.assertTrue( - check_file_identifier_in_folder( - self.pipeline.output, "metadata.ttl" - ) - ) - - -class TestCSVParser(unittest.TestCase): - def setUp(self): - self.parser = CSVParser( - raw_data, - header_sep="\t", - column_sep="\t", - header_length=20, - ) - - self.parser.parser_data() - - def test_basic_run(self): - self.assertTrue(hasattr(self.parser, "file_meta_df")) - self.assertTrue(hasattr(self.parser, "column_df")) - self.assertTrue(hasattr(self.parser, "meta_df")) - - def test_dfs(self): - self.assertFalse(self.parser.file_meta_df.empty) - self.assertFalse(self.parser.column_df.empty) - self.assertFalse(self.parser.meta_df.empty) - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/csv_pipeline_test/test_parser.py b/tests/csv_pipeline_test/test_parser.py new file mode 100644 index 00000000..850ca18a --- /dev/null +++ b/tests/csv_pipeline_test/test_parser.py @@ -0,0 +1,239 @@ +"""CSV Parser pytest""" + +import json +import os + +import pytest + +test_folder = os.path.dirname(os.path.abspath(__file__)) +working_folder = os.path.join(test_folder, "input") +output_folder = os.path.join(test_folder, "output") + +mapping_folder = os.path.join(working_folder, "mapping") +raw_data = os.path.join(working_folder, "data", "DX56_D_FZ2_WR00_43.TXT") +expected = os.path.join(output_folder, "output_csv_parser.ttl") + +parser_args = { + "metadata_sep": "\t", + "time_series_sep": "\t", + "metadata_length": 20, +} + +metadata = { + "TestingFacility": "institute_1", + "ProjectNumber": "123456", + "ProjectName": "proj_name_1", + "TimeStamp": "44335.4", + "MachineData": "maschine_1", + "ForceMeasuringDevice": "Kraftaufnehmer_1", + "DisplacementTransducer": "Wegaufnehmer_1", + "TestStandard": "ISO-XX", + "Material": "Werkstoff_1", + "SpecimenType": "Probentyp_1", + "Tester": "abc", + "SampleIdentifier-2": "Probentyp_2", + "OriginalGaugeLength": 80, + "ParallelLength": 120, + "SpecimenThickness": 1.55, + "SpecimenWidth": 20.04, + "TestingRate": 0.1, + "Preload": 2, + "Temperature": 22, + "Remark": "", +} + +columns = [ + "TestTime", + "StandardForce", + "Extension", + "Elongation", + "AbsoluteCrossheadTravel", + "WidthChange", +] + +normal_config = {"graph_identifier": "https://www.example.org"} +bad_config = {"graph_identifier": "https://www.example.org", "foorbar": 123} + + +def test_csv_parser_bad_mapping() -> None: + from rdflib import Graph + + from data2rdf.models import PropertyMapping, QuantityMapping + from data2rdf.parsers import CSVParser + + parser = CSVParser( + raw_data=raw_data, + mapping=os.path.join(mapping_folder, "bad_tensile_test_mapping.json"), + **parser_args, + ) + expected_graph = Graph() + expected_graph.parse(expected) + + assert len(parser.general_metadata) == 20 + for row in parser.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(parser.time_series_metadata) == 6 + for row in parser.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(parser.time_series.columns) == 6 + assert sorted(list(parser.time_series.columns)) == sorted(columns) + for name, column in parser.time_series.items(): + assert len(column) == 5734 + + assert parser.graph.isomorphic(expected_graph) + + +def test_csv_parser_no_match_in_mapping() -> None: + from rdflib import Graph + + from data2rdf.models import PropertyMapping, QuantityMapping + from data2rdf.parsers import CSVParser + from data2rdf.warnings import MappingMissmatchWarning + + with pytest.warns( + MappingMissmatchWarning, match="No match found" + ) as warnings: + parser = CSVParser( + raw_data=os.path.join( + working_folder, "data", "BAD_DX56_D_FZ2_WR00_43.TXT" + ), + mapping=os.path.join(mapping_folder, "tensile_test_mapping.json"), + metadata_sep="\t", + time_series_sep="\t", + metadata_length=21, + ) + + missmatches = [ + warning + for warning in warnings + if warning.category == MappingMissmatchWarning + ] + assert len(missmatches) == 1 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert len(parser.general_metadata) == 20 + for row in parser.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(parser.time_series_metadata) == 6 + for row in parser.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(parser.time_series.columns) == 6 + assert sorted(list(parser.time_series.columns)) == sorted(columns) + for name, column in parser.time_series.items(): + assert len(column) == 5734 + + assert parser.graph.isomorphic(expected_graph) + + +@pytest.mark.parametrize("config", [normal_config, bad_config]) +def test_csv_parser_config(config) -> None: + from rdflib import Graph + + from data2rdf.parsers import CSVParser + + parser = CSVParser( + raw_data=raw_data, + mapping=os.path.join(mapping_folder, "tensile_test_mapping.json"), + **parser_args, + config=config, + ) + expected_graph = Graph() + expected_graph.parse(expected) + + assert parser.graph.isomorphic(expected_graph) + assert str(parser.graph.identifier) == config["graph_identifier"] + assert sorted(list(parser.time_series.columns)) == sorted(columns) + + +@pytest.mark.parametrize("extension", ["xlsx", "json", "csv", dict]) +def test_parser_csv(extension) -> None: + from rdflib import Graph + + from data2rdf.models import PropertyMapping, QuantityMapping + from data2rdf.parsers import CSVParser + + if isinstance(extension, str): + mapping = os.path.join( + mapping_folder, f"tensile_test_mapping.{extension}" + ) + + else: + path = os.path.join(mapping_folder, "tensile_test_mapping.json") + with open(path, encoding="utf-8") as file: + mapping = json.load(file) + + parser = CSVParser(raw_data=raw_data, mapping=mapping, **parser_args) + + assert len(parser.general_metadata) == 20 + for row in parser.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(parser.time_series_metadata) == 6 + for row in parser.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(parser.time_series.columns) == 6 + assert sorted(list(parser.time_series.columns)) == sorted(columns) + for name, column in parser.time_series.items(): + assert len(column) == 5734 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert parser.graph.isomorphic(expected_graph) + + assert parser.plain_metadata == metadata + + +@pytest.mark.parametrize("input_kind", ["path", "content"]) +def test_parser_csv_input(input_kind) -> None: + from rdflib import Graph + + from data2rdf.models import PropertyMapping, QuantityMapping + from data2rdf.parsers import CSVParser + + if input_kind == "path": + input_obj = raw_data + elif input_kind == "content": + with open(raw_data, encoding="utf-8") as file: + input_obj = file.read() + + parser = CSVParser( + raw_data=input_obj, + mapping=os.path.join(mapping_folder, "tensile_test_mapping.json"), + **parser_args, + ) + + assert len(parser.general_metadata) == 20 + for row in parser.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(parser.time_series_metadata) == 6 + for row in parser.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(parser.time_series.columns) == 6 + assert sorted(list(parser.time_series.columns)) == sorted(columns) + for name, column in parser.time_series.items(): + assert len(column) == 5734 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert parser.graph.isomorphic(expected_graph) + + assert parser.plain_metadata == metadata diff --git a/tests/csv_pipeline_test/test_pipeline.py b/tests/csv_pipeline_test/test_pipeline.py new file mode 100755 index 00000000..739e7770 --- /dev/null +++ b/tests/csv_pipeline_test/test_pipeline.py @@ -0,0 +1,236 @@ +import json +import os + +import pytest + +test_folder = os.path.dirname(os.path.abspath(__file__)) +working_folder = os.path.join(test_folder, "input") + +output_folder = os.path.join(test_folder, "output") + +template = os.path.join( + working_folder, + "method-graph", + "tensile_test_method_v6.mod.ttl", +) +mapping_folder = os.path.join(working_folder, "mapping") +raw_data = os.path.join(working_folder, "data", "DX56_D_FZ2_WR00_43.TXT") +expected = os.path.join(output_folder, "output_pipeline.ttl") + +parser_args = { + "metadata_sep": "\t", + "time_series_sep": "\t", + "metadata_length": 20, +} +metadata = { + "TestingFacility": "institute_1", + "ProjectNumber": "123456", + "ProjectName": "proj_name_1", + "TimeStamp": "44335.4", + "MachineData": "maschine_1", + "ForceMeasuringDevice": "Kraftaufnehmer_1", + "DisplacementTransducer": "Wegaufnehmer_1", + "TestStandard": "ISO-XX", + "Material": "Werkstoff_1", + "SpecimenType": "Probentyp_1", + "Tester": "abc", + "SampleIdentifier-2": "Probentyp_2", + "OriginalGaugeLength": 80, + "ParallelLength": 120, + "SpecimenThickness": 1.55, + "SpecimenWidth": 20.04, + "TestingRate": 0.1, + "Preload": 2, + "Temperature": 22, + "Remark": "", +} + +columns = [ + "TestTime", + "StandardForce", + "Extension", + "Elongation", + "AbsoluteCrossheadTravel", + "WidthChange", +] + +normal_config = {"graph_identifier": "https://www.example.org"} +bad_config = {"graph_identifier": "https://www.example.org", "foorbar": 123} + + +def test_csv_pipeline_bad_mapping() -> None: + from rdflib import Graph + + from data2rdf import AnnotationPipeline, Parser + + pipeline = AnnotationPipeline( + raw_data=raw_data, + mapping=os.path.join(mapping_folder, "bad_tensile_test_mapping.json"), + parser=Parser.csv, + parser_args=parser_args, + extra_triples=template, + ) + expected_graph = Graph() + expected_graph.parse(expected) + + assert pipeline.graph.isomorphic(expected_graph) + + +def test_csv_pipeline_no_match_in_mapping() -> None: + from rdflib import Graph + + from data2rdf import AnnotationPipeline, Parser + from data2rdf.warnings import MappingMissmatchWarning + + with pytest.warns(UserWarning, match="No match found") as warnings: + pipeline = AnnotationPipeline( + raw_data=os.path.join( + working_folder, "data", "BAD_DX56_D_FZ2_WR00_43.TXT" + ), + parser=Parser.csv, + extra_triples=template, + mapping=os.path.join(mapping_folder, "tensile_test_mapping.json"), + parser_args={ + "metadata_sep": "\t", + "time_series_sep": "\t", + "metadata_length": 21, + }, + ) + + missmatches = [ + warning + for warning in warnings + if warning.category == MappingMissmatchWarning + ] + assert len(missmatches) == 1 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert pipeline.graph.isomorphic(expected_graph) + assert sorted(list(pipeline.time_series.columns)) == sorted(columns) + + +@pytest.mark.parametrize("config", [normal_config, bad_config]) +def test_csv_pipeline_config(config) -> None: + from rdflib import Graph + + from data2rdf import ( # isort:skip + AnnotationPipeline, + Parser, + ) + + pipeline = AnnotationPipeline( + raw_data=raw_data, + mapping=os.path.join(mapping_folder, "tensile_test_mapping.json"), + parser=Parser.csv, + parser_args=parser_args, + extra_triples=template, + config=config, + ) + expected_graph = Graph() + expected_graph.parse(expected) + + assert pipeline.graph.isomorphic(expected_graph) + assert str(pipeline.graph.identifier) == config["graph_identifier"] + assert sorted(list(pipeline.time_series.columns)) == sorted(columns) + + +@pytest.mark.parametrize("extension", ["xlsx", "json", "csv", dict]) +def test_csv_pipeline(extension) -> None: + from rdflib import Graph + + from data2rdf import ( # isort:skip + AnnotationPipeline, + Parser, + PropertyMapping, + QuantityMapping, + ) + + if isinstance(extension, str): + mapping = os.path.join( + mapping_folder, f"tensile_test_mapping.{extension}" + ) + + else: + path = os.path.join(mapping_folder, "tensile_test_mapping.json") + with open(path, encoding="utf-8") as file: + mapping = json.load(file) + + pipeline = AnnotationPipeline( + raw_data=raw_data, + mapping=mapping, + parser=Parser.csv, + parser_args=parser_args, + extra_triples=template, + ) + + assert len(pipeline.general_metadata) == 20 + for row in pipeline.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(pipeline.time_series_metadata) == 6 + for row in pipeline.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(pipeline.time_series.columns) == 6 + assert sorted(list(pipeline.time_series.columns)) == sorted(columns) + for name, column in pipeline.time_series.items(): + assert len(column) == 5734 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert pipeline.graph.isomorphic(expected_graph) + + assert pipeline.plain_metadata == metadata + + +@pytest.mark.parametrize("input_kind", ["path", "content"]) +def test_csv_pipeline_inputs(input_kind) -> None: + from rdflib import Graph + + from data2rdf import ( # isort:skip + AnnotationPipeline, + Parser, + PropertyMapping, + QuantityMapping, + ) + + if input_kind == "path": + input_obj = raw_data + elif input_kind == "content": + with open(raw_data, encoding="utf-8") as file: + input_obj = file.read() + + pipeline = AnnotationPipeline( + raw_data=input_obj, + mapping=os.path.join(mapping_folder, "tensile_test_mapping.json"), + parser=Parser.csv, + parser_args=parser_args, + extra_triples=template, + ) + + assert len(pipeline.general_metadata) == 20 + for row in pipeline.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(pipeline.time_series_metadata) == 6 + for row in pipeline.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(pipeline.time_series.columns) == 6 + assert sorted(list(pipeline.time_series.columns)) == sorted(columns) + for name, column in pipeline.time_series.items(): + assert len(column) == 5734 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert pipeline.graph.isomorphic(expected_graph) + + assert pipeline.plain_metadata == metadata diff --git a/tests/csv_pipeline_test/test_utils.py b/tests/csv_pipeline_test/test_utils.py deleted file mode 100755 index 971fdcf8..00000000 --- a/tests/csv_pipeline_test/test_utils.py +++ /dev/null @@ -1,8 +0,0 @@ -import os - - -def check_file_identifier_in_folder(folder, identifier): - for file in os.listdir(folder): - if identifier in file: - return True - return False diff --git a/tests/csv_without_header/__init__.py b/tests/csv_without_header/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/csv_without_header/input/__init__.py b/tests/csv_without_header/input/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/csv_without_header/input/data/__init__.py b/tests/csv_without_header/input/data/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/csv_without_header/input/data/test.csv b/tests/csv_without_header/input/data/test.csv new file mode 100644 index 00000000..b09fbb97 --- /dev/null +++ b/tests/csv_without_header/input/data/test.csv @@ -0,0 +1,5 @@ +time,column_01,column_02,column_03 +2,2,2,2 +3,3,3,3 +4,4,4,4 +5,5,5,5 diff --git a/tests/csv_without_header/input/mapping/__init__.py b/tests/csv_without_header/input/mapping/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/csv_without_header/input/mapping/mapping.json b/tests/csv_without_header/input/mapping/mapping.json new file mode 100644 index 00000000..7550f8a4 --- /dev/null +++ b/tests/csv_without_header/input/mapping/mapping.json @@ -0,0 +1,21 @@ +{ + "column_01": { + "iri": "https://w3id.org/steel/ProcessOntology/Sensor", + "key": "column_01", + "suffix": "Sensor1" + }, + "column_02": { + "iri": "https://w3id.org/steel/ProcessOntology/Sensor", + "key": "column_02", + "suffix": "Sensor2" + }, + "column_03": { + "iri": "https://w3id.org/steel/ProcessOntology/Sensor", + "key": "column_03", + "suffix": "Sensor3" + }, + "time": { + "iri": "https://w3id.org/steel/ProcessOntology/TestTime", + "key": "time" + } +} diff --git a/tests/csv_without_header/output/__init__.py b/tests/csv_without_header/output/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/csv_without_header/output/output_csv_parser.ttl b/tests/csv_without_header/output/output_csv_parser.ttl new file mode 100644 index 00000000..8684ab20 --- /dev/null +++ b/tests/csv_without_header/output/output_csv_parser.ttl @@ -0,0 +1,48 @@ +@prefix csvw: . +@prefix dcterms: . +@prefix fileid: . +@prefix foaf1: . +@prefix qudt: . +@prefix rdfs: . +@prefix xsd: . + +fileid:tableGroup a csvw:TableGroup ; + csvw:table [ a csvw:Table ; + rdfs:label "Time series data" ; + csvw:tableSchema [ a csvw:Schema ; + csvw:column [ a csvw:Column ; + qudt:quantity fileid:Sensor1 ; + csvw:titles "column_01"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-1"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:Sensor3 ; + csvw:titles "column_03"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-3"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:TestTime ; + csvw:titles "time"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-0"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:Sensor2 ; + csvw:titles "column_02"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-2"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ] ] ] . + +fileid:Sensor1 a . + +fileid:Sensor2 a . + +fileid:Sensor3 a . + +fileid:TestTime a . diff --git a/tests/csv_without_header/output/output_csv_pipeline.ttl b/tests/csv_without_header/output/output_csv_pipeline.ttl new file mode 100644 index 00000000..ede541fd --- /dev/null +++ b/tests/csv_without_header/output/output_csv_pipeline.ttl @@ -0,0 +1,55 @@ +@prefix csvw: . +@prefix dcat: . +@prefix dcterms: . +@prefix fileid: . +@prefix foaf1: . +@prefix qudt: . +@prefix rdfs: . +@prefix xsd: . + +fileid:dataset a dcat:Dataset ; + dcterms:hasPart fileid:tableGroup ; + dcat:distribution [ a dcat:Distribution ; + dcat:accessURL "https://www.example.org/download"^^xsd:anyURI ; + dcat:mediaType "http://www.iana.org/assignments/media-types/text/csv"^^xsd:anyURI ] . + +fileid:Sensor1 a . + +fileid:Sensor2 a . + +fileid:Sensor3 a . + +fileid:TestTime a . + +fileid:tableGroup a csvw:TableGroup ; + csvw:table [ a csvw:Table ; + rdfs:label "Time series data" ; + csvw:tableSchema [ a csvw:Schema ; + csvw:column [ a csvw:Column ; + qudt:quantity fileid:TestTime ; + csvw:titles "time"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-0"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:Sensor1 ; + csvw:titles "column_01"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-1"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:Sensor2 ; + csvw:titles "column_02"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-2"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:Sensor3 ; + csvw:titles "column_03"^^xsd:string ; + foaf1:page [ a foaf1:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/column-3"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ] ] ] . diff --git a/tests/csv_without_header/test_parser.py b/tests/csv_without_header/test_parser.py new file mode 100644 index 00000000..3f42257a --- /dev/null +++ b/tests/csv_without_header/test_parser.py @@ -0,0 +1,54 @@ +"""CSV Pipeline pytest""" + +import os + +test_folder = os.path.dirname(os.path.abspath(__file__)) +working_folder = os.path.join(test_folder, "input") +output_folder = os.path.join(test_folder, "output") + +mapping_folder = os.path.join(working_folder, "mapping") +raw_data = os.path.join(working_folder, "data", "test.csv") +expected = os.path.join(output_folder, "output_csv_parser.ttl") + +parser_args = { + "time_series_sep": ",", + "metadata_length": 0, + "time_series_header_length": 1, +} + + +columns = ["TestTime", "Sensor1", "Sensor2", "Sensor3"] + +config = {"graph_identifier": "https://www.example.org"} + + +def test_csv_wo_header_parser_config() -> None: + from rdflib import Graph + + from data2rdf import QuantityMapping + from data2rdf.parsers import CSVParser + + parser = CSVParser( + raw_data=raw_data, + mapping=os.path.join(mapping_folder, "mapping.json"), + **parser_args, + config=config, + ) + + expected_graph = Graph() + expected_graph.parse(expected) + + assert len(parser.general_metadata) == 0 + + assert len(parser.time_series_metadata) == 4 + for row in parser.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(parser.time_series.columns) == 4 + assert sorted(list(parser.time_series.columns)) == sorted(columns) + + for name, column in parser.time_series.items(): + assert len(column) == 4 + + assert parser.graph.isomorphic(expected_graph) + assert parser.plain_metadata == {} diff --git a/tests/csv_without_header/test_pipeline.py b/tests/csv_without_header/test_pipeline.py new file mode 100644 index 00000000..312b64bb --- /dev/null +++ b/tests/csv_without_header/test_pipeline.py @@ -0,0 +1,65 @@ +"""CSV Pipeline pytest""" + +import os + +test_folder = os.path.dirname(os.path.abspath(__file__)) +working_folder = os.path.join(test_folder, "input") +output_folder = os.path.join(test_folder, "output") + +mapping_folder = os.path.join(working_folder, "mapping") +raw_data = os.path.join(working_folder, "data", "test.csv") +expected = os.path.join(output_folder, "output_csv_pipeline.ttl") + + +parser_args = { + "time_series_sep": ",", + "metadata_length": 0, + "time_series_header_length": 1, +} + + +columns = ["TestTime", "Sensor1", "Sensor2", "Sensor3"] +config = {"graph_identifier": "https://www.example.org"} + + +def test_csv_wo_header_pipeline() -> None: + from rdflib import Graph + + from data2rdf import ( # isort:skip + AnnotationPipeline, + Parser, + QuantityMapping, + ) + + pipeline = AnnotationPipeline( + raw_data=raw_data, + mapping=os.path.join(mapping_folder, "mapping.json"), + parser=Parser.csv, + parser_args=parser_args, + config=config, + ) + + expected_graph = Graph() + expected_graph.parse(expected) + + assert pipeline.graph.isomorphic(expected_graph) + assert str(pipeline.graph.identifier) == config["graph_identifier"] + assert sorted(list(pipeline.time_series.columns)) == sorted(columns) + + assert len(pipeline.general_metadata) == 0 + + assert len(pipeline.time_series_metadata) == 4 + for row in pipeline.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(pipeline.time_series.columns) == 4 + assert sorted(list(pipeline.time_series.columns)) == sorted(columns) + for name, column in pipeline.time_series.items(): + assert len(column) == 4 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert pipeline.graph.isomorphic(expected_graph) + + assert pipeline.plain_metadata == {} diff --git a/tests/json_pipeline_test/__init__.py b/tests/json_pipeline_test/__init__.py new file mode 100755 index 00000000..e69de29b diff --git a/tests/json_pipeline_test/input/data/sample_data.json b/tests/json_pipeline_test/input/data/sample_data.json new file mode 100644 index 00000000..57ddb0d4 --- /dev/null +++ b/tests/json_pipeline_test/input/data/sample_data.json @@ -0,0 +1,24 @@ +{ + "data": { + "Breitenaenderung": { + "unit": "mm", + "value": 1.0 + }, + "Dehnung": [ + 1.0, + 2.0, + 3.0 + ], + "Standardkraft": { + "array": [ + 2.0, + 3.0, + 4.0 + ], + "unit": "kN" + } + }, + "details": { + "Bemerkungen": "foobar" + } +} diff --git a/tests/json_pipeline_test/input/mapping/tensile_test_mapping.csv b/tests/json_pipeline_test/input/mapping/tensile_test_mapping.csv new file mode 100644 index 00000000..6218569c --- /dev/null +++ b/tests/json_pipeline_test/input/mapping/tensile_test_mapping.csv @@ -0,0 +1,5 @@ +key;iri;value_location;unit_location;unit +Bemerkungen;https://w3id.org/steel/ProcessOntology/Remark;details.Bemerkungen;; +Breitenaenderung;https://w3id.org/steel/ProcessOntology/WidthChange;data.Breitenaenderung.value;data.Breitenaenderung.unit; +Dehnung;https://w3id.org/steel/ProcessOntology/PercentageElongation;data.Dehnung;;% +Standardkraft;https://w3id.org/steel/ProcessOntology/Force;data.Standardkraft.array;data.Standardkraft.unit; diff --git a/tests/json_pipeline_test/input/mapping/tensile_test_mapping.json b/tests/json_pipeline_test/input/mapping/tensile_test_mapping.json new file mode 100644 index 00000000..bfd13af4 --- /dev/null +++ b/tests/json_pipeline_test/input/mapping/tensile_test_mapping.json @@ -0,0 +1,25 @@ +{ + "Bemerkungen": { + "iri": "https://w3id.org/steel/ProcessOntology/Remark", + "key": "Bemerkungen", + "value_location": "details.Bemerkungen" + }, + "Breitenaenderung": { + "iri": "https://w3id.org/steel/ProcessOntology/WidthChange", + "key": "Breitenaenderung", + "unit_location": "data.Breitenaenderung.unit", + "value_location": "data.Breitenaenderung.value" + }, + "Dehnung": { + "iri": "https://w3id.org/steel/ProcessOntology/PercentageElongation", + "key": "Dehnung", + "unit": "%", + "value_location": "data.Dehnung" + }, + "Standardkraft": { + "iri": "https://w3id.org/steel/ProcessOntology/Force", + "key": "Standardkraft", + "unit_location": "data.Standardkraft.unit", + "value_location": "data.Standardkraft.array" + } +} diff --git a/tests/json_pipeline_test/input/mapping/tensile_test_mapping.xlsx b/tests/json_pipeline_test/input/mapping/tensile_test_mapping.xlsx new file mode 100644 index 00000000..db01ce25 Binary files /dev/null and b/tests/json_pipeline_test/input/mapping/tensile_test_mapping.xlsx differ diff --git a/tests/json_pipeline_test/output/output_json_parser.ttl b/tests/json_pipeline_test/output/output_json_parser.ttl new file mode 100644 index 00000000..8d786fb1 --- /dev/null +++ b/tests/json_pipeline_test/output/output_json_parser.ttl @@ -0,0 +1,46 @@ +@prefix dcterms: . +@prefix fileid: . +@prefix foaf: . +@prefix ns1: . +@prefix qudt: . +@prefix rdfs: . +@prefix xsd: . + +fileid:Dictionary a ns1:Dictionary ; + ns1:hadDictionaryMember [ a ns1:KeyEntityPair ; + ns1:pairEntity [ a ns1:Entity ; + qudt:quantity fileid:WidthChange ] ; + ns1:pairKey "Breitenaenderung"^^xsd:string ], + [ a ns1:KeyEntityPair ; + ns1:pairEntity [ a ns1:Entity ; + qudt:quantity fileid:PercentageElongation ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-0"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ] ; + ns1:pairKey "Dehnung"^^xsd:string ], + [ a ns1:KeyEntityPair ; + ns1:pairEntity [ a ns1:Entity ; + qudt:quantity fileid:Force ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-1"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ] ; + ns1:pairKey "Standardkraft"^^xsd:string ], + [ a ns1:KeyEntityPair ; + ns1:pairEntity [ a ns1:Entity ; + dcterms:hasPart fileid:Remark ] ; + ns1:pairKey "Bemerkungen"^^xsd:string ] . + +fileid:Force a ; + qudt:hasUnit "http://qudt.org/vocab/unit/KiloN"^^xsd:anyURI . + +fileid:PercentageElongation a ; + qudt:hasUnit "http://qudt.org/vocab/unit/PERCENT"^^xsd:anyURI . + +fileid:Remark a ; + rdfs:label "foobar" . + +fileid:WidthChange a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "1.0"^^xsd:float . diff --git a/tests/json_pipeline_test/output/output_json_pipeline.ttl b/tests/json_pipeline_test/output/output_json_pipeline.ttl new file mode 100644 index 00000000..a0612a05 --- /dev/null +++ b/tests/json_pipeline_test/output/output_json_pipeline.ttl @@ -0,0 +1,53 @@ +@prefix dcat: . +@prefix dcterms: . +@prefix fileid: . +@prefix foaf: . +@prefix ns1: . +@prefix qudt: . +@prefix rdfs: . +@prefix xsd: . + +fileid:dataset a dcat:Dataset ; + dcterms:hasPart fileid:Dictionary ; + dcat:distribution [ a dcat:Distribution ; + dcat:accessURL "https://www.example.org/download/"^^xsd:anyURI ; + dcat:mediaType "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ] . + +fileid:Dictionary a ns1:Dictionary ; + ns1:hadDictionaryMember [ a ns1:KeyEntityPair ; + ns1:pairEntity [ a ns1:Entity ; + qudt:quantity fileid:Force ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-1"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ] ; + ns1:pairKey "Standardkraft"^^xsd:string ], + [ a ns1:KeyEntityPair ; + ns1:pairEntity [ a ns1:Entity ; + qudt:quantity fileid:PercentageElongation ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-0"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ] ; + ns1:pairKey "Dehnung"^^xsd:string ], + [ a ns1:KeyEntityPair ; + ns1:pairEntity [ a ns1:Entity ; + qudt:quantity fileid:WidthChange ] ; + ns1:pairKey "Breitenaenderung"^^xsd:string ], + [ a ns1:KeyEntityPair ; + ns1:pairEntity [ a ns1:Entity ; + dcterms:hasPart fileid:Remark ] ; + ns1:pairKey "Bemerkungen"^^xsd:string ] . + +fileid:Force a ; + qudt:hasUnit "http://qudt.org/vocab/unit/KiloN"^^xsd:anyURI . + +fileid:PercentageElongation a ; + qudt:hasUnit "http://qudt.org/vocab/unit/PERCENT"^^xsd:anyURI . + +fileid:Remark a ; + rdfs:label "foobar" . + +fileid:WidthChange a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "1.0"^^xsd:float . diff --git a/tests/json_pipeline_test/test_parser.py b/tests/json_pipeline_test/test_parser.py new file mode 100755 index 00000000..8ed2fccb --- /dev/null +++ b/tests/json_pipeline_test/test_parser.py @@ -0,0 +1,111 @@ +"""JSON Parser pytest""" + +import json +import os + +import pytest + +test_folder = os.path.dirname(os.path.abspath(__file__)) +working_folder = os.path.join(test_folder, "input") +output_folder = os.path.join(test_folder, "output") + +mapping_folder = os.path.join(working_folder, "mapping") +mapping_file = os.path.join(mapping_folder, "tensile_test_mapping.json") +raw_data_file = os.path.join(working_folder, "data", "sample_data.json") +expected = os.path.join(output_folder, "output_json_parser.ttl") + +metadata = { + "Remark": "foobar", + "WidthChange": 1.0, +} + +series = {"PercentageElongation": [1.0, 2.0, 3.0], "Force": [2.0, 3.0, 4.0]} + + +@pytest.mark.parametrize( + "mapping_format, data_format", + [(dict, str), (str, str), (dict, dict), (str, dict)], +) +def test_parser_json(mapping_format, data_format) -> None: + from rdflib import Graph + + from data2rdf.models import PropertyMapping, QuantityMapping + from data2rdf.parsers import JsonParser + + if mapping_format == str: + mapping = mapping_file + else: + with open(mapping_file, encoding="utf-8") as file: + mapping = json.load(file) + + if data_format == str: + raw_data = raw_data_file + else: + with open(raw_data_file, encoding="utf-8") as file: + raw_data = json.load(file) + + parser = JsonParser(raw_data=raw_data, mapping=mapping) + + assert len(parser.general_metadata) == 2 + for row in parser.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(parser.time_series_metadata) == 2 + for row in parser.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(parser.time_series.columns) == 2 + assert sorted(series) == sorted(parser.time_series) + for name, column in parser.time_series.items(): + assert len(column) == 3 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert parser.graph.isomorphic(expected_graph) + + assert parser.plain_metadata == metadata + + +@pytest.mark.parametrize("extension", ["xlsx", "json", "csv", dict]) +def test_json_parser_different_mapping_files(extension) -> None: + from rdflib import Graph + + from data2rdf.models import PropertyMapping, QuantityMapping + from data2rdf.parsers import JsonParser + + if isinstance(extension, str): + mapping = os.path.join( + mapping_folder, f"tensile_test_mapping.{extension}" + ) + + else: + path = os.path.join(mapping_folder, "tensile_test_mapping.json") + with open(path, encoding="utf-8") as file: + mapping = json.load(file) + + parser = JsonParser(raw_data=raw_data_file, mapping=mapping) + + assert len(parser.general_metadata) == 2 + for row in parser.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(parser.time_series_metadata) == 2 + for row in parser.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(parser.time_series.columns) == 2 + assert sorted(series) == sorted(parser.time_series) + for name, column in parser.time_series.items(): + assert len(column) == 3 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert parser.graph.isomorphic(expected_graph) + + assert parser.plain_metadata == metadata diff --git a/tests/json_pipeline_test/test_pipeline.py b/tests/json_pipeline_test/test_pipeline.py new file mode 100644 index 00000000..25c467cd --- /dev/null +++ b/tests/json_pipeline_test/test_pipeline.py @@ -0,0 +1,124 @@ +"""JSON pipeline pytest""" + +import json +import os + +import pytest + +test_folder = os.path.dirname(os.path.abspath(__file__)) +working_folder = os.path.join(test_folder, "input") +output_folder = os.path.join(test_folder, "output") + +mapping_folder = os.path.join(working_folder, "mapping") +mapping_file = os.path.join(mapping_folder, "tensile_test_mapping.json") +raw_data_file = os.path.join(working_folder, "data", "sample_data.json") +expected = os.path.join(output_folder, "output_json_pipeline.ttl") + + +metadata = { + "Remark": "foobar", + "WidthChange": 1.0, +} + +series = {"PercentageElongation": [1.0, 2.0, 3.0], "Force": [2.0, 3.0, 4.0]} + + +@pytest.mark.parametrize( + "mapping_format, data_format", + [(dict, str), (str, str), (dict, dict), (str, dict)], +) +def test_pipeline_json(mapping_format, data_format) -> None: + from rdflib import Graph + + from data2rdf import AnnotationPipeline, Parser + from data2rdf.models import PropertyMapping, QuantityMapping + + if mapping_format == str: + mapping = mapping_file + else: + with open(mapping_file, encoding="utf-8") as file: + mapping = json.load(file) + + if data_format == str: + raw_data = raw_data_file + else: + with open(raw_data_file, encoding="utf-8") as file: + raw_data = json.load(file) + + pipeline = AnnotationPipeline( + raw_data=raw_data, + mapping=mapping, + parser=Parser.json, + ) + + assert len(pipeline.general_metadata) == 2 + for row in pipeline.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(pipeline.time_series_metadata) == 2 + for row in pipeline.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(pipeline.time_series.columns) == 2 + assert sorted(series) == sorted(pipeline.time_series) + for name, column in pipeline.time_series.items(): + assert len(column) == 3 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert pipeline.graph.isomorphic(expected_graph) + + assert pipeline.plain_metadata == metadata + + +@pytest.mark.parametrize("extension", ["xlsx", "json", "csv", dict]) +def test_json_pipeline_different_mapping_types(extension) -> None: + from rdflib import Graph + + from data2rdf import ( # isort:skip + AnnotationPipeline, + Parser, + PropertyMapping, + QuantityMapping, + ) + + if isinstance(extension, str): + mapping = os.path.join( + mapping_folder, f"tensile_test_mapping.{extension}" + ) + + else: + path = os.path.join(mapping_folder, "tensile_test_mapping.json") + with open(path, encoding="utf-8") as file: + mapping = json.load(file) + + pipeline = AnnotationPipeline( + raw_data=raw_data_file, + mapping=mapping, + parser=Parser.json, + ) + + assert len(pipeline.general_metadata) == 2 + for row in pipeline.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(pipeline.time_series_metadata) == 2 + for row in pipeline.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(pipeline.time_series.columns) == 2 + assert sorted(series) == sorted(pipeline.time_series) + for name, column in pipeline.time_series.items(): + assert len(column) == 3 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert pipeline.graph.isomorphic(expected_graph) + + assert pipeline.plain_metadata == metadata diff --git a/tests/test_models.py b/tests/test_models.py new file mode 100644 index 00000000..4cc3b97a --- /dev/null +++ b/tests/test_models.py @@ -0,0 +1,62 @@ +"""data2rdf unit test for models""" + +import pytest + +normal_config = {"graph_identifier": "https://www.example.org"} +bad_config = {"graph_identifier": "https://www.example.org", "foorbar": 123} + +unit_string = "mm" +unit_iri = "http://qudt.org/vocab/unit/MilliM" + + +@pytest.mark.parametrize("config", [normal_config, bad_config]) +def test_quantity_model(config) -> None: + from rdflib import Graph + + from data2rdf import QuantityMapping + + expected = """@prefix fileid: . + @prefix qudt: . + @prefix xsd: . + + fileid:test a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "0.1"^^xsd:float . + """ + expected_graph = Graph() + expected_graph.parse(format="turtle", data=expected) + + model = QuantityMapping( + value=0.1, + key="test", + unit="mm", + iri="https://example.org/test", + config=config, + ) + + assert model.graph.isomorphic(expected_graph) + assert str(model.graph.identifier) == config["graph_identifier"] + + +@pytest.mark.parametrize("unit", [unit_string, unit_iri]) +def test_valued_quantity(unit): + from rdflib import Graph + + from data2rdf import QuantityMapping + + expected = """@prefix fileid: . + @prefix qudt: . + @prefix xsd: . + + fileid:test a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "0.1"^^xsd:float . + """ + expected_graph = Graph() + expected_graph.parse(format="turtle", data=expected) + + model = QuantityMapping( + value=0.1, key="test", unit=unit, iri="https://example.org/test" + ) + + assert model.graph.isomorphic(expected_graph) diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 00000000..1b42340e --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,22 @@ +"""Test DSMS utilities""" + +import pytest + +mappings = [ + ("http://qudt.org/vocab/unit/PER-MilliM", "mm-1"), + ("http://qudt.org/vocab/unit/MegaPA", "MPa"), + ("http://qudt.org/vocab/unit/MilliM-PER-BAR", "mm/bar"), + ("http://qudt.org/vocab/unit/MilliM-PER-BAR", "mm.bar-1"), + ("http://qudt.org/vocab/unit/MilliM2", "mm²"), + ("http://qudt.org/vocab/unit/DEG_C", "°C"), +] + + +@pytest.mark.parametrize("iri,symbol", mappings) +def test_unit_retrieval(iri, symbol) -> None: + from data2rdf import Config + from data2rdf.qudt.utils import _get_query_match + + config = Config() + + assert [iri] == _get_query_match(symbol, config.qudt_units) diff --git a/tests/xls_pipeline_test/input/mapping/bad_metadata_tensile_test_mapping.json b/tests/xls_pipeline_test/input/mapping/bad_metadata_tensile_test_mapping.json new file mode 100644 index 00000000..fae7ff4e --- /dev/null +++ b/tests/xls_pipeline_test/input/mapping/bad_metadata_tensile_test_mapping.json @@ -0,0 +1,126 @@ +{ + "Bemerkungen": { + "iri": "https://w3id.org/steel/ProcessOntology/Remark", + "key": "Bemerkungen", + "value_location": "UU31", + "worksheet": "Protokoll" + }, + "Breiten\u00e4nderung": { + "iri": "https://w3id.org/steel/ProcessOntology/WidthChange", + "key": "Breiten\u00e4nderung", + "time_series_start": "E15", + "unit_location": "E14", + "worksheet": "Messdaten" + }, + "Datum": { + "iri": "https://w3id.org/steel/ProcessOntology/TimeStamp", + "key": "Datum", + "value_location": "AD6", + "worksheet": "Protokoll" + }, + "Dehnung": { + "iri": "https://w3id.org/steel/ProcessOntology/PercentageElongation", + "key": "Dehnung", + "time_series_start": "Q15", + "unit": "\u00f7", + "worksheet": "Messdaten" + }, + "Messl\u00e4nge Standardweg": { + "iri": "https://w3id.org/steel/ProcessOntology/OriginalGaugeLength", + "key": "Messl\u00e4nge Standardweg", + "unit_location": "P16", + "value_location": "M16", + "worksheet": "Protokoll" + }, + "Probenbreite b": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecimenWidth", + "key": "Probenbreite b", + "unit_location": "P15", + "value_location": "M15", + "worksheet": "Protokoll" + }, + "Probendicke a": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecimenThickness", + "key": "Probendicke a", + "unit_location": "P50000", + "value_location": "M400000", + "worksheet": "Protokoll" + }, + "Probenform": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecimenType", + "key": "Probenform", + "value_location": "AE7", + "worksheet": "Protokoll" + }, + "Probenkennung 2": { + "iri": "https://w3id.org/steel/ProcessOntology/SampleIdentifier-2", + "key": "Probenkennung 2", + "value_location": "U7", + "worksheet": "Protokoll" + }, + "Projekt": { + "iri": "https://w3id.org/steel/ProcessOntology/ProjectNumber", + "key": "Projekt", + "value_location": "F6", + "worksheet": "Protokoll" + }, + "Pr\u00fcfer": { + "iri": "https://w3id.org/steel/ProcessOntology/Tester", + "key": "Pr\u00fcfer", + "value_location": "U6", + "worksheet": "Protokoll" + }, + "Pr\u00fcfgeschwindigkeit": { + "iri": "https://w3id.org/steel/ProcessOntology/TestingRate", + "key": "Pr\u00fcfgeschwindigkeit", + "value_location": "J9", + "worksheet": "Protokoll" + }, + "Pr\u00fcfmaschine": { + "iri": "https://w3id.org/steel/ProcessOntology/MachineData", + "key": "Pr\u00fcfmaschine", + "value_location": "I8", + "worksheet": "Protokoll" + }, + "Pr\u00fcftemperatur": { + "iri": "https://w3id.org/steel/ProcessOntology/Temperature", + "key": "Pr\u00fcftemperatur", + "value_location": "U8", + "worksheet": "Protokoll" + }, + "Standardkraft": { + "iri": "https://w3id.org/steel/ProcessOntology/StandardForce", + "key": "Standardkraft", + "time_series_start": "C15", + "unit_location": "C14", + "worksheet": "Messdaten" + }, + "Standardweg": { + "iri": "https://w3id.org/steel/ProcessOntology/Extension", + "key": "Standardweg", + "time_series_start": "D15", + "unit_location": "D14", + "worksheet": "Messdaten" + }, + "Traversenweg absolut": { + "iri": "https://w3id.org/steel/ProcessOntology/AbsoluteCrossheadTravel", + "key": "Traversenweg absolut", + "time_series_start": "B15", + "unit_location": "B14", + "worksheet": "Messdaten" + }, + "Werkstoff": { + "annotation": "https://w3id.org/steel/ProcessOntology", + "iri": "https://w3id.org/steel/ProcessOntology/Material", + "key": "Werkstoff", + "value_location": "H7", + "worksheet": "Protokoll" + }, + "Zeit": { + "iri": "https://w3id.org/steel/ProcessOntology/TestTime", + "key": "Zeit", + "time_series_start": "A15", + "unit_location": "A14", + "worksheet": "Messdaten" + } +} diff --git a/tests/xls_pipeline_test/input/mapping/bad_timeseries_tensile_test_mapping.json b/tests/xls_pipeline_test/input/mapping/bad_timeseries_tensile_test_mapping.json new file mode 100644 index 00000000..551750e0 --- /dev/null +++ b/tests/xls_pipeline_test/input/mapping/bad_timeseries_tensile_test_mapping.json @@ -0,0 +1,126 @@ +{ + "Bemerkungen": { + "iri": "https://w3id.org/steel/ProcessOntology/Remark", + "key": "Bemerkungen", + "value_location": "UU31", + "worksheet": "Protokoll" + }, + "Breiten\u00e4nderung": { + "iri": "https://w3id.org/steel/ProcessOntology/WidthChange", + "key": "Breiten\u00e4nderung", + "time_series_start": "E15", + "unit_location": "E14", + "worksheet": "Messdaten" + }, + "Datum": { + "iri": "https://w3id.org/steel/ProcessOntology/TimeStamp", + "key": "Datum", + "value_location": "AD6", + "worksheet": "Protokoll" + }, + "Dehnung": { + "iri": "https://w3id.org/steel/ProcessOntology/PercentageElongation", + "key": "Dehnung", + "time_series_start": "Q15", + "unit": "\u00f7", + "worksheet": "Messdaten" + }, + "Messl\u00e4nge Standardweg": { + "iri": "https://w3id.org/steel/ProcessOntology/OriginalGaugeLength", + "key": "Messl\u00e4nge Standardweg", + "unit_location": "P16", + "value_location": "M16", + "worksheet": "Protokoll" + }, + "Probenbreite b": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecimenWidth", + "key": "Probenbreite b", + "unit_location": "P15", + "value_location": "M15", + "worksheet": "Protokoll" + }, + "Probendicke a": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecimenThickness", + "key": "Probendicke a", + "unit_location": "P14", + "value_location": "M14", + "worksheet": "Protokoll" + }, + "Probenform": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecimenType", + "key": "Probenform", + "value_location": "AE7", + "worksheet": "Protokoll" + }, + "Probenkennung 2": { + "iri": "https://w3id.org/steel/ProcessOntology/SampleIdentifier-2", + "key": "Probenkennung 2", + "value_location": "U7", + "worksheet": "Protokoll" + }, + "Projekt": { + "iri": "https://w3id.org/steel/ProcessOntology/ProjectNumber", + "key": "Projekt", + "value_location": "F6", + "worksheet": "Protokoll" + }, + "Pr\u00fcfer": { + "iri": "https://w3id.org/steel/ProcessOntology/Tester", + "key": "Pr\u00fcfer", + "value_location": "U6", + "worksheet": "Protokoll" + }, + "Pr\u00fcfgeschwindigkeit": { + "iri": "https://w3id.org/steel/ProcessOntology/TestingRate", + "key": "Pr\u00fcfgeschwindigkeit", + "value_location": "J9", + "worksheet": "Protokoll" + }, + "Pr\u00fcfmaschine": { + "iri": "https://w3id.org/steel/ProcessOntology/MachineData", + "key": "Pr\u00fcfmaschine", + "value_location": "I8", + "worksheet": "Protokoll" + }, + "Pr\u00fcftemperatur": { + "iri": "https://w3id.org/steel/ProcessOntology/Temperature", + "key": "Pr\u00fcftemperatur", + "value_location": "U8", + "worksheet": "Protokoll" + }, + "Standardkraft": { + "iri": "https://w3id.org/steel/ProcessOntology/StandardForce", + "key": "Standardkraft", + "time_series_start": "C15", + "unit_location": "C14", + "worksheet": "Messdaten" + }, + "Standardweg": { + "iri": "https://w3id.org/steel/ProcessOntology/Extension", + "key": "Standardweg", + "time_series_start": "D5000", + "unit_location": "D4000", + "worksheet": "Messdaten" + }, + "Traversenweg absolut": { + "iri": "https://w3id.org/steel/ProcessOntology/AbsoluteCrossheadTravel", + "key": "Traversenweg absolut", + "time_series_start": "B15", + "unit_location": "B14", + "worksheet": "Messdaten" + }, + "Werkstoff": { + "annotation": "https://w3id.org/steel/ProcessOntology", + "iri": "https://w3id.org/steel/ProcessOntology/Material", + "key": "Werkstoff", + "value_location": "H7", + "worksheet": "Protokoll" + }, + "Zeit": { + "iri": "https://w3id.org/steel/ProcessOntology/TestTime", + "key": "Zeit", + "time_series_start": "A15", + "unit_location": "A14", + "worksheet": "Messdaten" + } +} diff --git a/tests/xls_pipeline_test/input/mapping/location_mapping.xlsx b/tests/xls_pipeline_test/input/mapping/location_mapping.xlsx deleted file mode 100755 index 2c6ca85b..00000000 Binary files a/tests/xls_pipeline_test/input/mapping/location_mapping.xlsx and /dev/null differ diff --git a/tests/xls_pipeline_test/input/mapping/mapping.xlsx b/tests/xls_pipeline_test/input/mapping/mapping.xlsx deleted file mode 100755 index 29de734d..00000000 Binary files a/tests/xls_pipeline_test/input/mapping/mapping.xlsx and /dev/null differ diff --git a/tests/xls_pipeline_test/input/mapping/tensile_test_mapping.csv b/tests/xls_pipeline_test/input/mapping/tensile_test_mapping.csv new file mode 100644 index 00000000..3993641d --- /dev/null +++ b/tests/xls_pipeline_test/input/mapping/tensile_test_mapping.csv @@ -0,0 +1,20 @@ +key;iri;value_location;unit_location;worksheet;time_series_start;unit;annotation +Projekt;https://w3id.org/steel/ProcessOntology/ProjectNumber;F6;;Protokoll;;; +Datum;https://w3id.org/steel/ProcessOntology/TimeStamp;AD6;;Protokoll;;; +Prüfmaschine;https://w3id.org/steel/ProcessOntology/MachineData;I8;;Protokoll;;; +Werkstoff;https://w3id.org/steel/ProcessOntology/Material;H7;;Protokoll;;;https://w3id.org/steel/ProcessOntology +Probenform;https://w3id.org/steel/ProcessOntology/SpecimenType;AE7;;Protokoll;;; +Prüfer;https://w3id.org/steel/ProcessOntology/Tester;U6;;Protokoll;;; +Probenkennung 2;https://w3id.org/steel/ProcessOntology/SampleIdentifier-2;U7;;Protokoll;;; +Messlänge Standardweg;https://w3id.org/steel/ProcessOntology/OriginalGaugeLength;M16;P16;Protokoll;;; +Probendicke a;https://w3id.org/steel/ProcessOntology/SpecimenThickness;M14;P14;Protokoll;;; +Probenbreite b;https://w3id.org/steel/ProcessOntology/SpecimenWidth;M15;P15;Protokoll;;; +Prüfgeschwindigkeit;https://w3id.org/steel/ProcessOntology/TestingRate;J9;;Protokoll;;; +Prüftemperatur;https://w3id.org/steel/ProcessOntology/Temperature;U8;;Protokoll;;; +Bemerkungen;https://w3id.org/steel/ProcessOntology/Remark;UU31;;Protokoll;;; +Zeit;https://w3id.org/steel/ProcessOntology/TestTime;;A14;Messdaten;A15;; +Standardkraft;https://w3id.org/steel/ProcessOntology/StandardForce;;C14;Messdaten;C15;; +Traversenweg absolut;https://w3id.org/steel/ProcessOntology/AbsoluteCrossheadTravel;;B14;Messdaten;B15;; +Standardweg;https://w3id.org/steel/ProcessOntology/Extension;;D14;Messdaten;D15;; +Breitenänderung;https://w3id.org/steel/ProcessOntology/WidthChange;;E14;Messdaten;E15;; +Dehnung;https://w3id.org/steel/ProcessOntology/PercentageElongation;;;Messdaten;Q15;÷; diff --git a/tests/xls_pipeline_test/input/mapping/tensile_test_mapping.json b/tests/xls_pipeline_test/input/mapping/tensile_test_mapping.json new file mode 100644 index 00000000..7bf9b883 --- /dev/null +++ b/tests/xls_pipeline_test/input/mapping/tensile_test_mapping.json @@ -0,0 +1,126 @@ +{ + "Bemerkungen": { + "iri": "https://w3id.org/steel/ProcessOntology/Remark", + "key": "Bemerkungen", + "value_location": "UU31", + "worksheet": "Protokoll" + }, + "Breiten\u00e4nderung": { + "iri": "https://w3id.org/steel/ProcessOntology/WidthChange", + "key": "Breiten\u00e4nderung", + "time_series_start": "E15", + "unit_location": "E14", + "worksheet": "Messdaten" + }, + "Datum": { + "iri": "https://w3id.org/steel/ProcessOntology/TimeStamp", + "key": "Datum", + "value_location": "AD6", + "worksheet": "Protokoll" + }, + "Dehnung": { + "iri": "https://w3id.org/steel/ProcessOntology/PercentageElongation", + "key": "Dehnung", + "time_series_start": "Q15", + "unit": "\u00f7", + "worksheet": "Messdaten" + }, + "Messl\u00e4nge Standardweg": { + "iri": "https://w3id.org/steel/ProcessOntology/OriginalGaugeLength", + "key": "Messl\u00e4nge Standardweg", + "unit_location": "P16", + "value_location": "M16", + "worksheet": "Protokoll" + }, + "Probenbreite b": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecimenWidth", + "key": "Probenbreite b", + "unit_location": "P15", + "value_location": "M15", + "worksheet": "Protokoll" + }, + "Probendicke a": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecimenThickness", + "key": "Probendicke a", + "unit_location": "P14", + "value_location": "M14", + "worksheet": "Protokoll" + }, + "Probenform": { + "iri": "https://w3id.org/steel/ProcessOntology/SpecimenType", + "key": "Probenform", + "value_location": "AE7", + "worksheet": "Protokoll" + }, + "Probenkennung 2": { + "iri": "https://w3id.org/steel/ProcessOntology/SampleIdentifier-2", + "key": "Probenkennung 2", + "value_location": "U7", + "worksheet": "Protokoll" + }, + "Projekt": { + "iri": "https://w3id.org/steel/ProcessOntology/ProjectNumber", + "key": "Projekt", + "value_location": "F6", + "worksheet": "Protokoll" + }, + "Pr\u00fcfer": { + "iri": "https://w3id.org/steel/ProcessOntology/Tester", + "key": "Pr\u00fcfer", + "value_location": "U6", + "worksheet": "Protokoll" + }, + "Pr\u00fcfgeschwindigkeit": { + "iri": "https://w3id.org/steel/ProcessOntology/TestingRate", + "key": "Pr\u00fcfgeschwindigkeit", + "value_location": "J9", + "worksheet": "Protokoll" + }, + "Pr\u00fcfmaschine": { + "iri": "https://w3id.org/steel/ProcessOntology/MachineData", + "key": "Pr\u00fcfmaschine", + "value_location": "I8", + "worksheet": "Protokoll" + }, + "Pr\u00fcftemperatur": { + "iri": "https://w3id.org/steel/ProcessOntology/Temperature", + "key": "Pr\u00fcftemperatur", + "value_location": "U8", + "worksheet": "Protokoll" + }, + "Standardkraft": { + "iri": "https://w3id.org/steel/ProcessOntology/StandardForce", + "key": "Standardkraft", + "time_series_start": "C15", + "unit_location": "C14", + "worksheet": "Messdaten" + }, + "Standardweg": { + "iri": "https://w3id.org/steel/ProcessOntology/Extension", + "key": "Standardweg", + "time_series_start": "D15", + "unit_location": "D14", + "worksheet": "Messdaten" + }, + "Traversenweg absolut": { + "iri": "https://w3id.org/steel/ProcessOntology/AbsoluteCrossheadTravel", + "key": "Traversenweg absolut", + "time_series_start": "B15", + "unit_location": "B14", + "worksheet": "Messdaten" + }, + "Werkstoff": { + "annotation": "https://w3id.org/steel/ProcessOntology", + "iri": "https://w3id.org/steel/ProcessOntology/Material", + "key": "Werkstoff", + "value_location": "H7", + "worksheet": "Protokoll" + }, + "Zeit": { + "iri": "https://w3id.org/steel/ProcessOntology/TestTime", + "key": "Zeit", + "time_series_start": "A15", + "unit_location": "A14", + "worksheet": "Messdaten" + } +} diff --git a/tests/xls_pipeline_test/input/mapping/tensile_test_mapping.xlsx b/tests/xls_pipeline_test/input/mapping/tensile_test_mapping.xlsx new file mode 100755 index 00000000..3a0e2fe5 Binary files /dev/null and b/tests/xls_pipeline_test/input/mapping/tensile_test_mapping.xlsx differ diff --git a/tests/xls_pipeline_test/input/method-graph/tensile_test_method_v6.mod.ttl b/tests/xls_pipeline_test/input/method-graph/tensile_test_method_v6.mod.ttl new file mode 100644 index 00000000..9fbdc9ea --- /dev/null +++ b/tests/xls_pipeline_test/input/method-graph/tensile_test_method_v6.mod.ttl @@ -0,0 +1,122 @@ +@prefix rdf: . +@prefix rdfs: . +@prefix prov: . +@prefix fileid: . + +# Describe the Tester and the Facility and lab + +fileid:TestingFacility rdf:type prov:Organization , prov:Location . + +fileid:TestingLab rdf:type prov:Location, prov:Agent ; + prov:atLocation fileid:TestingFacility . + +fileid:Tester rdf:type prov:Agent ; + prov:actedOnBehalfOf fileid:TestingFacility ; + prov:atLocation fileid:TestingLab . + +fileid:Temperature rdf:type prov:Entity ; + prov:wasAttributedTo fileid:TestingLab . + + +# describe the project + +fileid:Project rdf:type prov:Activity ; + prov:wasAssociatedWith fileid:TestingFacility ; + prov:generated fileid:ProjectName , + fileid:ProjectNumber . + +fileid:ProjectName rdf:type prov:Entity . + +fileid:ProjectNumber rdf:type prov:Entity . + + +# Describe the Specimen and its attributes + +fileid:SamplePreparatation rdf:type prov:Activity ; + prov:wasAssociatedWith fileid:TensileTestSpecimen , + fileid:Material ; + prov:generated fileid:ParallelLength , + fileid:SpecimenThickness , + fileid:SpecimenType , + fileid:SpecimenWidth ; + prov:wasInfluencedBy fileid:Project . + +fileid:TensileTestSpecimen rdf:type prov:Agent , prov:Entity . + +fileid:Material rdf:type prov:Agent . + +fileid:ParallelLength rdf:type prov:Entity ; + prov:wasAttributedTo fileid:TensileTestSpecimen . + +fileid:SpecimenThickness rdf:type prov:Entity ; + prov:wasAttributedTo fileid:TensileTestSpecimen . + +fileid:SpecimenType rdf:type prov:Entity ; + prov:wasAttributedTo fileid:TensileTestSpecimen . + +fileid:SpecimenWidth rdf:type prov:Entity ; + prov:wasAttributedTo fileid:TensileTestSpecimen . + +# Describe the experiment preparation + +fileid:ExperimentPreparation rdf:type prov:Activity ; + prov:atLocation fileid:TestingLab ; + prov:wasAssociatedWith fileid:Tester , + fileid:ForceMeasuringDevice , + fileid:DisplacementTransducer , + fileid:TensileTestSpecimen , + fileid:TensileTestingMachine ; + prov:generated fileid:Preload , + fileid:OriginalGaugeLength , + fileid:TestingRate ; + prov:wasInfluencedBy fileid:SamplePreparatation . + +fileid:TensileTestingMachine rdf:type prov:Agent, prov:Entity ; + prov:atLocation fileid:TestingLab . + +fileid:ForceMeasuringDevice rdf:type prov:Agent, prov:Entity ; + prov:atLocation fileid:TestingLab . + +fileid:DisplacementTransducer rdf:type prov:Agent , prov:Entity ; + prov:atLocation fileid:TestingLab . + +fileid:TestingRate rdf:type prov:Entity ; + prov:wasAttributedTo fileid:TensileTestingMachine . + +fileid:Preload rdf:type prov:Entity ; + prov:wasAttributedTo fileid:TensileTestingMachine . + +fileid:OriginalGaugeLength rdf:type prov:Entity ; + prov:wasAttributedTo fileid:DisplacementTransducer . + + +# Describe the experiment and its data produced by which device + +fileid:dataset rdf:type prov:Entity . + +fileid:TensileTestExperiment rdf:type prov:Activity ; + prov:wasAssociatedWith fileid:Tester ; + prov:used fileid:TensileTestSpecimen , + fileid:TensileTestingMachine , + fileid:ForceMeasuringDevice , + fileid:DisplacementTransducer , + fileid:TestingFacility ; + prov:generated fileid:Extension , + fileid:StandardForce , + fileid:AbsoluteCrossheadTravel , + fileid:Remark , + fileid:TimeStamp , + fileid:dataset ; + prov:hadPlan fileid:TestStandard ; + prov:wasInfluencedBy fileid:ExperimentPreparation . + +fileid:AbsoluteCrossheadTravel rdf:type prov:Entity; + prov:wasDerivedFrom fileid:DisplacementTransducer . + +fileid:StandardForce rdf:type prov:Entity ; + prov:wasDerivedFrom fileid:ForceMeasuringDevice . + +fileid:Extension rdf:type prov:Entity ; + prov:wasDerivedFrom fileid:DisplacementTransducer . + +fileid:TestingStandard rdf:type prov:Plan . diff --git a/tests/xls_pipeline_test/input/method-graph/tensile_test_method_v6.xml b/tests/xls_pipeline_test/input/method-graph/tensile_test_method_v6.xml deleted file mode 100755 index 66fc8df6..00000000 --- a/tests/xls_pipeline_test/input/method-graph/tensile_test_method_v6.xml +++ /dev/null @@ -1 +0,0 @@ -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 diff --git a/tests/xls_pipeline_test/input/method-graph/tensile_test_method_v6/tensile_test_method_v6.mod.ttl b/tests/xls_pipeline_test/input/method-graph/tensile_test_method_v6/tensile_test_method_v6.mod.ttl deleted file mode 100755 index 854b1f40..00000000 --- a/tests/xls_pipeline_test/input/method-graph/tensile_test_method_v6/tensile_test_method_v6.mod.ttl +++ /dev/null @@ -1,344 +0,0 @@ -@prefix dc: . -@prefix emmo: . -@prefix holistic: . -@prefix isq: . -@prefix manufacturing: . -@prefix mero: . -@prefix method: . -@prefix metrology: . -@prefix mt: . -@prefix owl: . -@prefix perceptual: . -@prefix phys: . -@prefix rdfs: . -@prefix sd: . -@prefix semiotics: . - -emmo:hasProperty a owl:ObjectProperty ; - rdfs:label "has property" . - -mt: a owl:Ontology ; - dc:creator "creator_1" ; - dc:description "Ontology code created by Chowlk" ; - dc:title "EMMO ABox minimal" ; - owl:versionInfo "0.0.1" . - -mt:Individual a owl:DatatypeProperty ; - rdfs:label "individual>" ; - rdfs:domain mt:ClassName . - -mt:Load a owl:Class ; - rdfs:label "Load" . - -mt:Thickness a owl:Class ; - rdfs:label "Thickness" . - -mt:Width a owl:Class ; - rdfs:label "Width" . - -mt:hasInput a owl:ObjectProperty ; - rdfs:label "has input" . - -mt:hasOutput a owl:ObjectProperty ; - rdfs:label "has output" . - -holistic:hasParticipant a owl:ObjectProperty ; - rdfs:label "has participant" . - -isq:ISQDerivedQuantity a owl:Class ; - rdfs:label "I S Q Derived Quantity" . - -metrology:CategorizedPhysicalQuantity a owl:Class ; - rdfs:label "Categorized Physical Quantity" . - -phys:Material a owl:Class ; - rdfs:label "Material" . - -semiotics:hasSign a owl:ObjectProperty ; - rdfs:label "has sign" . - -mero:hasPart a owl:ObjectProperty ; - rdfs:label "has part" ; - rdfs:domain emmo:Matrix, - mt:DataSet . - -method:ColumnData a owl:DatatypeProperty ; - rdfs:label "column data" ; - rdfs:domain emmo:Matrix . - -method:DataSet a owl:DatatypeProperty ; - rdfs:label "data set" ; - rdfs:domain mt:DataSet . - -method:PercentageElongation a sd:PercentageElongation, - owl:NamedIndividual ; - rdfs:label "PercentageElongation" . - -method:Preload a sd:Preload, - owl:NamedIndividual ; - rdfs:label "Preload" ; - mt:hasInput method:TensileTestingMachine . - -method:SpecimenID a mt:SpecimenID, - owl:NamedIndividual ; - rdfs:label "SpecimenID" . - -method:TensileTestExperiment a mt:TensileTestMeasurement, - owl:NamedIndividual ; - rdfs:label "TensileTestExperiment" ; - emmo:hasProperty method:ProjectName, - method:ProjectNumber, - method:Remark, - method:Temperature, - method:TestStandard, - method:TimeStamp ; - mt:hasInput method:TensileTestSpecimen ; - holistic:hasParticipant method:TensileTestingMachine, - method:Tester, - method:TestingFacility . - -method:TestTime a sd:TestTime, - owl:NamedIndividual ; - rdfs:label "TestTime" . - -method:TestingRate a sd:TestingRate, - owl:NamedIndividual ; - rdfs:label "TestingRate" ; - mt:hasInput method:TensileTestingMachine . - -method:WidthChange a sd:WidthChange, - owl:NamedIndividual ; - rdfs:label "WidthChange" . - -mt:ClassName a owl:Class ; - rdfs:label "Class Name>" . - -mt:Extension a owl:Class ; - rdfs:label "Extension" . - -mt:Specimen a owl:Class ; - rdfs:label "Specimen" . - -mt:SpecimenID a owl:Class ; - rdfs:label "Specimen I D" . - -mt:SpecimenWidth a owl:Class ; - rdfs:label "Specimen Width" . - -mt:SpecimentThickness a owl:Class ; - rdfs:label "Speciment Thickness" . - -mt:TensileTestMeasurement a owl:Class ; - rdfs:label "Tensile Test Measurement" . - -mt:TensileTestSpecimen a owl:Class ; - rdfs:label "Tensile Test Specimen" ; - rdfs:subClassOf mt:Specimen . - -mt:TensileTestingMachine a owl:Class ; - rdfs:label "Tensile Testing Machine" . - -isq:Force a owl:Class ; - rdfs:label "Force" . - -method:AbsoluteCrossheadTravel a sd:AbsoluteCrossheadTravel, - owl:NamedIndividual ; - rdfs:label "AbsoluteCrossheadTravel" . - -method:DisplacementTransducer a sd:DisplacementTransducer, - owl:NamedIndividual ; - rdfs:label "DisplacementTransducer" ; - mt:hasInput method:OriginalGaugeLength ; - mt:hasOutput method:Extension . - -method:Extension a mt:Extension, - owl:NamedIndividual ; - rdfs:label "Extension" . - -method:ForceMeasuringDevice a sd:ForceMeasuringDevice, - owl:NamedIndividual ; - rdfs:label "ForceMeasuringDevice" ; - mt:hasOutput method:StandardForce . - -method:MachineData a sd:MachineData, - owl:NamedIndividual ; - rdfs:label "MachineData" . - -method:Material a sd:SpecimenMaterial, - owl:NamedIndividual ; - rdfs:label "Material" . - -method:OriginalGaugeLength a sd:OriginalGaugeLength, - owl:NamedIndividual ; - rdfs:label "OriginalGaugeLength" . - -method:ParallelLength a sd:ParallelLength, - owl:NamedIndividual ; - rdfs:label "ParallelLength" . - -method:ProjectName a sd:ProjectName, - owl:NamedIndividual ; - rdfs:label "ProjectName" . - -method:ProjectNumber a sd:ProjectNumber, - owl:NamedIndividual ; - rdfs:label "ProjectNumber" . - -method:Remark a sd:Remark, - owl:NamedIndividual ; - rdfs:label "Remark" . - -method:SpecimenThickness a mt:SpecimentThickness, - owl:NamedIndividual ; - rdfs:label "SpecimenThickness" . - -method:SpecimenType a sd:SpecimenType, - owl:NamedIndividual ; - rdfs:label "SpecimenType" . - -method:SpecimenWidth a mt:SpecimenWidth, - owl:NamedIndividual ; - rdfs:label "SpecimenWidth" . - -method:StandardForce a sd:StandardForce, - owl:NamedIndividual ; - rdfs:label "StandardForce" . - -method:Temperature a sd:Temperature, - owl:NamedIndividual ; - rdfs:label "Temperature" . - -method:TensileTestSpecimen a mt:TensileTestSpecimen, - owl:NamedIndividual ; - rdfs:label "TensileTestSpecimen" ; - emmo:hasProperty method:ParallelLength, - method:SpecimenThickness, - method:SpecimenType, - method:SpecimenWidth ; - mero:hasPart method:Material . - -method:TestStandard a sd:TestStandard, - owl:NamedIndividual ; - rdfs:label "TestStandard" . - -method:TestingFacility a sd:TestingFacility, - owl:NamedIndividual ; - rdfs:label "TestingFacility" ; - mero:hasPart method:Tester . - -method:TimeStamp a sd:TimeStamp, - owl:NamedIndividual ; - rdfs:label "TimeStamp" . - -sd:AbsoluteCrossheadTravel a owl:Class ; - rdfs:label "Absolute Crosshead Travel" ; - rdfs:subClassOf isq:Length . - -sd:DisplacementTransducer a owl:Class ; - rdfs:label "Displacement Transducer" ; - rdfs:subClassOf manufacturing:Device . - -sd:ForceMeasuringDevice a owl:Class ; - rdfs:label "Force Measuring Device" ; - rdfs:subClassOf manufacturing:Device . - -sd:MachineData a owl:Class ; - rdfs:label "Machine Data" ; - rdfs:subClassOf mt:Identifier . - -sd:OriginalGaugeLength a owl:Class ; - rdfs:label "Original Gauge Length" ; - rdfs:subClassOf isq:Length . - -sd:ParallelLength a owl:Class ; - rdfs:label "Parallel Length" . - -sd:PercentageElongation a owl:Class ; - rdfs:label "Percentage Elongation" ; - rdfs:subClassOf isq:Length . - -sd:Preload a owl:Class ; - rdfs:label "Preload" . - -sd:ProjectName a owl:Class ; - rdfs:label "Project Name" . - -sd:ProjectNumber a owl:Class ; - rdfs:label "Project Number" ; - rdfs:subClassOf mt:Identifier . - -sd:Remark a owl:Class ; - rdfs:label "Remark" . - -sd:SpecimenMaterial a owl:Class ; - rdfs:label "Specimen Material" . - -sd:SpecimenType a owl:Class ; - rdfs:label "Specimen Type" ; - rdfs:subClassOf mt:Identifier . - -sd:StandardForce a owl:Class ; - rdfs:label "Standard Force" ; - rdfs:subClassOf isq:Force . - -sd:Temperature a owl:Class ; - rdfs:label "Temperature" . - -sd:TestStandard a owl:Class ; - rdfs:label "Test Standard" . - -sd:TestTime a owl:Class ; - rdfs:label "Test Time" ; - rdfs:subClassOf isq:Time . - -sd:Tester a owl:Class ; - rdfs:label "Tester" ; - rdfs:subClassOf perceptual:Symbolic . - -sd:TestingFacility a owl:Class ; - rdfs:label "Testing Facility" ; - rdfs:subClassOf perceptual:Symbolic . - -sd:TestingRate a owl:Class ; - rdfs:label "Testing Rate" . - -sd:TimeStamp a owl:Class ; - rdfs:label "Time Stamp" ; - rdfs:subClassOf isq:Time . - -sd:WidthChange a owl:Class ; - rdfs:label "Width Change" ; - rdfs:subClassOf isq:Length . - -emmo:Matrix a owl:Class ; - rdfs:label "Matrix" . - -mt:DataSet a owl:Class ; - rdfs:label "Data Set" . - -isq:Time a owl:Class ; - rdfs:label "Time" . - -manufacturing:Device a owl:Class ; - rdfs:label "Device" . - -method:Tester a sd:Tester, - owl:NamedIndividual ; - rdfs:label "Tester" . - -perceptual:Symbolic a owl:Class ; - rdfs:label "Symbolic" . - -mt:Identifier a owl:Class ; - rdfs:label "Identifier" . - -method:TensileTestingMachine a mt:TensileTestingMachine, - owl:NamedIndividual ; - rdfs:label "TensileTestingMachine" ; - mt:hasOutput method:AbsoluteCrossheadTravel ; - semiotics:hasSign method:MachineData ; - mero:hasPart method:DisplacementTransducer, - method:ForceMeasuringDevice . - -isq:Length a owl:Class ; - rdfs:label "Length" . diff --git a/tests/xls_pipeline_test/input/method-graph/tensile_test_method_v6/tensile_test_method_v6.mod.xml b/tests/xls_pipeline_test/input/method-graph/tensile_test_method_v6/tensile_test_method_v6.mod.xml deleted file mode 100755 index 66fc8df6..00000000 --- a/tests/xls_pipeline_test/input/method-graph/tensile_test_method_v6/tensile_test_method_v6.mod.xml +++ /dev/null @@ -1 +0,0 @@ -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 diff --git a/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.abox.ttl b/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.abox.ttl deleted file mode 100755 index 854b1f40..00000000 --- a/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.abox.ttl +++ /dev/null @@ -1,344 +0,0 @@ -@prefix dc: . -@prefix emmo: . -@prefix holistic: . -@prefix isq: . -@prefix manufacturing: . -@prefix mero: . -@prefix method: . -@prefix metrology: . -@prefix mt: . -@prefix owl: . -@prefix perceptual: . -@prefix phys: . -@prefix rdfs: . -@prefix sd: . -@prefix semiotics: . - -emmo:hasProperty a owl:ObjectProperty ; - rdfs:label "has property" . - -mt: a owl:Ontology ; - dc:creator "creator_1" ; - dc:description "Ontology code created by Chowlk" ; - dc:title "EMMO ABox minimal" ; - owl:versionInfo "0.0.1" . - -mt:Individual a owl:DatatypeProperty ; - rdfs:label "individual>" ; - rdfs:domain mt:ClassName . - -mt:Load a owl:Class ; - rdfs:label "Load" . - -mt:Thickness a owl:Class ; - rdfs:label "Thickness" . - -mt:Width a owl:Class ; - rdfs:label "Width" . - -mt:hasInput a owl:ObjectProperty ; - rdfs:label "has input" . - -mt:hasOutput a owl:ObjectProperty ; - rdfs:label "has output" . - -holistic:hasParticipant a owl:ObjectProperty ; - rdfs:label "has participant" . - -isq:ISQDerivedQuantity a owl:Class ; - rdfs:label "I S Q Derived Quantity" . - -metrology:CategorizedPhysicalQuantity a owl:Class ; - rdfs:label "Categorized Physical Quantity" . - -phys:Material a owl:Class ; - rdfs:label "Material" . - -semiotics:hasSign a owl:ObjectProperty ; - rdfs:label "has sign" . - -mero:hasPart a owl:ObjectProperty ; - rdfs:label "has part" ; - rdfs:domain emmo:Matrix, - mt:DataSet . - -method:ColumnData a owl:DatatypeProperty ; - rdfs:label "column data" ; - rdfs:domain emmo:Matrix . - -method:DataSet a owl:DatatypeProperty ; - rdfs:label "data set" ; - rdfs:domain mt:DataSet . - -method:PercentageElongation a sd:PercentageElongation, - owl:NamedIndividual ; - rdfs:label "PercentageElongation" . - -method:Preload a sd:Preload, - owl:NamedIndividual ; - rdfs:label "Preload" ; - mt:hasInput method:TensileTestingMachine . - -method:SpecimenID a mt:SpecimenID, - owl:NamedIndividual ; - rdfs:label "SpecimenID" . - -method:TensileTestExperiment a mt:TensileTestMeasurement, - owl:NamedIndividual ; - rdfs:label "TensileTestExperiment" ; - emmo:hasProperty method:ProjectName, - method:ProjectNumber, - method:Remark, - method:Temperature, - method:TestStandard, - method:TimeStamp ; - mt:hasInput method:TensileTestSpecimen ; - holistic:hasParticipant method:TensileTestingMachine, - method:Tester, - method:TestingFacility . - -method:TestTime a sd:TestTime, - owl:NamedIndividual ; - rdfs:label "TestTime" . - -method:TestingRate a sd:TestingRate, - owl:NamedIndividual ; - rdfs:label "TestingRate" ; - mt:hasInput method:TensileTestingMachine . - -method:WidthChange a sd:WidthChange, - owl:NamedIndividual ; - rdfs:label "WidthChange" . - -mt:ClassName a owl:Class ; - rdfs:label "Class Name>" . - -mt:Extension a owl:Class ; - rdfs:label "Extension" . - -mt:Specimen a owl:Class ; - rdfs:label "Specimen" . - -mt:SpecimenID a owl:Class ; - rdfs:label "Specimen I D" . - -mt:SpecimenWidth a owl:Class ; - rdfs:label "Specimen Width" . - -mt:SpecimentThickness a owl:Class ; - rdfs:label "Speciment Thickness" . - -mt:TensileTestMeasurement a owl:Class ; - rdfs:label "Tensile Test Measurement" . - -mt:TensileTestSpecimen a owl:Class ; - rdfs:label "Tensile Test Specimen" ; - rdfs:subClassOf mt:Specimen . - -mt:TensileTestingMachine a owl:Class ; - rdfs:label "Tensile Testing Machine" . - -isq:Force a owl:Class ; - rdfs:label "Force" . - -method:AbsoluteCrossheadTravel a sd:AbsoluteCrossheadTravel, - owl:NamedIndividual ; - rdfs:label "AbsoluteCrossheadTravel" . - -method:DisplacementTransducer a sd:DisplacementTransducer, - owl:NamedIndividual ; - rdfs:label "DisplacementTransducer" ; - mt:hasInput method:OriginalGaugeLength ; - mt:hasOutput method:Extension . - -method:Extension a mt:Extension, - owl:NamedIndividual ; - rdfs:label "Extension" . - -method:ForceMeasuringDevice a sd:ForceMeasuringDevice, - owl:NamedIndividual ; - rdfs:label "ForceMeasuringDevice" ; - mt:hasOutput method:StandardForce . - -method:MachineData a sd:MachineData, - owl:NamedIndividual ; - rdfs:label "MachineData" . - -method:Material a sd:SpecimenMaterial, - owl:NamedIndividual ; - rdfs:label "Material" . - -method:OriginalGaugeLength a sd:OriginalGaugeLength, - owl:NamedIndividual ; - rdfs:label "OriginalGaugeLength" . - -method:ParallelLength a sd:ParallelLength, - owl:NamedIndividual ; - rdfs:label "ParallelLength" . - -method:ProjectName a sd:ProjectName, - owl:NamedIndividual ; - rdfs:label "ProjectName" . - -method:ProjectNumber a sd:ProjectNumber, - owl:NamedIndividual ; - rdfs:label "ProjectNumber" . - -method:Remark a sd:Remark, - owl:NamedIndividual ; - rdfs:label "Remark" . - -method:SpecimenThickness a mt:SpecimentThickness, - owl:NamedIndividual ; - rdfs:label "SpecimenThickness" . - -method:SpecimenType a sd:SpecimenType, - owl:NamedIndividual ; - rdfs:label "SpecimenType" . - -method:SpecimenWidth a mt:SpecimenWidth, - owl:NamedIndividual ; - rdfs:label "SpecimenWidth" . - -method:StandardForce a sd:StandardForce, - owl:NamedIndividual ; - rdfs:label "StandardForce" . - -method:Temperature a sd:Temperature, - owl:NamedIndividual ; - rdfs:label "Temperature" . - -method:TensileTestSpecimen a mt:TensileTestSpecimen, - owl:NamedIndividual ; - rdfs:label "TensileTestSpecimen" ; - emmo:hasProperty method:ParallelLength, - method:SpecimenThickness, - method:SpecimenType, - method:SpecimenWidth ; - mero:hasPart method:Material . - -method:TestStandard a sd:TestStandard, - owl:NamedIndividual ; - rdfs:label "TestStandard" . - -method:TestingFacility a sd:TestingFacility, - owl:NamedIndividual ; - rdfs:label "TestingFacility" ; - mero:hasPart method:Tester . - -method:TimeStamp a sd:TimeStamp, - owl:NamedIndividual ; - rdfs:label "TimeStamp" . - -sd:AbsoluteCrossheadTravel a owl:Class ; - rdfs:label "Absolute Crosshead Travel" ; - rdfs:subClassOf isq:Length . - -sd:DisplacementTransducer a owl:Class ; - rdfs:label "Displacement Transducer" ; - rdfs:subClassOf manufacturing:Device . - -sd:ForceMeasuringDevice a owl:Class ; - rdfs:label "Force Measuring Device" ; - rdfs:subClassOf manufacturing:Device . - -sd:MachineData a owl:Class ; - rdfs:label "Machine Data" ; - rdfs:subClassOf mt:Identifier . - -sd:OriginalGaugeLength a owl:Class ; - rdfs:label "Original Gauge Length" ; - rdfs:subClassOf isq:Length . - -sd:ParallelLength a owl:Class ; - rdfs:label "Parallel Length" . - -sd:PercentageElongation a owl:Class ; - rdfs:label "Percentage Elongation" ; - rdfs:subClassOf isq:Length . - -sd:Preload a owl:Class ; - rdfs:label "Preload" . - -sd:ProjectName a owl:Class ; - rdfs:label "Project Name" . - -sd:ProjectNumber a owl:Class ; - rdfs:label "Project Number" ; - rdfs:subClassOf mt:Identifier . - -sd:Remark a owl:Class ; - rdfs:label "Remark" . - -sd:SpecimenMaterial a owl:Class ; - rdfs:label "Specimen Material" . - -sd:SpecimenType a owl:Class ; - rdfs:label "Specimen Type" ; - rdfs:subClassOf mt:Identifier . - -sd:StandardForce a owl:Class ; - rdfs:label "Standard Force" ; - rdfs:subClassOf isq:Force . - -sd:Temperature a owl:Class ; - rdfs:label "Temperature" . - -sd:TestStandard a owl:Class ; - rdfs:label "Test Standard" . - -sd:TestTime a owl:Class ; - rdfs:label "Test Time" ; - rdfs:subClassOf isq:Time . - -sd:Tester a owl:Class ; - rdfs:label "Tester" ; - rdfs:subClassOf perceptual:Symbolic . - -sd:TestingFacility a owl:Class ; - rdfs:label "Testing Facility" ; - rdfs:subClassOf perceptual:Symbolic . - -sd:TestingRate a owl:Class ; - rdfs:label "Testing Rate" . - -sd:TimeStamp a owl:Class ; - rdfs:label "Time Stamp" ; - rdfs:subClassOf isq:Time . - -sd:WidthChange a owl:Class ; - rdfs:label "Width Change" ; - rdfs:subClassOf isq:Length . - -emmo:Matrix a owl:Class ; - rdfs:label "Matrix" . - -mt:DataSet a owl:Class ; - rdfs:label "Data Set" . - -isq:Time a owl:Class ; - rdfs:label "Time" . - -manufacturing:Device a owl:Class ; - rdfs:label "Device" . - -method:Tester a sd:Tester, - owl:NamedIndividual ; - rdfs:label "Tester" . - -perceptual:Symbolic a owl:Class ; - rdfs:label "Symbolic" . - -mt:Identifier a owl:Class ; - rdfs:label "Identifier" . - -method:TensileTestingMachine a mt:TensileTestingMachine, - owl:NamedIndividual ; - rdfs:label "TensileTestingMachine" ; - mt:hasOutput method:AbsoluteCrossheadTravel ; - semiotics:hasSign method:MachineData ; - mero:hasPart method:DisplacementTransducer, - method:ForceMeasuringDevice . - -isq:Length a owl:Class ; - rdfs:label "Length" . diff --git a/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.datastorage.hdf5 b/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.datastorage.hdf5 deleted file mode 100755 index 1973a07d..00000000 Binary files a/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.datastorage.hdf5 and /dev/null differ diff --git a/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.generic.xlsx b/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.generic.xlsx deleted file mode 100755 index 34eda5df..00000000 Binary files a/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.generic.xlsx and /dev/null differ diff --git a/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.mapping-result.xlsx b/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.mapping-result.xlsx deleted file mode 100755 index 44aad98c..00000000 Binary files a/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.mapping-result.xlsx and /dev/null differ diff --git a/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.mapping.ttl b/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.mapping.ttl deleted file mode 100755 index 82422fa6..00000000 --- a/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.mapping.ttl +++ /dev/null @@ -1,3 +0,0 @@ -@prefix owl: . - - owl:sameAs . diff --git a/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.metadata.ttl b/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.metadata.ttl deleted file mode 100755 index 34f75d89..00000000 --- a/tests/xls_pipeline_test/output/AFZ1-Fz-S1Q.metadata.ttl +++ /dev/null @@ -1,761 +0,0 @@ -@prefix dcat: . -@prefix fileid: . -@prefix ns1: . -@prefix ns2: . -@prefix ns3: . -@prefix ns4: . -@prefix ns5: . -@prefix rdfs: . -@prefix xsd: . - -fileid:dataset a dcat:Dataset ; - ns1:composition fileid:column-0, - fileid:column-1, - fileid:column-10, - fileid:column-11, - fileid:column-2, - fileid:column-3, - fileid:column-4, - fileid:column-5, - fileid:column-6, - fileid:column-7, - fileid:column-8, - fileid:column-9, - fileid:metadata-0, - fileid:metadata-1, - fileid:metadata-10, - fileid:metadata-11, - fileid:metadata-12, - fileid:metadata-13, - fileid:metadata-14, - fileid:metadata-15, - fileid:metadata-16, - fileid:metadata-17, - fileid:metadata-18, - fileid:metadata-19, - fileid:metadata-2, - fileid:metadata-20, - fileid:metadata-21, - fileid:metadata-22, - fileid:metadata-23, - fileid:metadata-24, - fileid:metadata-25, - fileid:metadata-26, - fileid:metadata-27, - fileid:metadata-28, - fileid:metadata-29, - fileid:metadata-3, - fileid:metadata-30, - fileid:metadata-31, - fileid:metadata-32, - fileid:metadata-33, - fileid:metadata-34, - fileid:metadata-35, - fileid:metadata-36, - fileid:metadata-4, - fileid:metadata-5, - fileid:metadata-6, - fileid:metadata-7, - fileid:metadata-8, - fileid:metadata-9 ; - dcat:downloadURL "/root/2023/data2rdf/tests/xls_pipeline_test/input/data/AFZ1-Fz-S1Q.xlsm" . - -fileid:MetricPrefix-1 a . - -fileid:MetricPrefix-10 a , - . - -fileid:MetricPrefix-11 a . - -fileid:MetricPrefix-12 a . - -fileid:MetricPrefix-13 a . - -fileid:MetricPrefix-14 a . - -fileid:MetricPrefix-17 a . - -fileid:MetricPrefix-18 a . - -fileid:MetricPrefix-19 a . - -fileid:MetricPrefix-2 a . - -fileid:MetricPrefix-23 a . - -fileid:MetricPrefix-24 a . - -fileid:MetricPrefix-25 a . - -fileid:MetricPrefix-26 a . - -fileid:MetricPrefix-28 a . - -fileid:MetricPrefix-29 a . - -fileid:MetricPrefix-3 a . - -fileid:MetricPrefix-30 a . - -fileid:MetricPrefix-31 a . - -fileid:MetricPrefix-4 a . - -fileid:MetricPrefix-8 a . - -fileid:MetricPrefix-9 a , - . - -fileid:UnitSymbol-1 a . - -fileid:UnitSymbol-10 a , - . - -fileid:UnitSymbol-11 a . - -fileid:UnitSymbol-12 a . - -fileid:UnitSymbol-13 a . - -fileid:UnitSymbol-14 a . - -fileid:UnitSymbol-17 a . - -fileid:UnitSymbol-18 a . - -fileid:UnitSymbol-19 a . - -fileid:UnitSymbol-2 a . - -fileid:UnitSymbol-23 a . - -fileid:UnitSymbol-24 a . - -fileid:UnitSymbol-25 a . - -fileid:UnitSymbol-26 a . - -fileid:UnitSymbol-28 a . - -fileid:UnitSymbol-29 a . - -fileid:UnitSymbol-3 a . - -fileid:UnitSymbol-30 a . - -fileid:UnitSymbol-31 a . - -fileid:UnitSymbol-4 a . - -fileid:UnitSymbol-8 a . - -fileid:UnitSymbol-9 a , - . - -fileid:column-0 a ns1:DataInstance ; - rdfs:label "Zeit" ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-0, - fileid:unitliteral-0 . - -fileid:column-1 a ns1:DataInstance ; - rdfs:label "F" ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-1, - fileid:unitliteral-1 . - -fileid:column-10 a ns1:DataInstance ; - rdfs:label "sw (DL)" ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-10, - fileid:unitliteral-10 . - -fileid:column-11 a ns1:DataInstance ; - rdfs:label "r" ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-11, - fileid:unitliteral-11 . - -fileid:column-2 a ns1:DataInstance ; - rdfs:label "DL" ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-2, - fileid:unitliteral-2 . - -fileid:column-3 a ns1:DataInstance ; - rdfs:label "B" ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-3, - fileid:unitliteral-3 . - -fileid:column-4 a ns1:DataInstance ; - rdfs:label "DB" ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-4, - fileid:unitliteral-4 . - -fileid:column-5 a ns1:DataInstance ; - rdfs:label "e-plast" ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-5, - fileid:unitliteral-5 . - -fileid:column-6 a ns1:DataInstance ; - rdfs:label "e-technisch" ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-6, - fileid:unitliteral-6 . - -fileid:column-7 a ns1:DataInstance ; - rdfs:label "e-Breite" ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-7, - fileid:unitliteral-7 . - -fileid:column-8 a ns1:DataInstance ; - rdfs:label "ew (DL)" ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-8, - fileid:unitliteral-8 . - -fileid:column-9 a ns1:DataInstance ; - rdfs:label "s-technisch" ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-9, - fileid:unitliteral-9 . - -fileid:metadata-0 a ns1:Metadata ; - rdfs:label "Projekt" ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "Projekt_1"^^xsd:string . - -fileid:metadata-1 a ns1:Metadata ; - rdfs:label "Datum" ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "2016-10-11 00:00:00"^^xsd:string . - -fileid:metadata-10 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Probenbreite b" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-10 . - -fileid:metadata-11 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Probendicke A1 nach Bruch" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-11 . - -fileid:metadata-12 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Probendicke A2 nach Bruch" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-12 . - -fileid:metadata-13 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Probenbreite B1 nach Bruch" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-13 . - -fileid:metadata-14 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Probenbreite B2 nach Bruch" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-14 . - -fileid:metadata-15 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Prüfgeschwindigkeit" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-15 . - -fileid:metadata-16 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Prüftemperatur" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-16 . - -fileid:metadata-17 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Bruchverlängerung" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-17 . - -fileid:metadata-18 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Höchstzugkraft Fm" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-18 . - -fileid:metadata-19 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "S0" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-19 . - -fileid:metadata-2 a ns1:Metadata ; - rdfs:label "Prüfmaschine" ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "M_1"^^xsd:string . - -fileid:metadata-20 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Su" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-20 . - -fileid:metadata-21 a ns1:Metadata ; - rdfs:label "ew-Bruch" ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "1.31519843943616"^^xsd:string . - -fileid:metadata-22 a ns1:Metadata ; - rdfs:label "ew-Rm" ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "0.00104192985130898"^^xsd:string . - -fileid:metadata-23 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "sw-Bruch" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-23 . - -fileid:metadata-24 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "sw-Rm" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-24 . - -fileid:metadata-25 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "EModul" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-25 . - -fileid:metadata-26 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Elastizitätsmodul" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-26 . - -fileid:metadata-27 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Geschw." ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-27 . - -fileid:metadata-28 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Fp0,2" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-28 . - -fileid:metadata-29 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Rp0,2" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-29 . - -fileid:metadata-3 a ns1:Metadata ; - rdfs:label "Werkstoff" ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "Werkstoff_1"^^xsd:string . - -fileid:metadata-30 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Dehngrenze ReL" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-30 . - -fileid:metadata-31 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Zugfestigkeit Rm" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-31 . - -fileid:metadata-32 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Dehnung bei Höchstkraft Ag" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-32 . - -fileid:metadata-33 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Bruchdehnung A20mm" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-33 . - -fileid:metadata-34 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "A" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-34 . - -fileid:metadata-35 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Brucheinschnürung Z" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-35 . - -fileid:metadata-36 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Z" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-36 . - -fileid:metadata-4 a ns1:Metadata ; - rdfs:label "Probenform" ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "Fz 10x20"^^xsd:string . - -fileid:metadata-5 a ns1:Metadata ; - rdfs:label "Probentyp" ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "Fz 10x20"^^xsd:string . - -fileid:metadata-6 a ns1:Metadata ; - rdfs:label "Prüfer" ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "Fe"^^xsd:string . - -fileid:metadata-7 a ns1:Metadata ; - rdfs:label "Probennummer" ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "123456"^^xsd:string . - -fileid:metadata-8 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Messlänge Lo" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-8 . - -fileid:metadata-9 a ns1:Metadata, - ns2:EMMO_f658c301_ce93_46cf_9639_4eace2c5d1d5 ; - rdfs:label "Probendicke a" ; - ns2:EMMO_8ef3cd6d_ae58_4a8d_9fc0_ad8f49015cd0 fileid:numeric-9 . - -fileid:numeric-10 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "9.5"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-10, - fileid:unitliteral-10 . - -fileid:numeric-11 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "0.5"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-11, - fileid:unitliteral-11 . - -fileid:numeric-12 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "0.52"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-12, - fileid:unitliteral-12 . - -fileid:numeric-13 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "7.5"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-13, - fileid:unitliteral-13 . - -fileid:numeric-14 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "7.5"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-14, - fileid:unitliteral-14 . - -fileid:numeric-15 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "0.02"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-15, - fileid:unitliteral-15 . - -fileid:numeric-16 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "25.0"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-16, - fileid:unitliteral-16 . - -fileid:numeric-17 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "7.125539429929905"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-17, - fileid:unitliteral-17 . - -fileid:numeric-18 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "5.26095"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-18, - fileid:unitliteral-18 . - -fileid:numeric-19 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "14.25"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-19, - fileid:unitliteral-19 . - -fileid:numeric-20 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "3.825"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-20, - fileid:unitliteral-20 . - -fileid:numeric-23 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "1375.411764705882"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-23, - fileid:unitliteral-23 . - -fileid:numeric-24 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "1375.411764705882"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-24, - fileid:unitliteral-24 . - -fileid:numeric-25 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "147722.4926104469"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-25, - fileid:unitliteral-25 . - -fileid:numeric-26 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "147722.4926104469"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-26, - fileid:unitliteral-26 . - -fileid:numeric-27 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "NaN"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-27, - fileid:unitliteral-27 . - -fileid:numeric-28 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "5.65725"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-28, - fileid:unitliteral-28 . - -fileid:numeric-29 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "397.0"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-29, - fileid:unitliteral-29 . - -fileid:numeric-30 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "397.0"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-30, - fileid:unitliteral-30 . - -fileid:numeric-31 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "369.1894736842105"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-31, - fileid:unitliteral-31 . - -fileid:numeric-32 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "47.50352632351397"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-32, - fileid:unitliteral-32 . - -fileid:numeric-33 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "47.5035961995327"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-33, - fileid:unitliteral-33 . - -fileid:numeric-34 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "47.5035961995327"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-34, - fileid:unitliteral-34 . - -fileid:numeric-35 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "73.15789473684211"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-35, - fileid:unitliteral-35 . - -fileid:numeric-36 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "73.15789473684211"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-36, - fileid:unitliteral-36 . - -fileid:numeric-8 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "15.0"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-8, - fileid:unitliteral-8 . - -fileid:numeric-9 a ns4:EMMO_4ce76d7f_03f8_45b6_9003_90052a79bfaa ; - ns4:EMMO_faf79f53_749d_40b2_807c_d34244c192f4 "1.5"^^xsd:float ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 fileid:unit-9, - fileid:unitliteral-9 . - -fileid:unit-0 a . - -fileid:unit-1 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-1, - fileid:UnitSymbol-1 . - -fileid:unit-12 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-12, - fileid:UnitSymbol-12 . - -fileid:unit-13 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-13, - fileid:UnitSymbol-13 . - -fileid:unit-14 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-14, - fileid:UnitSymbol-14 . - -fileid:unit-15 a ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm/s"^^xsd:string . - -fileid:unit-16 a . - -fileid:unit-17 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-17, - fileid:UnitSymbol-17 . - -fileid:unit-18 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-18, - fileid:UnitSymbol-18 . - -fileid:unit-19 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-19, - fileid:UnitSymbol-19 . - -fileid:unit-2 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-2, - fileid:UnitSymbol-2 . - -fileid:unit-20 a ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm²"^^xsd:string . - -fileid:unit-23 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-23, - fileid:UnitSymbol-23 . - -fileid:unit-24 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-24, - fileid:UnitSymbol-24 . - -fileid:unit-25 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-25, - fileid:UnitSymbol-25 . - -fileid:unit-26 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-26, - fileid:UnitSymbol-26 . - -fileid:unit-27 a ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "MPa/s"^^xsd:string . - -fileid:unit-28 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-28, - fileid:UnitSymbol-28 . - -fileid:unit-29 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-29, - fileid:UnitSymbol-29 . - -fileid:unit-3 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-3, - fileid:UnitSymbol-3 . - -fileid:unit-30 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-30, - fileid:UnitSymbol-30 . - -fileid:unit-31 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-31, - fileid:UnitSymbol-31 . - -fileid:unit-32 a ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "%"^^xsd:string . - -fileid:unit-33 a ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "%"^^xsd:string . - -fileid:unit-34 a ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "%"^^xsd:string . - -fileid:unit-35 a ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "%"^^xsd:string . - -fileid:unit-36 a ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "%"^^xsd:string . - -fileid:unit-4 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-4, - fileid:UnitSymbol-4 . - -fileid:unit-5 a ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 ""^^xsd:string . - -fileid:unit-6 a ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 ""^^xsd:string . - -fileid:unit-7 a ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 ""^^xsd:string . - -fileid:unitliteral-0 a ns2:UnitLiteral ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 "s"^^xsd:string . - -fileid:unitliteral-1 a ns2:UnitLiteral ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 "kN"^^xsd:string . - -fileid:unitliteral-12 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm"^^xsd:string . - -fileid:unitliteral-13 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm"^^xsd:string . - -fileid:unitliteral-14 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm"^^xsd:string . - -fileid:unitliteral-15 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm/s"^^xsd:string . - -fileid:unitliteral-16 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "°C"^^xsd:string . - -fileid:unitliteral-17 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm"^^xsd:string . - -fileid:unitliteral-18 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "kN"^^xsd:string . - -fileid:unitliteral-19 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm"^^xsd:string . - -fileid:unitliteral-2 a ns2:UnitLiteral ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 "mm"^^xsd:string . - -fileid:unitliteral-20 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm²"^^xsd:string . - -fileid:unitliteral-23 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "MPa"^^xsd:string . - -fileid:unitliteral-24 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "MPa"^^xsd:string . - -fileid:unitliteral-25 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "MPa"^^xsd:string . - -fileid:unitliteral-26 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "MPa"^^xsd:string . - -fileid:unitliteral-27 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "MPa/s"^^xsd:string . - -fileid:unitliteral-28 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "kN"^^xsd:string . - -fileid:unitliteral-29 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "MPa"^^xsd:string . - -fileid:unitliteral-3 a ns2:UnitLiteral ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 "mm"^^xsd:string . - -fileid:unitliteral-30 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "MPa"^^xsd:string . - -fileid:unitliteral-31 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "MPa"^^xsd:string . - -fileid:unitliteral-32 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "%"^^xsd:string . - -fileid:unitliteral-33 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "%"^^xsd:string . - -fileid:unitliteral-34 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "%"^^xsd:string . - -fileid:unitliteral-35 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "%"^^xsd:string . - -fileid:unitliteral-36 a ns2:UnitLiteral ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "%"^^xsd:string . - -fileid:unitliteral-4 a ns2:UnitLiteral ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 "mm"^^xsd:string . - -fileid:unitliteral-5 a ns2:UnitLiteral ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 ""^^xsd:string . - -fileid:unitliteral-6 a ns2:UnitLiteral ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 ""^^xsd:string . - -fileid:unitliteral-7 a ns2:UnitLiteral ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 ""^^xsd:string . - -fileid:unit-10 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-10, - fileid:UnitSymbol-10 . - -fileid:unit-11 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e, - ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 ""^^xsd:string ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-11, - fileid:UnitSymbol-11 . - -fileid:unit-8 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e, - ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 ""^^xsd:string ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-8, - fileid:UnitSymbol-8 . - -fileid:unit-9 a ns2:EMMO_c6d4a5e0_7e95_44df_a6db_84ee0a8bbc8e ; - ns3:EMMO_b2282816_b7a3_44c6_b2cb_3feff1ceb7fe fileid:MetricPrefix-9, - fileid:UnitSymbol-9 . - -fileid:unitliteral-10 a ns2:UnitLiteral ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 "MPa"^^xsd:string ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm"^^xsd:string . - -fileid:unitliteral-11 a ns2:UnitLiteral ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 ""^^xsd:string ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm"^^xsd:string . - -fileid:unitliteral-8 a ns2:UnitLiteral ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 ""^^xsd:string ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm"^^xsd:string . - -fileid:unitliteral-9 a ns2:UnitLiteral ; - ns2:EMMO_67fc0a36_8dcb_4ffa_9a43_31074efa3296 "MPa"^^xsd:string ; - ns5:EMMO_23b579e1_8088_45b5_9975_064014026c42 "mm"^^xsd:string . diff --git a/tests/xls_pipeline_test/output/output_excel_parser.ttl b/tests/xls_pipeline_test/output/output_excel_parser.ttl new file mode 100644 index 00000000..0dbf62c2 --- /dev/null +++ b/tests/xls_pipeline_test/output/output_excel_parser.ttl @@ -0,0 +1,152 @@ +@prefix csvw: . +@prefix dcterms: . +@prefix fileid: . +@prefix foaf: . +@prefix qudt: . +@prefix rdfs: . +@prefix xsd: . + +fileid:tableGroup a csvw:TableGroup ; + csvw:table [ a csvw:Table ; + rdfs:label "Time series data" ; + csvw:tableSchema [ a csvw:Schema ; + csvw:column [ a csvw:Column ; + qudt:quantity fileid:Extension ; + csvw:titles "Standardweg"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-3"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:StandardForce ; + csvw:titles "Standardkraft"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-2"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:AbsoluteCrossheadTravel ; + csvw:titles "Traversenweg absolut"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-4"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:WidthChange ; + csvw:titles "Breitenänderung"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-0"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:PercentageElongation ; + csvw:titles "Dehnung"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-1"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:TestTime ; + csvw:titles "Zeit"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-5"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ] ] ], + [ a csvw:Table ; + rdfs:label "Metadata" ; + csvw:row [ a csvw:Row ; + qudt:quantity fileid:TestingRate ; + csvw:titles "Prüfgeschwindigkeit"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:SampleIdentifier-2 ; + csvw:titles "Probenkennung 2"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:MachineData ; + csvw:titles "Prüfmaschine"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:Tester ; + csvw:titles "Prüfer"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:OriginalGaugeLength ; + csvw:titles "Messlänge Standardweg"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:Temperature ; + csvw:titles "Prüftemperatur"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:TimeStamp ; + csvw:titles "Datum"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:Material ; + csvw:titles "Werkstoff"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:ProjectNumber ; + csvw:titles "Projekt"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:SpecimenType ; + csvw:titles "Probenform"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:SpecimenWidth ; + csvw:titles "Probenbreite b"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:SpecimenThickness ; + csvw:titles "Probendicke a"^^xsd:string ] ] . + +fileid:AbsoluteCrossheadTravel a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI . + +fileid:Extension a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI . + +fileid:MachineData a ; + rdfs:label "M_1" . + +fileid:Material a , + ; + rdfs:label "Werkstoff_1" . + +fileid:OriginalGaugeLength a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "15.0"^^xsd:float . + +fileid:PercentageElongation a ; + qudt:hasUnit "http://qudt.org/vocab/unit/FRACTION"^^xsd:anyURI . + +fileid:ProjectNumber a ; + rdfs:label "Projekt_1" . + +fileid:SampleIdentifier-2 a ; + rdfs:label "123456" . + +fileid:SpecimenThickness a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "1.5"^^xsd:float . + +fileid:SpecimenType a ; + rdfs:label "Fz 10x20" . + +fileid:SpecimenWidth a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "9.5"^^xsd:float . + +fileid:StandardForce a ; + qudt:hasUnit "http://qudt.org/vocab/unit/KiloN"^^xsd:anyURI . + +fileid:Temperature a ; + qudt:hasUnit "http://qudt.org/vocab/unit/DEG_C"^^xsd:anyURI ; + qudt:value "25.0"^^xsd:float . + +fileid:TestTime a ; + qudt:hasUnit "http://qudt.org/vocab/unit/SEC"^^xsd:anyURI . + +fileid:Tester a ; + rdfs:label "Fe" . + +fileid:TestingRate a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM-PER-SEC"^^xsd:anyURI ; + qudt:value "0.02"^^xsd:float . + +fileid:TimeStamp a ; + rdfs:label "2016-10-11 00:00:00" . + +fileid:WidthChange a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI . diff --git a/tests/xls_pipeline_test/output/output_pipeline.ttl b/tests/xls_pipeline_test/output/output_pipeline.ttl new file mode 100644 index 00000000..5e1daccc --- /dev/null +++ b/tests/xls_pipeline_test/output/output_pipeline.ttl @@ -0,0 +1,258 @@ +@prefix csvw: . +@prefix dcat: . +@prefix dcterms: . +@prefix fileid: . +@prefix foaf: . +@prefix ns1: . +@prefix qudt: . +@prefix rdfs: . +@prefix xsd: . + +fileid:TensileTestExperiment a ns1:Activity ; + ns1:generated fileid:AbsoluteCrossheadTravel, + fileid:Extension, + fileid:Remark, + fileid:StandardForce, + fileid:TimeStamp, + fileid:dataset ; + ns1:hadPlan fileid:TestStandard ; + ns1:used fileid:DisplacementTransducer, + fileid:ForceMeasuringDevice, + fileid:TensileTestSpecimen, + fileid:TensileTestingMachine, + fileid:TestingFacility ; + ns1:wasAssociatedWith fileid:Tester ; + ns1:wasInfluencedBy fileid:ExperimentPreparation . + +fileid:TestingStandard a ns1:Plan . + +fileid:ExperimentPreparation a ns1:Activity ; + ns1:atLocation fileid:TestingLab ; + ns1:generated fileid:OriginalGaugeLength, + fileid:Preload, + fileid:TestingRate ; + ns1:wasAssociatedWith fileid:DisplacementTransducer, + fileid:ForceMeasuringDevice, + fileid:TensileTestSpecimen, + fileid:TensileTestingMachine, + fileid:Tester ; + ns1:wasInfluencedBy fileid:SamplePreparatation . + +fileid:MachineData a ; + rdfs:label "M_1" . + +fileid:ParallelLength a ns1:Entity ; + ns1:wasAttributedTo fileid:TensileTestSpecimen . + +fileid:PercentageElongation a ; + qudt:hasUnit "http://qudt.org/vocab/unit/FRACTION"^^xsd:anyURI . + +fileid:Preload a ns1:Entity ; + ns1:wasAttributedTo fileid:TensileTestingMachine . + +fileid:Project a ns1:Activity ; + ns1:generated fileid:ProjectName, + fileid:ProjectNumber ; + ns1:wasAssociatedWith fileid:TestingFacility . + +fileid:ProjectName a ns1:Entity . + +fileid:SampleIdentifier-2 a ; + rdfs:label "123456" . + +fileid:SamplePreparatation a ns1:Activity ; + ns1:generated fileid:ParallelLength, + fileid:SpecimenThickness, + fileid:SpecimenType, + fileid:SpecimenWidth ; + ns1:wasAssociatedWith fileid:Material, + fileid:TensileTestSpecimen ; + ns1:wasInfluencedBy fileid:Project . + +fileid:Temperature a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/DEG_C"^^xsd:anyURI ; + qudt:value "25.0"^^xsd:float ; + ns1:wasAttributedTo fileid:TestingLab . + +fileid:TestTime a ; + qudt:hasUnit "http://qudt.org/vocab/unit/SEC"^^xsd:anyURI . + +fileid:WidthChange a ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI . + +fileid:dataset a dcat:Dataset, + ns1:Entity ; + dcterms:hasPart fileid:tableGroup ; + dcat:distribution [ a dcat:Distribution ; + dcat:accessURL "https://www.example.org/download/"^^xsd:anyURI ; + dcat:mediaType "https://www.iana.org/assignments/media-types/application/vnd.ms-excel"^^xsd:anyURI ] . + +fileid:tableGroup a csvw:TableGroup ; + csvw:table [ a csvw:Table ; + rdfs:label "Time series data" ; + csvw:tableSchema [ a csvw:Schema ; + csvw:column [ a csvw:Column ; + qudt:quantity fileid:WidthChange ; + csvw:titles "Breitenänderung"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-0"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:TestTime ; + csvw:titles "Zeit"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-5"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:PercentageElongation ; + csvw:titles "Dehnung"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-1"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:StandardForce ; + csvw:titles "Standardkraft"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-2"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:AbsoluteCrossheadTravel ; + csvw:titles "Traversenweg absolut"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-4"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ], + [ a csvw:Column ; + qudt:quantity fileid:Extension ; + csvw:titles "Standardweg"^^xsd:string ; + foaf:page [ a foaf:Document ; + dcterms:format "https://www.iana.org/assignments/media-types/application/json"^^xsd:anyURI ; + dcterms:identifier "https://www.example.org/download/column-3"^^xsd:anyURI ; + dcterms:type "http://purl.org/dc/terms/Dataset"^^xsd:anyURI ] ] ] ], + [ a csvw:Table ; + rdfs:label "Metadata" ; + csvw:row [ a csvw:Row ; + csvw:describes fileid:Tester ; + csvw:titles "Prüfer"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:SampleIdentifier-2 ; + csvw:titles "Probenkennung 2"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:SpecimenThickness ; + csvw:titles "Probendicke a"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:OriginalGaugeLength ; + csvw:titles "Messlänge Standardweg"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:ProjectNumber ; + csvw:titles "Projekt"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:TestingRate ; + csvw:titles "Prüfgeschwindigkeit"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:SpecimenWidth ; + csvw:titles "Probenbreite b"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:Material ; + csvw:titles "Werkstoff"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:MachineData ; + csvw:titles "Prüfmaschine"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:TimeStamp ; + csvw:titles "Datum"^^xsd:string ], + [ a csvw:Row ; + qudt:quantity fileid:Temperature ; + csvw:titles "Prüftemperatur"^^xsd:string ], + [ a csvw:Row ; + csvw:describes fileid:SpecimenType ; + csvw:titles "Probenform"^^xsd:string ] ] . + +fileid:AbsoluteCrossheadTravel a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + ns1:wasDerivedFrom fileid:DisplacementTransducer . + +fileid:Extension a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + ns1:wasDerivedFrom fileid:DisplacementTransducer . + +fileid:Material a ns1:Agent, + , + ; + rdfs:label "Werkstoff_1" . + +fileid:OriginalGaugeLength a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "15.0"^^xsd:float ; + ns1:wasAttributedTo fileid:DisplacementTransducer . + +fileid:ProjectNumber a ns1:Entity, + ; + rdfs:label "Projekt_1" . + +fileid:SpecimenThickness a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "1.5"^^xsd:float ; + ns1:wasAttributedTo fileid:TensileTestSpecimen . + +fileid:SpecimenType a ns1:Entity, + ; + rdfs:label "Fz 10x20" ; + ns1:wasAttributedTo fileid:TensileTestSpecimen . + +fileid:SpecimenWidth a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM"^^xsd:anyURI ; + qudt:value "9.5"^^xsd:float ; + ns1:wasAttributedTo fileid:TensileTestSpecimen . + +fileid:StandardForce a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/KiloN"^^xsd:anyURI ; + ns1:wasDerivedFrom fileid:ForceMeasuringDevice . + +fileid:TestingRate a ns1:Entity, + ; + qudt:hasUnit "http://qudt.org/vocab/unit/MilliM-PER-SEC"^^xsd:anyURI ; + qudt:value "0.02"^^xsd:float ; + ns1:wasAttributedTo fileid:TensileTestingMachine . + +fileid:TimeStamp a ; + rdfs:label "2016-10-11 00:00:00" . + +fileid:ForceMeasuringDevice a ns1:Agent, + ns1:Entity ; + ns1:atLocation fileid:TestingLab . + +fileid:Tester a ns1:Agent, + ; + rdfs:label "Fe" ; + ns1:actedOnBehalfOf fileid:TestingFacility ; + ns1:atLocation fileid:TestingLab . + +fileid:TensileTestingMachine a ns1:Agent, + ns1:Entity ; + ns1:atLocation fileid:TestingLab . + +fileid:TestingFacility a ns1:Location, + ns1:Organization . + +fileid:DisplacementTransducer a ns1:Agent, + ns1:Entity ; + ns1:atLocation fileid:TestingLab . + +fileid:TestingLab a ns1:Agent, + ns1:Location ; + ns1:atLocation fileid:TestingFacility . + +fileid:TensileTestSpecimen a ns1:Agent, + ns1:Entity . diff --git a/tests/xls_pipeline_test/test_abox_pipeline.py b/tests/xls_pipeline_test/test_abox_pipeline.py deleted file mode 100755 index f81ac741..00000000 --- a/tests/xls_pipeline_test/test_abox_pipeline.py +++ /dev/null @@ -1,29 +0,0 @@ -import os -import shutil -import unittest - -from data2rdf.cli.abox_conversion import run_abox_pipeline_for_folder - -from .test_utils import check_file_identifier_in_folder - -test_folder = os.path.dirname(os.path.abspath(__file__)) -abox_folder_path = os.path.join(test_folder, "input", "method-graph") -output_folder = os.path.join(abox_folder_path, "tensile_test_method_v6") - - -class TestAboxPipeline(unittest.TestCase): - def setUp(self): - shutil.rmtree(output_folder, ignore_errors=True) - run_abox_pipeline_for_folder(abox_folder_path) - - def test_file_exist(self): - self.assertTrue( - check_file_identifier_in_folder(output_folder, ".mod.ttl") - ) - self.assertTrue( - check_file_identifier_in_folder(output_folder, ".mod.xml") - ) - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/xls_pipeline_test/test_excel2rdf.py b/tests/xls_pipeline_test/test_excel2rdf.py deleted file mode 100755 index 68c1f4fe..00000000 --- a/tests/xls_pipeline_test/test_excel2rdf.py +++ /dev/null @@ -1,85 +0,0 @@ -import os -import shutil -import unittest - -from data2rdf.annotation_pipeline import AnnotationPipeline - -from .test_utils import check_file_identifier_in_folder - -test_folder = os.path.dirname(os.path.abspath(__file__)) -working_folder = os.path.join(test_folder, "input") - -output_folder = os.path.join(test_folder, "output") - -template = os.path.join( - working_folder, - "method-graph", - "tensile_test_method_v6", - "tensile_test_method_v6.mod.ttl", -) - -mapping_file = os.path.join(working_folder, "mapping", "mapping.xlsx") -raw_data = os.path.join(working_folder, "data", "AFZ1-Fz-S1Q.xlsm") -location_mapping = os.path.join( - working_folder, "mapping", "location_mapping.xlsx" -) - -parser = "excel" -parser_args = { - "location_mapping_f_path": location_mapping, -} - -pipeline = AnnotationPipeline( - raw_data, - parser, - parser_args, - template, - mapping_file, - output_folder, - base_iri="http://www.test4.de", -) - - -class TestAnnotationPipelineExcel(unittest.TestCase): - def setUp(self): - self.pipeline = AnnotationPipeline( - raw_data, - parser, - parser_args, - template, - mapping_file, - output_folder, - ) - - shutil.rmtree(output_folder, ignore_errors=True) - - self.pipeline.run_pipeline() - - def test_file_exist(self): - self.assertTrue( - check_file_identifier_in_folder(self.pipeline.output, "abox.ttl") - ) - self.assertTrue( - check_file_identifier_in_folder( - self.pipeline.output, "generic.xlsx" - ) - ) - self.assertTrue( - check_file_identifier_in_folder( - self.pipeline.output, "mapping.ttl" - ) - ) - self.assertTrue( - check_file_identifier_in_folder( - self.pipeline.output, "datastorage.hdf5" - ) - ) - self.assertTrue( - check_file_identifier_in_folder( - self.pipeline.output, "metadata.ttl" - ) - ) - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/xls_pipeline_test/test_parser.py b/tests/xls_pipeline_test/test_parser.py new file mode 100755 index 00000000..b6e13632 --- /dev/null +++ b/tests/xls_pipeline_test/test_parser.py @@ -0,0 +1,268 @@ +"""CSV Parser pytest""" + +import json +import os + +import pytest + +test_folder = os.path.dirname(os.path.abspath(__file__)) +working_folder = os.path.join(test_folder, "input") +output_folder = os.path.join(test_folder, "output") + +mapping_folder = os.path.join(working_folder, "mapping") +raw_data = os.path.join(working_folder, "data", "AFZ1-Fz-S1Q.xlsm") +expected = os.path.join(output_folder, "output_excel_parser.ttl") + +metadata = { + "ProjectNumber": "Projekt_1", + "TimeStamp": "2016-10-11 00:00:00", + "MachineData": "M_1", + "Material": "Werkstoff_1", + "SpecimenType": "Fz 10x20", + "Tester": "Fe", + "SampleIdentifier-2": "123456", + "OriginalGaugeLength": 15, + "SpecimenThickness": 1.5, + "SpecimenWidth": 9.5, + "TestingRate": 0.02, + "Temperature": 25, +} + +columns = [ + "TestTime", + "StandardForce", + "Extension", + "PercentageElongation", + "AbsoluteCrossheadTravel", + "WidthChange", +] + + +normal_config = {"graph_identifier": "https://www.example.org"} +bad_config = {"graph_identifier": "https://www.example.org", "foorbar": 123} + + +def test_xlsx_parser_no_match_in_metadata_from_mapping() -> None: + from rdflib import Graph + + from data2rdf.models import PropertyMapping, QuantityMapping + from data2rdf.parsers import ExcelParser + from data2rdf.warnings import MappingMissmatchWarning + + with pytest.warns( + MappingMissmatchWarning, match="Concept with key" + ) as warnings: + parser = ExcelParser( + raw_data=raw_data, + mapping=os.path.join( + mapping_folder, "bad_metadata_tensile_test_mapping.json" + ), + dropna=True, + ) + missmatches = [ + warning + for warning in warnings + if warning.category == MappingMissmatchWarning + ] + assert len(missmatches) == 3 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert len(parser.general_metadata) == 11 + for row in parser.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(parser.time_series_metadata) == 6 + for row in parser.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(parser.time_series.columns) == 6 + assert sorted(list(parser.time_series.columns)) == sorted(columns) + for name, column in parser.time_series.items(): + assert len(column) == 460 + + +def test_xlsx_parser_no_match_in_timeseries_from_mapping() -> None: + from rdflib import Graph + + from data2rdf.models import PropertyMapping, QuantityMapping + from data2rdf.parsers import ExcelParser + from data2rdf.warnings import MappingMissmatchWarning + + with pytest.warns( + MappingMissmatchWarning, match="Concept with key" + ) as warnings: + parser = ExcelParser( + raw_data=raw_data, + mapping=os.path.join( + mapping_folder, "bad_timeseries_tensile_test_mapping.json" + ), + dropna=True, + ) + + missmatches = [ + warning + for warning in warnings + if warning.category == MappingMissmatchWarning + ] + assert len(missmatches) == 3 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert len(parser.general_metadata) == 12 + for row in parser.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(parser.time_series_metadata) == 5 + for row in parser.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(parser.time_series.columns) == 5 + for name, column in parser.time_series.items(): + assert len(column) == 460 + + assert parser.plain_metadata == metadata + + +@pytest.mark.parametrize("config", [normal_config, bad_config]) +def test_csv_parser_config(config) -> None: + from rdflib import Graph + + from data2rdf.parsers import ExcelParser + from data2rdf.warnings import MappingMissmatchWarning + + with pytest.warns( + MappingMissmatchWarning, match="Concept with key" + ) as warnings: + parser = ExcelParser( + raw_data=raw_data, + mapping=os.path.join(mapping_folder, "tensile_test_mapping.json"), + dropna=True, + config=config, + ) + + missmatches = [ + warning + for warning in warnings + if warning.category == MappingMissmatchWarning + ] + assert len(missmatches) == 1 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert parser.graph.isomorphic(expected_graph) + assert str(parser.graph.identifier) == config["graph_identifier"] + assert parser.plain_metadata == metadata + assert sorted(list(parser.time_series.columns)) == sorted(columns) + + +@pytest.mark.parametrize("extension", ["xlsx", "json", "csv", dict]) +def test_parser_excel(extension) -> None: + from rdflib import Graph + + from data2rdf.models import PropertyMapping, QuantityMapping + from data2rdf.parsers import ExcelParser + from data2rdf.warnings import MappingMissmatchWarning + + if isinstance(extension, str): + mapping = os.path.join( + mapping_folder, f"tensile_test_mapping.{extension}" + ) + + else: + path = os.path.join(mapping_folder, "tensile_test_mapping.json") + with open(path, encoding="utf-8") as file: + mapping = json.load(file) + + with pytest.warns( + MappingMissmatchWarning, match="Concept with key `Bemerkungen`" + ) as warnings: + parser = ExcelParser(raw_data=raw_data, mapping=mapping, dropna=True) + + missmatches = [ + warning + for warning in warnings + if warning.category == MappingMissmatchWarning + ] + assert len(missmatches) == 1 + + assert len(parser.general_metadata) == 12 + for row in parser.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(parser.time_series_metadata) == 6 + for row in parser.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(parser.time_series.columns) == 6 + assert sorted(list(parser.time_series.columns)) == sorted(columns) + for name, column in parser.time_series.items(): + assert len(column) == 460 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert parser.graph.isomorphic(expected_graph) + + assert parser.plain_metadata == metadata + + +@pytest.mark.parametrize("input_kind", ["path", "content"]) +def test_parser_excel_inputs(input_kind) -> None: + from rdflib import Graph + + from data2rdf.models import PropertyMapping, QuantityMapping + from data2rdf.parsers import ExcelParser + from data2rdf.warnings import MappingMissmatchWarning + + if input_kind == "path": + input_obj = raw_data + elif input_kind == "content": + with open(raw_data, "rb") as file: + input_obj = file.read() + + with pytest.warns( + MappingMissmatchWarning, match="Concept with key `Bemerkungen`" + ) as warnings: + parser = ExcelParser( + raw_data=input_obj, + mapping=os.path.join(mapping_folder, "tensile_test_mapping.json"), + dropna=True, + ) + missmatches = [ + warning + for warning in warnings + if warning.category == MappingMissmatchWarning + ] + assert len(missmatches) == 1 + + assert len(parser.general_metadata) == 12 + for row in parser.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(parser.time_series_metadata) == 6 + for row in parser.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(parser.time_series.columns) == 6 + assert sorted(list(parser.time_series.columns)) == sorted(columns) + for name, column in parser.time_series.items(): + assert len(column) == 460 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert parser.graph.isomorphic(expected_graph) + + assert parser.plain_metadata == metadata diff --git a/tests/xls_pipeline_test/test_pipeline.py b/tests/xls_pipeline_test/test_pipeline.py new file mode 100644 index 00000000..db6dbf38 --- /dev/null +++ b/tests/xls_pipeline_test/test_pipeline.py @@ -0,0 +1,210 @@ +import json +import os + +import pytest + +test_folder = os.path.dirname(os.path.abspath(__file__)) +working_folder = os.path.join(test_folder, "input") + +output_folder = os.path.join(test_folder, "output") + +template = os.path.join( + working_folder, + "method-graph", + "tensile_test_method_v6.mod.ttl", +) +mapping_folder = os.path.join(working_folder, "mapping") +raw_data = os.path.join(working_folder, "data", "AFZ1-Fz-S1Q.xlsm") +expected = os.path.join(output_folder, "output_pipeline.ttl") + + +metadata = { + "ProjectNumber": "Projekt_1", + "TimeStamp": "2016-10-11 00:00:00", + "MachineData": "M_1", + "Material": "Werkstoff_1", + "SpecimenType": "Fz 10x20", + "Tester": "Fe", + "SampleIdentifier-2": "123456", + "OriginalGaugeLength": 15, + "SpecimenThickness": 1.5, + "SpecimenWidth": 9.5, + "TestingRate": 0.02, + "Temperature": 25, +} + +columns = [ + "TestTime", + "StandardForce", + "Extension", + "PercentageElongation", + "AbsoluteCrossheadTravel", + "WidthChange", +] + +normal_config = {"graph_identifier": "https://www.example.org"} +bad_config = {"graph_identifier": "https://www.example.org", "foorbar": 123} + + +@pytest.mark.parametrize("config", [normal_config, bad_config]) +def test_csv_pipeline_config(config) -> None: + from rdflib import Graph + + from data2rdf.warnings import MappingMissmatchWarning + + from data2rdf import ( # isort:skip + AnnotationPipeline, + Parser, + ) + + with pytest.warns( + MappingMissmatchWarning, match="Concept with key" + ) as warnings: + pipeline = AnnotationPipeline( + raw_data=raw_data, + mapping=os.path.join(mapping_folder, "tensile_test_mapping.json"), + parser=Parser.excel, + extra_triples=template, + parser_args={"dropna": True}, + config=config, + ) + + missmatches = [ + warning + for warning in warnings + if warning.category == MappingMissmatchWarning + ] + assert len(missmatches) == 1 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert pipeline.graph.isomorphic(expected_graph) + assert str(pipeline.graph.identifier) == config["graph_identifier"] + + assert pipeline.plain_metadata == metadata + assert sorted(list(pipeline.time_series.columns)) == sorted(columns) + + +@pytest.mark.parametrize("extension", ["xlsx", "json", "csv", dict]) +def test_excel_pipeline(extension) -> None: + from rdflib import Graph + + from data2rdf.warnings import MappingMissmatchWarning + + from data2rdf import ( # isort:skip + AnnotationPipeline, + Parser, + PropertyMapping, + QuantityMapping, + ) + + if isinstance(extension, str): + mapping = os.path.join( + mapping_folder, f"tensile_test_mapping.{extension}" + ) + + else: + path = os.path.join(mapping_folder, "tensile_test_mapping.json") + with open(path, encoding="utf-8") as file: + mapping = json.load(file) + + with pytest.warns( + MappingMissmatchWarning, match="Concept with key" + ) as warnings: + pipeline = AnnotationPipeline( + raw_data=raw_data, + mapping=mapping, + parser=Parser.excel, + extra_triples=template, + parser_args={"dropna": True}, + ) + + missmatches = [ + warning + for warning in warnings + if warning.category == MappingMissmatchWarning + ] + assert len(missmatches) == 1 + + assert len(pipeline.general_metadata) == 12 + for row in pipeline.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(pipeline.time_series_metadata) == 6 + for row in pipeline.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(pipeline.time_series.columns) == 6 + assert sorted(list(pipeline.time_series.columns)) == sorted(columns) + for name, column in pipeline.time_series.items(): + assert len(column) == 460 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert pipeline.graph.isomorphic(expected_graph) + + assert pipeline.plain_metadata == metadata + + +@pytest.mark.parametrize("input_kind", ["path", "content"]) +def test_excel_pipeline_inputs(input_kind) -> None: + from rdflib import Graph + + from data2rdf.warnings import MappingMissmatchWarning + + from data2rdf import ( # isort:skip + AnnotationPipeline, + Parser, + PropertyMapping, + QuantityMapping, + ) + + if input_kind == "path": + input_obj = raw_data + elif input_kind == "content": + with open(raw_data, "rb") as file: + input_obj = file.read() + + with pytest.warns( + MappingMissmatchWarning, match="Concept with key" + ) as warnings: + pipeline = AnnotationPipeline( + raw_data=input_obj, + mapping=os.path.join(mapping_folder, "tensile_test_mapping.json"), + parser=Parser.excel, + extra_triples=template, + parser_args={"dropna": True}, + ) + + missmatches = [ + warning + for warning in warnings + if warning.category == MappingMissmatchWarning + ] + assert len(missmatches) == 1 + + assert len(pipeline.general_metadata) == 12 + for row in pipeline.general_metadata: + assert isinstance(row, QuantityMapping) or isinstance( + row, PropertyMapping + ) + + assert len(pipeline.time_series_metadata) == 6 + for row in pipeline.time_series_metadata: + assert isinstance(row, QuantityMapping) + + assert len(pipeline.time_series.columns) == 6 + assert sorted(list(pipeline.time_series.columns)) == sorted(columns) + for name, column in pipeline.time_series.items(): + assert len(column) == 460 + + expected_graph = Graph() + expected_graph.parse(expected) + + assert pipeline.graph.isomorphic(expected_graph) + + assert pipeline.plain_metadata == metadata diff --git a/tests/xls_pipeline_test/test_utils.py b/tests/xls_pipeline_test/test_utils.py deleted file mode 100755 index 971fdcf8..00000000 --- a/tests/xls_pipeline_test/test_utils.py +++ /dev/null @@ -1,8 +0,0 @@ -import os - - -def check_file_identifier_in_folder(folder, identifier): - for file in os.listdir(folder): - if identifier in file: - return True - return False