a8de89e349ea4cfe94d443ac83c3a602

Use the Dataset Explorer to navigate the dataset

The dataset module provides objects for exploring, navigating, and loading CAD encoded datasets for machine learning applications. It consists of two primary components that work together to simplify data handling:

  1. DatasetExplorer - For exploring and querying dataset contents

  2. DatasetLoader - For loading and preparing datasets for machine learning training

These components are designed to work with the processed data from the cadaccess and cadencoder modules, as well as the outputs from the flow pipeline system. They provide high-level abstractions that allow users to focus on machine learning tasks rather than data handling complexities.

DatasetExplorer

The DatasetExplorer class (dataset_explorer.py) provides methods for exploring and querying datasets stored in copressed and optimized format (.dataset) with accompanying metadata (.infoset) in files. This class focuses on data discovery, filtering, and statistical analysis.

Key Methods

Data Discovery and Metadata

  • available_groups() -> set: Returns the set of available dataset groups (faces, edges, file, etc.)

  • get_descriptions(table_name: str, key_id: Optional[int] = None, use_wildchar: Optional[bool] = False) -> pd.DataFrame: Retrieves metadata descriptions (labels, face types, edge types, etc.)

  • get_parquet_info_by_code(file_id_code: int): Returns rows from the Parquet file for a specific file ID code

  • get_file_info_all() -> pd.DataFrame: Returns all file info from the Parquet metadata

Data Distribution Analysis

  • create_distribution(key: str, bins: int = 10, group: str = "faces") -> Dict[str, Any]: Computes histograms of data distributions using Dask for parallel processing

Data Filtering and Selection

  • get_file_list(group: str, where: Callable[[xr.Dataset], xr.DataArray]) -> List[str]: Returns file IDs matching a boolean filter condition

  • file_dataset(file_id_code: int, group: str) -> xr.Dataset: Returns a subset of the dataset for a specific file

  • build_membership_matrix(group: str, key: str, bins_or_categories: Union[int, List, np.ndarray], as_counts: bool = False) -> tuple[np.ndarray, np.ndarray, np.ndarray]: Builds a file-by-bin membership matrix for stratified splitting

  • decode_file_id_code(code: int) -> str: Converts an integer file ID code to the original string identifier

[1]:
import hoops_ai
import os

hoops_ai.set_license(hoops_ai.use_test_license())
ℹ️ Using TEST LICENSE (expires February 8th, 2026 - 9 days remaining)
   For production use, obtain your own license from Tech Soft 3D
HOOPS AI version :  1.0.0-b2dev12

======================================================================
✓ HOOPS AI License: Valid (TEST LICENSE)
======================================================================
[2]:
from hoops_ai.dataset import DatasetExplorer
import pathlib
# Define paths
flow_name = "ETL_Fabwave_training"

flow_root_dir = pathlib.Path.cwd().parent.joinpath("packages", "flows", flow_name)
print(flow_root_dir)

parquet_file_path        = str(flow_root_dir.joinpath(f"{flow_name}.infoset"))
merged_store_path     = str(flow_root_dir.joinpath(f"{flow_name}.dataset"))
parquet_file_attribs  = str(flow_root_dir.joinpath(f"{flow_name}.attribset"))


explorer = DatasetExplorer(merged_store_path=merged_store_path, parquet_file_path=parquet_file_path, parquet_file_attribs=parquet_file_attribs)
explorer.print_table_of_contents()
C:\Users\LuisSalazar\Documents\MAIN\MLProject\repo\HOOPS-AI-tutorials\packages\flows\ETL_Fabwave_training
[DatasetExplorer] Default local cluster started: <Client: 'tcp://127.0.0.1:64247' processes=1 threads=16, memory=7.45 GiB>

--- Dataset Table of Contents ---

