<｜begin▁of▁sentence｜>### Instruction:
Imagine we're examining a system within a food processing facility, where clean stations are interconnected in a manner that could be examined through a network. We have sensor data that offers us a snapshot of which stations are directly connected in a format that we've arranged into a grid akin to a contact matrix. This record, coded within a NumPy array, looks like this: `np.array([[0, 1, 1], [1, 0, 0], [1, 0, 0]])`. Each "1" denotes an active link between two stations, while a "0" signifies no direct connection.

As part of our analysis into the integrity and compliance of this facility, suppose we wanted to convert this matrix into a recognizable network structure. To achieve this, we'd employ the NetworkX library's capability, particularly the 'from_numpy_array' function, to translate this array.

Could you demonstrate how this procedure would unfold? Specifically, I'm interested in constructing a new graph that encapsulates the connections represented in our NumPy array. Following the creation of this graph, it would be of great help to systematically list out the stations (the nodes) and the direct connections (the edges), including any relevant details embedded within their profiles (attributes)—a fundamental step to ensure we have a complete visualization of the facility's operation network.
### Response:
import networkx as nx
import numpy as np

# Define a 2D NumPy array representing an adjacency matrix
A = np.array([[0, 1, 1], [1, 0, 0], [1, 0, 0]])

# Create a graph from the adjacency matrix
G = nx.from_numpy_array(A)

# Get information about the graph
nodes = G.nodes(data=True)
edges = G.edges(data=True)

# Print out the nodes and edges with their attributes
print('Nodes:', list(nodes))
print('Edges:', list(edges))
<|EOT|>