LABELS_GROUP:
  FILE_ID_CODE_LABELS_DATA: Shape: (4546,), Dims: ('Labels_part_label_dim_0',), Size: 4546
  PART_LABEL_DATA: Shape: (4546,), Dims: ('Labels_part_label_dim_0',), Size: 4546

EDGES_GROUP:
  EDGE_CONVEXITIES_DATA: Shape: (337065,), Dims: ('edge',), Size: 337065
  EDGE_DIHEDRAL_ANGLES_DATA: Shape: (337065,), Dims: ('edge',), Size: 337065
  EDGE_INDICES_DATA: Shape: (337065,), Dims: ('edge',), Size: 337065
  EDGE_LENGTHS_DATA: Shape: (337065,), Dims: ('edge',), Size: 337065
  EDGE_TYPES_DATA: Shape: (337065,), Dims: ('edge',), Size: 337065
  EDGE_U_GRIDS_DATA: Shape: (337065, 10, 6), Dims: ('edge', 'u', 'component'), Size: 20223900
  FILE_ID_CODE_EDGES_DATA: Shape: (337065,), Dims: ('edge',), Size: 337065

FACES_GROUP:
  FACE_AREAS_DATA: Shape: (130923,), Dims: ('face',), Size: 130923
  FACE_DISCRETIZATION_DATA: Shape: (130923, 100, 7), Dims: ('face', 'sample', 'component'), Size: 91646100
  FACE_INDICES_DATA: Shape: (130923,), Dims: ('face',), Size: 130923
  FACE_LOOPS_DATA: Shape: (130923,), Dims: ('face',), Size: 130923
  FACE_TYPES_DATA: Shape: (130923,), Dims: ('face',), Size: 130923
  FILE_ID_CODE_FACES_DATA: Shape: (130923,), Dims: ('face',), Size: 130923

GRAPH_GROUP:
  EDGES_DESTINATION_DATA: Shape: (337065,), Dims: ('edge',), Size: 337065
  EDGES_SOURCE_DATA: Shape: (337065,), Dims: ('edge',), Size: 337065
  FILE_ID_CODE_GRAPH_DATA: Shape: (337065,), Dims: ('edge',), Size: 337065
  NUM_NODES_DATA: Shape: (337065,), Dims: ('edge',), Size: 337065
==================================
Columns in file_info:
                                  name    id                             description                        stream_cache_png                         stream_cache_3d      subset table_name
0     000757c971d4af379cff2bf219566f76     0  ...25a-d5c6-4a99-a7f1-efc5c122e442.stp  ...00757c971d4af379cff2bf219566f76.png  ...00757c971d4af379cff2bf219566f76.scs        test  file_info
1     000d2096f1b75775aee0cca3869062ac     1  ...376-4e32-4a62-8636-833a596c3a24.stp  ...00d2096f1b75775aee0cca3869062ac.png  ...00d2096f1b75775aee0cca3869062ac.scs        test  file_info
2     0018d103885051d4463bfbdf97642644     2  ...8a0-14fc-4bcc-94f5-7e206c7ab2eb.stp  ...018d103885051d4463bfbdf97642644.png  ...018d103885051d4463bfbdf97642644.scs        test  file_info
3     001ec9bc5e47900ff95873b20a8cf97e     3  ...s\STEP\sshettigarsleevewasher30.stp  ...01ec9bc5e47900ff95873b20a8cf97e.png  ...01ec9bc5e47900ff95873b20a8cf97e.scs        test  file_info
4     002b9953b2669f0dbf7e95a97d47e759     4  ...b39-9f03-490e-b962-55ec3761f456.stp  ...02b9953b2669f0dbf7e95a97d47e759.png  ...02b9953b2669f0dbf7e95a97d47e759.scs       train  file_info
5     0043ebf2efcc3849c5b61c45f4190369     5  ...aae-e8c6-40df-a29b-5770a2d5a73c.stp  ...043ebf2efcc3849c5b61c45f4190369.png  ...043ebf2efcc3849c5b61c45f4190369.scs       train  file_info
6     0045b381a0be8fbc8d49688a6479a076     6  ...ef6-87ef-45b6-8c9c-0414903668e3.stp  ...045b381a0be8fbc8d49688a6479a076.png  ...045b381a0be8fbc8d49688a6479a076.scs       train  file_info
7     005479bbb0a5df52f6d9cc2ad0f8253c     7  ...s\STEP\sshettigarsleevewasher44.stp  ...05479bbb0a5df52f6d9cc2ad0f8253c.png  ...05479bbb0a5df52f6d9cc2ad0f8253c.scs       train  file_info
8     0054a7cfbadf02dce98531f4dd7508a5     8  ...800-c9bd-4dd6-b425-30bf848fcd41.stp  ...054a7cfbadf02dce98531f4dd7508a5.png  ...054a7cfbadf02dce98531f4dd7508a5.scs       train  file_info
9     00a5e9cd26129c2757fe6a08407df0f9     9  ...dbe-97b8-46d4-b550-aa40dab589cd.stp  ...0a5e9cd26129c2757fe6a08407df0f9.png  ...0a5e9cd26129c2757fe6a08407df0f9.scs       train  file_info
...                                ...   ...                                     ...                                     ...                                     ...         ...        ...
4536  ff3d884bd5a5e96e491a4ea638d583e0  4536  ...5ae-1468-46f5-bce0-c959e3cbf870.stp  ...f3d884bd5a5e96e491a4ea638d583e0.png  ...f3d884bd5a5e96e491a4ea638d583e0.scs       train  file_info
4537  ff3fcef336d538c95a1f04ccf01339f1  4537  ...02-e51d-43d8-bd4b-171c3589485b.step  ...f3fcef336d538c95a1f04ccf01339f1.png  ...f3fcef336d538c95a1f04ccf01339f1.scs       train  file_info
4538  ff69cdbe147e5b2b231a48c668268d3b  4538  ...c3a-a37f-416c-8ddb-e0683a1a8926.stp  ...f69cdbe147e5b2b231a48c668268d3b.png  ...f69cdbe147e5b2b231a48c668268d3b.scs  validation  file_info
4539  ff860352bbd8c7af1b596835829288c1  4539  ...543-8b94-4dee-a8e5-fdc362a80359.stp  ...f860352bbd8c7af1b596835829288c1.png  ...f860352bbd8c7af1b596835829288c1.scs       train  file_info
4540  ff94b5f50c009fcc19e231c8dc4fef18  4540  ...lasses\Brackets\STEP\bracket217.stp  ...f94b5f50c009fcc19e231c8dc4fef18.png  ...f94b5f50c009fcc19e231c8dc4fef18.scs  validation  file_info
4541  ff96da3be8fa50b0c3516392e7c57770  4541  ...cdb-e812-42b6-a29f-5973b8b41042.stp  ...f96da3be8fa50b0c3516392e7c57770.png  ...f96da3be8fa50b0c3516392e7c57770.scs       train  file_info
4542  ffb399838ecd3d81f1e05edd13002887  4542  ...106-6aba-43ff-b412-4b97010388b2.stp  ...fb399838ecd3d81f1e05edd13002887.png  ...fb399838ecd3d81f1e05edd13002887.scs       train  file_info
4543  ffc34e21ca8c3b0aefc40057489b1db0  4543  ...30-ad62-4695-9e60-317db1586e81.step  ...fc34e21ca8c3b0aefc40057489b1db0.png  ...fc34e21ca8c3b0aefc40057489b1db0.scs        test  file_info
4544  ffd6cacefde868ff77c8057d55add378  4544  ...83d-2422-433d-88d1-0193c2c1471c.stp  ...fd6cacefde868ff77c8057d55add378.png  ...fd6cacefde868ff77c8057d55add378.scs  validation  file_info
4545  ffd8d4beab2e24522adc38308def99ec  4545  ...200-0d37-4719-b72d-b58833bef79a.stp  ...fd8d4beab2e24522adc38308def99ec.png  ...fd8d4beab2e24522adc38308def99ec.scs       train  file_info
[3]:
explorer.get_file_info_all()
[3]:
name id description stream_cache_png stream_cache_3d subset table_name
0 000757c971d4af379cff2bf219566f76 0 C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... test file_info
1 000d2096f1b75775aee0cca3869062ac 1 C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... test file_info
2 0018d103885051d4463bfbdf97642644 2 C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... test file_info
3 001ec9bc5e47900ff95873b20a8cf97e 3 C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... test file_info
4 002b9953b2669f0dbf7e95a97d47e759 4 C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... train file_info
... ... ... ... ... ... ... ...
4541 ff96da3be8fa50b0c3516392e7c57770 4541 C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... train file_info
4542 ffb399838ecd3d81f1e05edd13002887 4542 C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... train file_info
4543 ffc34e21ca8c3b0aefc40057489b1db0 4543 C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... test file_info
4544 ffd6cacefde868ff77c8057d55add378 4544 C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... validation file_info
4545 ffd8d4beab2e24522adc38308def99ec 4545 C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... C:\Users\LuisSalazar\Documents\MAIN\MLProject\... train file_info

4546 rows × 7 columns

[4]:
groups = explorer.available_groups()
print(groups)
{'edges', 'graph', 'Labels', 'faces'}
[5]:
face_type_description = explorer.get_descriptions("face_types")
print(type(face_type_description), face_type_description)
<class 'pandas.core.frame.DataFrame'>       id      name description  table_name
13682  0     Plane     not set  face_types
13683  1  Cylinder     not set  face_types
13684  4     Torus     not set  face_types
13685  2      Cone     not set  face_types
13686  5     Nurbs     not set  face_types
13687  3    Sphere     not set  face_types
[6]:
import time
from scripts import helper_tutorials
start_time = time.time()
dist = explorer.create_distribution(key="num_nodes", bins=12, group="graph")
print(f"Face labels distribution created in {(time.time() - start_time):.2f} seconds\n")
helper_tutorials.print_distribution_info(dist, title="Brep facecount Distribution")
Face labels distribution created in 2.20 seconds

../../../_images/tutorials_hoops_ai_tutorials_notebooks_4a_5k_dataserving_7_1.png
[7]:
largest_files = dist['file_id_codes_in_bins'][9]

Dataset Visualization with DatasetViewer

The DatasetViewer is a powerful visualization tool that bridges dataset queries and visual analysis. It enables you to quickly visualize query results in two ways:

  1. Image Grids: Generate collages of PNG previews for rapid visual scanning

  2. Interactive 3D Views: Open inline 3D viewers for detailed model inspection

[8]:
# Import the DatasetViewer from the insights module
from hoops_ai.insights import DatasetViewer

dataset_viewer = DatasetViewer.from_explorer(explorer)
[9]:
# condition
brepcount_is_large = lambda ds: ds['num_nodes'] > 200
filelist = explorer.get_file_list(group="graph", where=brepcount_is_large)
print(len(filelist))
107
[10]:
fig = dataset_viewer.show_preview_as_image(filelist[80:100])

../../../_images/tutorials_hoops_ai_tutorials_notebooks_4a_5k_dataserving_12_0.png
[11]:
import time
start_time = time.time()
face_dist = explorer.create_distribution(key="part_label", bins=None, group="Labels")
print(f"Face labels distribution created in {(time.time() - start_time):.2f} seconds\n")
helper_tutorials.print_distribution_info(face_dist, title="Labels")

Face labels distribution created in 0.37 seconds

../../../_images/tutorials_hoops_ai_tutorials_notebooks_4a_5k_dataserving_13_1.png
[12]:
# condition
label_is_pipefittings = lambda ds: ds['part_label'] == 15
filelist = explorer.get_file_list(group="Labels", where=label_is_pipefittings)
print(len(filelist))
37
[13]:
fig = dataset_viewer.show_preview_as_image(filelist[0:36])
../../../_images/tutorials_hoops_ai_tutorials_notebooks_4a_5k_dataserving_15_0.png
[14]:
# Get and print meta data information
file_id = 33

df_info = explorer.get_parquet_info_by_code(file_id)
print(type(df_info), df_info)
<class 'pandas.core.frame.DataFrame'>                                name  id  \
0  0230531bd60bc2d4e9cd1a1ee5b67020  33

                                         description  \
0  C:\Users\LuisSalazar\Documents\MAIN\MLProject\...

                                    stream_cache_png  \
0  C:\Users\LuisSalazar\Documents\MAIN\MLProject\...

                                     stream_cache_3d subset table_name
0  C:\Users\LuisSalazar\Documents\MAIN\MLProject\...  train  file_info
[ ]:

[15]:
print(explorer.get_descriptions("part_label_description"))
[DatasetExplorer] No records found for part_label_description.
Empty DataFrame
Columns: []
Index: []
[16]:
start_time = time.time()
dist = explorer.create_distribution(key="num_nodes", bins=12, group="graph")
print(f"Face labels distribution created in {(time.time() - start_time):.2f} seconds\n")
helper_tutorials.print_distribution_info(dist, title="Brep facecount Distribution")
Face labels distribution created in 0.43 seconds

../../../_images/tutorials_hoops_ai_tutorials_notebooks_4a_5k_dataserving_19_1.png

Gather files that fulfilled a given condition. Filter

[ ]:

[17]:
start_time = time.time()

# condition
label_is_pipefittings = lambda ds: ds['part_label'] == 15

filelist = explorer.get_file_list(group="Labels", where=label_is_pipefittings)
print(f"Filtering completed in {(time.time() - start_time):.2f} seconds")
print(f"Found {len(filelist)} files with file_labels == 15 (Pipe Fittings)\n")
print(filelist)
Filtering completed in 0.09 seconds
Found 37 files with file_labels == 15 (Pipe Fittings)

[  77  173  208  357  476  631  691  821 1230 1365 1534 1605 1611 1776
 1978 2206 2310 2353 2676 2714 2747 2866 3057 3138 3196 3213 3282 3300
 3359 3610 3873 3877 3932 4062 4065 4225 4241]

Query data for single file

[20]:
def demo_query_single_file(explorer, file_id):
    """Show how to access and query dataset details for a single file."""
    print("=== Single File Dataset Access ===")
    import time
    # Get and print parquet info
    df_info = explorer.get_parquet_info_by_code(file_id)
    print("Files info:")
    for column in df_info.columns:
        print(f"Column: {column}")
        for value in df_info[column]:
            print(f"  {value}")
    print()

    # Access various dataset groups
    groups = ["faces", "Labels", "edges", "graph"]
    datasets = {grp: explorer.file_dataset(file_id_code=file_id, group=grp) for grp in groups}

    print(f"Datasets for file ID '{file_id}':")
    for grp, ds in datasets.items():
        for name, da in ds.data_vars.items():
            print(f"  [{grp}] VARIABLE: {name}, Shape: {da.shape}, Dims: {da.dims}, Size: {da.size}")
    print()

    # Query uv grids data for a specific face
    start_time = time.time()
    uv_grid_data = datasets["faces"]["face_discretization"].isel(face=2)
    print("uv_grids data for face index 2:")
    np_uvgrid = uv_grid_data.data.compute()
    print(f"Query took {(time.time() - start_time):.2f} seconds\n")
    print(np_uvgrid)
[21]:
demo_query_single_file(explorer,file_id=4500)
=== Single File Dataset Access ===
Files info:
Column: name
  fc60de484998e424494caafa0e286fc3
Column: id
  4500
Column: description
  C:\Users\LuisSalazar\Documents\MAIN\MLProject\repo\HOOPS-AI-tutorials\packages\cadfiles\fabwave\CAD25-45_TOTAL1000\Boxes\STEP\836a504e-ac03-4248-affd-de81643d4191.stp
Column: stream_cache_png
  C:\Users\LuisSalazar\Documents\MAIN\MLProject\repo\HOOPS-AI-tutorials\notebooks\out\flows\ETL_Fabwave_training\stream_cache\fc60de484998e424494caafa0e286fc3.png
Column: stream_cache_3d
  C:\Users\LuisSalazar\Documents\MAIN\MLProject\repo\HOOPS-AI-tutorials\notebooks\out\flows\ETL_Fabwave_training\stream_cache\fc60de484998e424494caafa0e286fc3.scs
Column: subset
  test
Column: table_name
  file_info

Datasets for file ID '4500':
  [faces] VARIABLE: face_areas, Shape: (11,), Dims: ('face',), Size: 11
  [faces] VARIABLE: face_discretization, Shape: (11, 100, 7), Dims: ('face', 'sample', 'component'), Size: 7700
  [faces] VARIABLE: face_indices, Shape: (11,), Dims: ('face',), Size: 11
  [faces] VARIABLE: face_loops, Shape: (11,), Dims: ('face',), Size: 11
  [faces] VARIABLE: face_types, Shape: (11,), Dims: ('face',), Size: 11
  [faces] VARIABLE: file_id_code_faces, Shape: (11,), Dims: ('face',), Size: 11
  [Labels] VARIABLE: file_id_code_Labels, Shape: (1,), Dims: ('Labels_part_label_dim_0',), Size: 1
  [Labels] VARIABLE: part_label, Shape: (1,), Dims: ('Labels_part_label_dim_0',), Size: 1
  [edges] VARIABLE: edge_convexities, Shape: (24,), Dims: ('edge',), Size: 24
  [edges] VARIABLE: edge_dihedral_angles, Shape: (24,), Dims: ('edge',), Size: 24
  [edges] VARIABLE: edge_indices, Shape: (24,), Dims: ('edge',), Size: 24
  [edges] VARIABLE: edge_lengths, Shape: (24,), Dims: ('edge',), Size: 24
  [edges] VARIABLE: edge_types, Shape: (24,), Dims: ('edge',), Size: 24
  [edges] VARIABLE: edge_u_grids, Shape: (24, 10, 6), Dims: ('edge', 'u', 'component'), Size: 1440
  [edges] VARIABLE: file_id_code_edges, Shape: (24,), Dims: ('edge',), Size: 24
  [graph] VARIABLE: edges_destination, Shape: (24,), Dims: ('edge',), Size: 24
  [graph] VARIABLE: edges_source, Shape: (24,), Dims: ('edge',), Size: 24
  [graph] VARIABLE: file_id_code_graph, Shape: (24,), Dims: ('edge',), Size: 24
  [graph] VARIABLE: num_nodes, Shape: (24,), Dims: ('edge',), Size: 24

uv_grids data for face index 2:
Query took 0.81 seconds

[[ 0.2125  0.2125  0.2125  1.      0.      0.      0.    ]
 [ 0.2125  0.2125  1.4125  1.      0.      0.      0.    ]
 [ 0.2125  0.2125  2.6125  1.      0.      0.      0.    ]
 [ 0.2125  0.2125  3.8125  1.      0.      0.      0.    ]
 [ 0.2125  0.2125  5.0125  1.      0.      0.      0.    ]
 [ 0.2125  0.2125  6.2125  1.      0.      0.      0.    ]
 [ 0.2125  0.2125  7.4125  1.      0.      0.      0.    ]
 [ 0.2125  0.2125  8.6125  1.      0.      0.      0.    ]
 [ 0.2125  0.2125  9.8125  1.      0.      0.      0.    ]
 [ 0.2125  0.2125 11.0125  1.      0.      0.      0.    ]
 [ 0.2125  1.6125  0.2125  1.      0.      0.      1.    ]
 [ 0.2125  1.6125  1.4125  1.      0.      0.      1.    ]
 [ 0.2125  1.6125  2.6125  1.      0.      0.      1.    ]
 [ 0.2125  1.6125  3.8125  1.      0.      0.      1.    ]
 [ 0.2125  1.6125  5.0125  1.      0.      0.      1.    ]
 [ 0.2125  1.6125  6.2125  1.      0.      0.      1.    ]
 [ 0.2125  1.6125  7.4125  1.      0.      0.      1.    ]
 [ 0.2125  1.6125  8.6125  1.      0.      0.      1.    ]
 [ 0.2125  1.6125  9.8125  1.      0.      0.      1.    ]
 [ 0.2125  1.6125 11.0125  1.      0.      0.      1.    ]
 [ 0.2125  3.0125  0.2125  1.      0.      0.      1.    ]
 [ 0.2125  3.0125  1.4125  1.      0.      0.      1.    ]
 [ 0.2125  3.0125  2.6125  1.      0.      0.      1.    ]
 [ 0.2125  3.0125  3.8125  1.      0.      0.      1.    ]
 [ 0.2125  3.0125  5.0125  1.      0.      0.      1.    ]
 [ 0.2125  3.0125  6.2125  1.      0.      0.      1.    ]
 [ 0.2125  3.0125  7.4125  1.      0.      0.      1.    ]
 [ 0.2125  3.0125  8.6125  1.      0.      0.      1.    ]
 [ 0.2125  3.0125  9.8125  1.      0.      0.      1.    ]
 [ 0.2125  3.0125 11.0125  1.      0.      0.      1.    ]
 [ 0.2125  4.4125  0.2125  1.      0.      0.      1.    ]
 [ 0.2125  4.4125  1.4125  1.      0.      0.      1.    ]
 [ 0.2125  4.4125  2.6125  1.      0.      0.      1.    ]
 [ 0.2125  4.4125  3.8125  1.      0.      0.      1.    ]
 [ 0.2125  4.4125  5.0125  1.      0.      0.      1.    ]
 [ 0.2125  4.4125  6.2125  1.      0.      0.      1.    ]
 [ 0.2125  4.4125  7.4125  1.      0.      0.      1.    ]
 [ 0.2125  4.4125  8.6125  1.      0.      0.      1.    ]
 [ 0.2125  4.4125  9.8125  1.      0.      0.      1.    ]
 [ 0.2125  4.4125 11.0125  1.      0.      0.      1.    ]
 [ 0.2125  5.8125  0.2125  1.      0.      0.      1.    ]
 [ 0.2125  5.8125  1.4125  1.      0.      0.      1.    ]
 [ 0.2125  5.8125  2.6125  1.      0.      0.      1.    ]
 [ 0.2125  5.8125  3.8125  1.      0.      0.      1.    ]
 [ 0.2125  5.8125  5.0125  1.      0.      0.      1.    ]
 [ 0.2125  5.8125  6.2125  1.      0.      0.      1.    ]
 [ 0.2125  5.8125  7.4125  1.      0.      0.      1.    ]
 [ 0.2125  5.8125  8.6125  1.      0.      0.      1.    ]
 [ 0.2125  5.8125  9.8125  1.      0.      0.      1.    ]
 [ 0.2125  5.8125 11.0125  1.      0.      0.      1.    ]
 [ 0.2125  7.2125  0.2125  1.      0.      0.      1.    ]
 [ 0.2125  7.2125  1.4125  1.      0.      0.      1.    ]
 [ 0.2125  7.2125  2.6125  1.      0.      0.      1.    ]
 [ 0.2125  7.2125  3.8125  1.      0.      0.      1.    ]
 [ 0.2125  7.2125  5.0125  1.      0.      0.      1.    ]
 [ 0.2125  7.2125  6.2125  1.      0.      0.      1.    ]
 [ 0.2125  7.2125  7.4125  1.      0.      0.      1.    ]
 [ 0.2125  7.2125  8.6125  1.      0.      0.      1.    ]
 [ 0.2125  7.2125  9.8125  1.      0.      0.      1.    ]
 [ 0.2125  7.2125 11.0125  1.      0.      0.      1.    ]
 [ 0.2125  8.6125  0.2125  1.      0.      0.      1.    ]
 [ 0.2125  8.6125  1.4125  1.      0.      0.      1.    ]
 [ 0.2125  8.6125  2.6125  1.      0.      0.      1.    ]
 [ 0.2125  8.6125  3.8125  1.      0.      0.      1.    ]
 [ 0.2125  8.6125  5.0125  1.      0.      0.      1.    ]
 [ 0.2125  8.6125  6.2125  1.      0.      0.      1.    ]
 [ 0.2125  8.6125  7.4125  1.      0.      0.      1.    ]
 [ 0.2125  8.6125  8.6125  1.      0.      0.      1.    ]
 [ 0.2125  8.6125  9.8125  1.      0.      0.      1.    ]
 [ 0.2125  8.6125 11.0125  1.      0.      0.      1.    ]
 [ 0.2125 10.0125  0.2125  1.      0.      0.      1.    ]
 [ 0.2125 10.0125  1.4125  1.      0.      0.      1.    ]
 [ 0.2125 10.0125  2.6125  1.      0.      0.      1.    ]
 [ 0.2125 10.0125  3.8125  1.      0.      0.      1.    ]
 [ 0.2125 10.0125  5.0125  1.      0.      0.      1.    ]
 [ 0.2125 10.0125  6.2125  1.      0.      0.      1.    ]
 [ 0.2125 10.0125  7.4125  1.      0.      0.      1.    ]
 [ 0.2125 10.0125  8.6125  1.      0.      0.      1.    ]
 [ 0.2125 10.0125  9.8125  1.      0.      0.      1.    ]
 [ 0.2125 10.0125 11.0125  1.      0.      0.      1.    ]
 [ 0.2125 11.4125  0.2125  1.      0.      0.      1.    ]
 [ 0.2125 11.4125  1.4125  1.      0.      0.      1.    ]
 [ 0.2125 11.4125  2.6125  1.      0.      0.      1.    ]
 [ 0.2125 11.4125  3.8125  1.      0.      0.      1.    ]
 [ 0.2125 11.4125  5.0125  1.      0.      0.      1.    ]
 [ 0.2125 11.4125  6.2125  1.      0.      0.      1.    ]
 [ 0.2125 11.4125  7.4125  1.      0.      0.      1.    ]
 [ 0.2125 11.4125  8.6125  1.      0.      0.      1.    ]
 [ 0.2125 11.4125  9.8125  1.      0.      0.      1.    ]
 [ 0.2125 11.4125 11.0125  1.      0.      0.      1.    ]
 [ 0.2125 12.8125  0.2125  1.      0.      0.      1.    ]
 [ 0.2125 12.8125  1.4125  1.      0.      0.      1.    ]
 [ 0.2125 12.8125  2.6125  1.      0.      0.      1.    ]
 [ 0.2125 12.8125  3.8125  1.      0.      0.      1.    ]
 [ 0.2125 12.8125  5.0125  1.      0.      0.      1.    ]
 [ 0.2125 12.8125  6.2125  1.      0.      0.      1.    ]
 [ 0.2125 12.8125  7.4125  1.      0.      0.      1.    ]
 [ 0.2125 12.8125  8.6125  1.      0.      0.      1.    ]
 [ 0.2125 12.8125  9.8125  1.      0.      0.      1.    ]
 [ 0.2125 12.8125 11.0125  1.      0.      0.      1.    ]]
[ ]: