All the things
import logging
import textwrap
import pandas as pd
import plotly.express as px
import report_creator as rc
logging.basicConfig(level=logging.DEBUG)
if __name__ == "__main__":
# set up of example text, plots and dataframes
df1 = pd.DataFrame(
{
"Name": ["Alice", "Bob", "Eva"],
"Age": [25, 30, 35],
"City": ["New York", "Los Angeles", "Chicago"],
"Salary": [70000, 85000, 95000],
}
)
df2 = px.data.stocks()
with open(__file__) as f:
example_python = f.read()
with open("examples/example.txt") as f:
example_text = f.read()
with open("README.md") as f:
example_md = f.read()
# begin the use of the report_creator package
with rc.ReportCreator(
title="Kitchen Sink",
description="**All** the *things*",
footer=f"Made with [report_creator](https://github.com/darenr/report_creator) (v{rc.__version__}), `pip install report-creator` :cat_face:",
flat_look=True,
) as report:
view = rc.Block(
rc.Collapse(
rc.Code(example_python, label="kitchen_sink.py"),
label="Code (kitchen_sink.py) to create this report",
),
rc.Group(
rc.Metric(
heading="Hitchhiker's Guide to the Galaxy",
value="Don't Panic",
),
rc.Metric(
heading="Gross profit margin",
value=65,
unit="%",
label="A commonly tracked metric by finance departments that can be found on an income statement.",
),
rc.Metric(
heading="Accuracy",
value=0.95,
label="Number of correct predictions by Total number of predictions",
),
rc.Metric(
heading="Recurring revenue",
value="$10.7B",
label="Recurring revenue is the portion of a company's revenue that is predictable and stable.",
),
rc.Metric(
heading="Capacity utilization",
value=42,
unit="%",
label="A popular productivity metric that measures the ratio of actual output to potential output.",
),
rc.Metric(
heading="Asset turnover ratio",
value=3.3,
label="Asset turnover ratio is a financial metric that shows how efficiently a company generates revenue from its assets.",
),
label="Grouped Metrics",
),
rc.Group(
rc.Metric(
heading="System Processor Load",
value=72.5,
unit="%",
label="Current CPU utilization across all cores",
gauge={"min_value": 0, "max_value": 100, "color": "red"},
),
rc.Metric(
heading="Memory Usage",
value=4.2,
unit="GB",
label="Available physical memory",
gauge={"min_value": 0, "max_value": 16, "color": "green"},
),
),
rc.Separator(),
rc.Group(
rc.MetricGroup(
df1,
heading="Name",
value="Age",
label="Metrics Group from DataFrame",
),
rc.Table(df1, label="Table of DataFrame"),
),
rc.Group(
rc.EventMetric(
pd.read_csv("examples/example-public-logs.csv"),
condition="status == 200",
date="time",
color="green",
frequency="B",
),
rc.EventMetric(
pd.read_csv("examples/example-public-logs.csv"),
condition="status == 404",
date="time",
frequency="B",
heading="Not Found (404) Requests",
),
label="Log File Metrics",
),
rc.Group(
rc.Timeline(
pd.DataFrame({
"task": ["Design", "Development", "Testing", "Deploy"],
"start": pd.to_datetime(["2024-01-01", "2024-01-15", "2024-02-01", "2024-02-15"]),
"finish": pd.to_datetime(["2024-01-14", "2024-01-31", "2024-02-14", "2024-02-28"]),
"team": ["Engineering", "Engineering", "QA", "DevOps"],
}),
task="task",
start="start",
finish="finish",
dimension="team",
label="Q1 Project Plan",
), label="Timeline"),
rc.Accordion(
blocks=[
rc.Markdown(
"""
> Love all, trust a few, do wrong to none.
> Moderate lamentation is the right of the dead, excessive grief the enemy to the living.
""",
label="All's Well That Ends Well",
),
rc.Markdown(
"""
>Something is rotten in the state of Denmark.
> There are more things in heaven and earth, Horatio,
> Than are dreamt of in our philosophy.
> To be, or not to be, that is the question.
> How all occasions do inform against me, and spur my dull revenge.
""",
label="Hamlet",
),
rc.Markdown(
"""
> But, soft, what light through yonder window breaks?
> It is the east, and Juliet is the sun.
> O happy dagger,
> This is thy sheath: there rust, and let me die.
> For never was a story of more woe
> Than this of Juliet and her Romeo.
""",
label="Romeo and Juliet",
),
],
label="Accordion",
),
rc.Text(example_text,
label="Pale Blue Dot (1994) by Carl Sagan",
sublabel="For all the software engineers that have been inspired by Carl Sagan's words to pursue a career in computer science and engineering, many of which I consider to be friends and colleagues. This is for you.",
),
rc.Group(
rc.Java(
textwrap.dedent("""
public class HelloWorld {
public static void main(String[] args) {
// Print "Hello, World!" to the console
System.out.println("Hello, World!");
}
}
"""),
label="Java",
),
rc.Prolog(
textwrap.dedent("""
% Define a rule to display the message
hello_world :-
write('Hello, World!'), nl.
% To run, consult the file and call the rule:
% ?- hello_world.
"""),
label="Prolog",
),
),
rc.Group(
rc.Sql(
textwrap.dedent("""
-- Example SQL
SELECT
ename,
DECODE(deptno,
10, 'Accounting',
20, 'Research',
30, 'Sales',
40, 'Operations',
) AS department_name
FROM
scott.emp;
"""),
label="SQL",
),
rc.Json(
textwrap.dedent("""
{
"name": "Alice",
"age": 25,
"city": "Wonderland",
"hobbies": ["reading", "adventures", "tea parties", "cats"]
}
"""),
label="JSON",
),
),
rc.Separator(),
rc.Group(
rc.Info("This is an **info** callout! You can use standard *Markdown* here too.", label="Info Callout"),
rc.Warning("This is a **warning** callout! Beware of dragons and failing pipelines.", label="Warning Callout"),
rc.Error("This is an **error** callout! Something went terribly wrong.", label="Error Callout"),
),
rc.Separator(),
rc.Markdown(example_md, label="README.md"),
rc.Widget(df1.plot.bar(x="Name", y="Age"), label="Matplotlib Figure - People"),
rc.Widget(
px.line(df2, x="date", y=["GOOG", "AAPL", "NFLX", "MSFT"]),
label="rc.Widget() of a Plotly Figure",
),
rc.Separator(),
rc.Group(
rc.Pie(
px.data.gapminder().query("year == 2002").query("continent == 'Europe'"),
values="pop",
names="country",
label="2002 Population of European continent",
),
rc.Pie(
px.data.gapminder().query("year == 2002").query("continent == 'Americas'"),
values="pop",
names="country",
label="2002 Population of American continent",
),
),
rc.Group(
rc.Histogram(
px.data.tips(),
x="total_bill",
dimension="sex",
label="Total Bill by Sex",
),
rc.Box(
px.data.tips(),
y="total_bill",
dimension="day",
label="Total Bill by Day of Week",
),
),
rc.Select(
blocks=[
rc.Bar(
px.data.medals_long(),
x="nation",
y="count",
dimension="medal",
label="Olympic Medals",
),
rc.Scatter(
df=px.data.iris(),
x="sepal_width",
y="sepal_length",
dimension="species",
marginal="histogram",
label="Iris Scatter Plot with Marginal Histograms",
),
],
label="Tabbed Plots",
),
rc.Line(
px.data.stocks(),
x="date",
y=["GOOG", "AAPL", "NFLX", "MSFT"],
label="Stock Plot",
),
rc.Separator(),
rc.Html(
"<span>"
+ "".join(
[
f"""
<svg height="100" width="100">
<circle cx="50" cy="50" r="40" stroke="lightgrey" stroke-width="0.5" fill="{color}" />
</svg>
"""
for color in rc.report_creator_colors
]
)
+ "</span>",
label="HTML SVG Circles of Report Creator Colors",
),
rc.Separator(),
rc.Select(
blocks=[
rc.DataTable(
px.data.gapminder()
.query("year == 2002")
.query("continent == 'Europe'"),
label="2002 European Population",
index=False,
),
rc.DataTable(px.data.iris(), label="Iris Petals", index=False),
rc.DataTable(
px.data.election(),
label="2013 Montreal Election",
index=False,
),
rc.DataTable(
px.data.medals_long(),
label="Olympic Speed Skating",
index=False,
),
rc.DataTable(
px.data.wind(),
label="Wind Intensity",
index=False,
),
],
label="Tab Group of Data Tables",
),
rc.Separator(),
rc.Select(
blocks=[
rc.Diagram(
src="""
mindmap
root((Artificial Intelligence))
subtopic1(Machine Learning)
subtopic1a(Supervised Learning)
subtopic1a1(Linear Regression)
subtopic1a2(Decision Trees)
subtopic1a3(SVM)
subtopic1b(Unsupervised Learning)
subtopic1b1(Clustering)
subtopic1b2(Dimensionality Reduction)
subtopic1c(Reinforcement Learning)
subtopic1c1(Q-Learning)
subtopic1c2(Deep Q-Networks)
subtopic1c3(Policy Gradient)
subtopic2(Neural Networks)
subtopic2a(Feedforward Networks)
subtopic2a1(Activation Functions)
subtopic2a2(Backpropagation)
subtopic2b(Recurrent Networks)
subtopic2b1(LSTM)
subtopic2b2(GRU)
subtopic2c(Convolutional Networks)
subtopic2c1(Image Classification)
subtopic2c2(Object Detection)
subtopic3(Natural Language Processing)
subtopic3a(Tokenization)
subtopic3b(Word Embeddings)
subtopic3b1(Word2Vec)
subtopic3b2(GloVe)
subtopic3c(Transformers)
subtopic3c1(BERT)
subtopic3c2(GPT)
subtopic4(Computer Vision)
subtopic4a(Image Recognition)
subtopic4b(Semantic Segmentation)
subtopic4c(Object Detection)
subtopic5(Generative Models)
subtopic5a(GANs)
subtopic5a1(Discriminator)
subtopic5a2(Generator)
subtopic5b(VAEs)
subtopic5b1(Latent Space)
subtopic5b2(Reconstruction)
subtopic6(Ethics in AI)
subtopic6a(Bias)
subtopic6b(Privacy)
subtopic6c(Transparency)
subtopic6d(Accountability)
subtopic6e(Fairness)
""",
label="Example AI Mind Map Diagram",
),
rc.Diagram(
src="""
graph LR
A[Square Rect] -- Link text --> B((Circle))
A --> C(Round Rect)
B --> D{Rhombus}
C --> D
""",
pan_and_zoom=False,
label="Example Git Graph",
),
],
label="Tab Group of Diagrams",
),
rc.Separator(),
rc.Radar(
df=pd.DataFrame(
{
"Llama3.1": {
"MMLU (Accuracy)": 0.72,
"TruthfulQA (Accuracy)": 0.65,
"Winogrande (Accuracy)": 0.85,
"ARC-Challenge (Accuracy)": 0.48,
"ARC-Easy (Accuracy)": 0.78,
"CommonsenseQA (Accuracy)": 0.68,
"BoolQ (Accuracy)": 0.80,
"CB (Accuracy)": 0.88,
"COPA (Accuracy)": 0.95,
"WiC (Accuracy)": 0.75,
"ReCoRD (F1)": 0.72,
"RACE-h (Accuracy)": 0.60,
"RACE-m (Accuracy)": 0.65,
},
"Llama3.2": { # Example of a second model
"MMLU (Accuracy)": 0.75,
"TruthfulQA (Accuracy)": 0.68,
"Winogrande (Accuracy)": 0.88,
"ARC-Challenge (Accuracy)": 0.52,
"ARC-Easy (Accuracy)": 0.81,
"CommonsenseQA (Accuracy)": 0.71,
"BoolQ (Accuracy)": 0.83,
"CB (Accuracy)": 0.90,
"COPA (Accuracy)": 0.97,
"WiC (Accuracy)": 0.78,
"ReCoRD (F1)": 0.75,
"RACE-h (Accuracy)": 0.63,
"RACE-m (Accuracy)": 0.68,
},
}
).T,
lock_minimum_to_zero=True,
filled=False,
label="Radar Chart of Model Performance",
),
rc.Unformatted(
r"""
___________________________________
< This is an unformatted component >
-----------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
""",
label="Unformatted",
),
rc.Group(
rc.Image(
"https://placehold.co/600x400/000000/FF5733.png",
label="Placeholder Image 1",
link_to="https://placehold.co",
convert_to_base64=True,
),
rc.Image(
"https://placehold.co/600x400/000000/33FF57.png",
label="Placeholder Image 2",
convert_to_base64=True,
),
rc.Image(
"https://placehold.co/600x400/000000/3357FF.png",
label="Placeholder Image 3",
convert_to_base64=True,
),
),
rc.Separator(),
rc.Gallery(
[
f"https://placehold.co/600x400/{rc.report_creator_colors[i%len(rc.report_creator_colors)][1:]}/fff.png" for i in range(1, 7)
],
labels=[f"Random Image {i}" for i in range(1, 7)],
label="Gallery Component",
convert_to_base64=True
),
)
report.save(view, "examples/kitchen_sink.html", prettify_html=False)
Hitchhiker's Guide to the Galaxy:
Gross profit margin:
A commonly tracked metric by finance departments that can be found on an income statement.
Accuracy:
Number of correct predictions by Total number of predictions
Recurring revenue:
Recurring revenue is the portion of a company's revenue that is predictable and stable.
Capacity utilization:
A popular productivity metric that measures the ratio of actual output to potential output.
Asset turnover ratio:
Asset turnover ratio is a financial metric that shows how efficiently a company generates revenue from its assets.
System Processor Load:
Current CPU utilization across all cores
Memory Usage:
Available physical memory
Alice:
Bob:
Eva:
status == 200:
Not Found (404) Requests:
Love all, trust a few, do wrong to none.
Moderate lamentation is the right of the dead, excessive grief the enemy to the living.
Something is rotten in the state of Denmark.
There are more things in heaven and earth, Horatio,
Than are dreamt of in our philosophy.
To be, or not to be, that is the question.
How all occasions do inform against me, and spur my dull revenge.
But, soft, what light through yonder window breaks?
It is the east, and Juliet is the sun.
O happy dagger,
This is thy sheath: there rust, and let me die.
For never was a story of more woe
Than this of Juliet and her Romeo.
For all the software engineers that have been inspired by Carl Sagan's words to pursue a career in computer science and engineering, many of which I consider to be friends and colleagues. This is for you.
... Look again at that dot. That's here. That's home. That's us. On it everyone you love, everyone you know, everyone you ever heard of, every human being who ever was, lived out their lives. The aggregate of our joy and suffering, thousands of confident religions, ideologies, and economic doctrines, every hunter and forager, every hero and coward, every creator and destroyer of civilization, every king and peasant, every young couple in love, every mother and father, hopeful child, inventor and explorer, every teacher of morals, every corrupt politician, every "superstar," every "supreme leader," every saint and sinner in the history of our species lived there - on a mote of dust suspended in a sunbeam.
The Earth is a very small stage in a vast cosmic arena. Think of the rivers of blood spilled by all those generals and emperors, so that, in glory and triumph, they could become the momentary masters of a fraction of a dot. Think of the endless cruelties visited by the inhabitants of one corner of this pixel on the scarcely distinguishable inhabitants of some other corner, how frequent their misunderstandings, how eager they are to kill one another, how fervent their hatreds. Our posturings, our imagined self-importance, the delusion that we have some privileged position in the Universe, are challenged by this point of pale light.
Our planet is a lonely speck in the great enveloping cosmic dark. In our obscurity, in all this vastness, there is no hint that help will come from elsewhere to save us from ourselves.
The Earth is the only world known so far to harbor life. There is nowhere else, at least in the near future, to which our species could migrate. Visit, yes. Settle, not yet. Like it or not, for the moment the Earth is where we make our stand.
It has been said that astronomy is a humbling and character building experience. There is perhaps no better demonstration of the folly of human conceits than this distant image of our tiny world. To me, it underscores our responsibility to deal more kindly with one another, and to preserve and cherish the pale blue dot, the only home we've ever known.
public class HelloWorld {
public static void main(String[] args) {
// Print "Hello, World!" to the console
System.out.println("Hello, World!");
}
}
% Define a rule to display the message
hello_world :-
write('Hello, World!'), nl.
% To run, consult the file and call the rule:
% ?- hello_world.
-- Example SQL
SELECT
ename,
DECODE(deptno,
10, 'Accounting',
20, 'Research',
30, 'Sales',
40, 'Operations',
) AS department_name
FROM
scott.emp;
{
"name": "Alice",
"age": 25,
"city": "Wonderland",
"hobbies": [
"reading",
"adventures",
"tea parties",
"cats"
]
}
Note
This is an info callout! You can use standard Markdown here too.
Warning
This is a warning callout! Beware of dragons and failing pipelines.
Error
This is an error callout! Something went terribly wrong.
GitHub | PyPI | Documentation | Issues | Getting Started
Library to assemble reports in HTML from various components using python. This is not meant to be a replacement for do-it-yourself HTML,
it's a tool to put together professional looking reports from python easily and quickly. The philosophy for layout is that components flow in
either the horizontal (rc.Group()) or Vertical (rc.Block()) direction.
New in v1.2.5 create slide decks using rc.Deck() and rc.Slide() components. See the Deck example.
Talk to this repo using DeepWiki Report Creator
Use the documentation in Cursor, Windsurf, Claude Desktop or another MCP Client via the Context7 MCP for example
Create an html report on this dataframe, use context7
Table, DataTable (searcheable/sortable), and Metric components.Plotly figures with a custom theme for professional-looking charts by default.Matplotlib and Seaborn objects, with consistent styling using a context manager.Radar charts, Bar, Line, Pie, Scatter, Box, and Histogram.Metric and MetricGroup for KPI displays, including EventMetric for time-series frequency analysis.rc.Block() (vertical) and rc.Group() (horizontal) stacks.Accordion/Collapse sections and Select tabbed interfaces.Mermaid.js support for flowcharts, sequence diagrams, and more, with built-in pan and zoom.Sql, Python, Yaml, and Json.import report_creator as rc
with rc.ReportCreator(
title="My Report",
description="My Report Description",
footer="My Report Footer",
accent_color="red",
) as report:
view = rc.Block(
rc.Text(
"""It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of light, it was the season of darkness, it was the spring of hope, it was the winter of despair.""",
label="Charles Dickens, A Tale of Two Cities",
),
rc.Group(
rc.Metric(
heading="Answer to Life, The Universe, and Everything",
value="42",
),
rc.Metric(
heading="Author",
value="Douglas Adams",
),
),
rc.Bar(
px.data.medals_long(),
x="nation",
y="count",
dimension="medal",
label="Bar Chart - Olympic Medals",
),
rc.Scatter(
px.data.iris(),
x="sepal_width",
y="sepal_length",
dimension="species",
marginal="histogram",
label="Scatter Plot - Iris",
),
)
report.save(view, "report.html")
This project has been configured for Claude Clode. These are entirely optional to use for development.
conda create -n rc -c conda-forge python=3.13
conda activate rc
make setup
# recommended for code hygiene
make format
# install as a local package:
python3 -m pip install -e .
# see dependency tree:
pipdeptree --exclude pip,pipdeptree,setuptools,wheel,twine
# build examples:
make examples
# build a *specific* example:
make examples EXAMPLES=examples/myreport.py
# run tests
make tests
# build doc
make doc
# release new version
make release
# show list of make targets
make targets
This project is under active development
| country | continent | year | lifeExp | pop | gdpPercap | iso_alpha | iso_num |
|---|---|---|---|---|---|---|---|
| Albania | Europe | 2002 | 75.65 | 3508512 | 4604.21 | ALB | 8 |
| Austria | Europe | 2002 | 78.98 | 8148312 | 32417.61 | AUT | 40 |
| Belgium | Europe | 2002 | 78.32 | 10311970 | 30485.88 | BEL | 56 |
| Bosnia and Herzegovina | Europe | 2002 | 74.09 | 4165416 | 6018.98 | BIH | 70 |
| Bulgaria | Europe | 2002 | 72.14 | 7661799 | 7696.78 | BGR | 100 |
| Croatia | Europe | 2002 | 74.88 | 4481020 | 11628.39 | HRV | 191 |
| Czech Republic | Europe | 2002 | 75.51 | 10256295 | 17596.21 | CZE | 203 |
| Denmark | Europe | 2002 | 77.18 | 5374693 | 32166.50 | DNK | 208 |
| Finland | Europe | 2002 | 78.37 | 5193039 | 28204.59 | FIN | 246 |
| France | Europe | 2002 | 79.59 | 59925035 | 28926.03 | FRA | 250 |
| Germany | Europe | 2002 | 78.67 | 82350671 | 30035.80 | DEU | 276 |
| Greece | Europe | 2002 | 78.26 | 10603863 | 22514.25 | GRC | 300 |
| Hungary | Europe | 2002 | 72.59 | 10083313 | 14843.94 | HUN | 348 |
| Iceland | Europe | 2002 | 80.50 | 288030 | 31163.20 | ISL | 352 |
| Ireland | Europe | 2002 | 77.78 | 3879155 | 34077.05 | IRL | 372 |
| Italy | Europe | 2002 | 80.24 | 57926999 | 27968.10 | ITA | 380 |
| Montenegro | Europe | 2002 | 73.98 | 720230 | 6557.19 | MNE | 499 |
| Netherlands | Europe | 2002 | 78.53 | 16122830 | 33724.76 | NLD | 528 |
| Norway | Europe | 2002 | 79.05 | 4535591 | 44683.98 | NOR | 578 |
| Poland | Europe | 2002 | 74.67 | 38625976 | 12002.24 | POL | 616 |
| Portugal | Europe | 2002 | 77.29 | 10433867 | 19970.91 | PRT | 620 |
| Romania | Europe | 2002 | 71.32 | 22404337 | 7885.36 | ROU | 642 |
| Serbia | Europe | 2002 | 73.21 | 10111559 | 7236.08 | SRB | 688 |
| Slovak Republic | Europe | 2002 | 73.80 | 5410052 | 13638.78 | SVK | 703 |
| Slovenia | Europe | 2002 | 76.66 | 2011497 | 20660.02 | SVN | 705 |
| Spain | Europe | 2002 | 79.78 | 40152517 | 24835.47 | ESP | 724 |
| Sweden | Europe | 2002 | 80.04 | 8954175 | 29341.63 | SWE | 752 |
| Switzerland | Europe | 2002 | 80.62 | 7361757 | 34480.96 | CHE | 756 |
| Turkey | Europe | 2002 | 70.84 | 67308928 | 6508.09 | TUR | 792 |
| United Kingdom | Europe | 2002 | 78.47 | 59912431 | 29479.00 | GBR | 826 |
| sepal_length | sepal_width | petal_length | petal_width | species | species_id |
|---|---|---|---|---|---|
| 5.10 | 3.50 | 1.40 | 0.20 | setosa | 1 |
| 4.90 | 3.00 | 1.40 | 0.20 | setosa | 1 |
| 4.70 | 3.20 | 1.30 | 0.20 | setosa | 1 |
| 4.60 | 3.10 | 1.50 | 0.20 | setosa | 1 |
| 5.00 | 3.60 | 1.40 | 0.20 | setosa | 1 |
| 5.40 | 3.90 | 1.70 | 0.40 | setosa | 1 |
| 4.60 | 3.40 | 1.40 | 0.30 | setosa | 1 |
| 5.00 | 3.40 | 1.50 | 0.20 | setosa | 1 |
| 4.40 | 2.90 | 1.40 | 0.20 | setosa | 1 |
| 4.90 | 3.10 | 1.50 | 0.10 | setosa | 1 |
| 5.40 | 3.70 | 1.50 | 0.20 | setosa | 1 |
| 4.80 | 3.40 | 1.60 | 0.20 | setosa | 1 |
| 4.80 | 3.00 | 1.40 | 0.10 | setosa | 1 |
| 4.30 | 3.00 | 1.10 | 0.10 | setosa | 1 |
| 5.80 | 4.00 | 1.20 | 0.20 | setosa | 1 |
| 5.70 | 4.40 | 1.50 | 0.40 | setosa | 1 |
| 5.40 | 3.90 | 1.30 | 0.40 | setosa | 1 |
| 5.10 | 3.50 | 1.40 | 0.30 | setosa | 1 |
| 5.70 | 3.80 | 1.70 | 0.30 | setosa | 1 |
| 5.10 | 3.80 | 1.50 | 0.30 | setosa | 1 |
| 5.40 | 3.40 | 1.70 | 0.20 | setosa | 1 |
| 5.10 | 3.70 | 1.50 | 0.40 | setosa | 1 |
| 4.60 | 3.60 | 1.00 | 0.20 | setosa | 1 |
| 5.10 | 3.30 | 1.70 | 0.50 | setosa | 1 |
| 4.80 | 3.40 | 1.90 | 0.20 | setosa | 1 |
| 5.00 | 3.00 | 1.60 | 0.20 | setosa | 1 |
| 5.00 | 3.40 | 1.60 | 0.40 | setosa | 1 |
| 5.20 | 3.50 | 1.50 | 0.20 | setosa | 1 |
| 5.20 | 3.40 | 1.40 | 0.20 | setosa | 1 |
| 4.70 | 3.20 | 1.60 | 0.20 | setosa | 1 |
| 4.80 | 3.10 | 1.60 | 0.20 | setosa | 1 |
| 5.40 | 3.40 | 1.50 | 0.40 | setosa | 1 |
| 5.20 | 4.10 | 1.50 | 0.10 | setosa | 1 |
| 5.50 | 4.20 | 1.40 | 0.20 | setosa | 1 |
| 4.90 | 3.10 | 1.50 | 0.10 | setosa | 1 |
| 5.00 | 3.20 | 1.20 | 0.20 | setosa | 1 |
| 5.50 | 3.50 | 1.30 | 0.20 | setosa | 1 |
| 4.90 | 3.10 | 1.50 | 0.10 | setosa | 1 |
| 4.40 | 3.00 | 1.30 | 0.20 | setosa | 1 |
| 5.10 | 3.40 | 1.50 | 0.20 | setosa | 1 |
| 5.00 | 3.50 | 1.30 | 0.30 | setosa | 1 |
| 4.50 | 2.30 | 1.30 | 0.30 | setosa | 1 |
| 4.40 | 3.20 | 1.30 | 0.20 | setosa | 1 |
| 5.00 | 3.50 | 1.60 | 0.60 | setosa | 1 |
| 5.10 | 3.80 | 1.90 | 0.40 | setosa | 1 |
| 4.80 | 3.00 | 1.40 | 0.30 | setosa | 1 |
| 5.10 | 3.80 | 1.60 | 0.20 | setosa | 1 |
| 4.60 | 3.20 | 1.40 | 0.20 | setosa | 1 |
| 5.30 | 3.70 | 1.50 | 0.20 | setosa | 1 |
| 5.00 | 3.30 | 1.40 | 0.20 | setosa | 1 |
| 7.00 | 3.20 | 4.70 | 1.40 | versicolor | 2 |
| 6.40 | 3.20 | 4.50 | 1.50 | versicolor | 2 |
| 6.90 | 3.10 | 4.90 | 1.50 | versicolor | 2 |
| 5.50 | 2.30 | 4.00 | 1.30 | versicolor | 2 |
| 6.50 | 2.80 | 4.60 | 1.50 | versicolor | 2 |
| 5.70 | 2.80 | 4.50 | 1.30 | versicolor | 2 |
| 6.30 | 3.30 | 4.70 | 1.60 | versicolor | 2 |
| 4.90 | 2.40 | 3.30 | 1.00 | versicolor | 2 |
| 6.60 | 2.90 | 4.60 | 1.30 | versicolor | 2 |
| 5.20 | 2.70 | 3.90 | 1.40 | versicolor | 2 |
| 5.00 | 2.00 | 3.50 | 1.00 | versicolor | 2 |
| 5.90 | 3.00 | 4.20 | 1.50 | versicolor | 2 |
| 6.00 | 2.20 | 4.00 | 1.00 | versicolor | 2 |
| 6.10 | 2.90 | 4.70 | 1.40 | versicolor | 2 |
| 5.60 | 2.90 | 3.60 | 1.30 | versicolor | 2 |
| 6.70 | 3.10 | 4.40 | 1.40 | versicolor | 2 |
| 5.60 | 3.00 | 4.50 | 1.50 | versicolor | 2 |
| 5.80 | 2.70 | 4.10 | 1.00 | versicolor | 2 |
| 6.20 | 2.20 | 4.50 | 1.50 | versicolor | 2 |
| 5.60 | 2.50 | 3.90 | 1.10 | versicolor | 2 |
| 5.90 | 3.20 | 4.80 | 1.80 | versicolor | 2 |
| 6.10 | 2.80 | 4.00 | 1.30 | versicolor | 2 |
| 6.30 | 2.50 | 4.90 | 1.50 | versicolor | 2 |
| 6.10 | 2.80 | 4.70 | 1.20 | versicolor | 2 |
| 6.40 | 2.90 | 4.30 | 1.30 | versicolor | 2 |
| 6.60 | 3.00 | 4.40 | 1.40 | versicolor | 2 |
| 6.80 | 2.80 | 4.80 | 1.40 | versicolor | 2 |
| 6.70 | 3.00 | 5.00 | 1.70 | versicolor | 2 |
| 6.00 | 2.90 | 4.50 | 1.50 | versicolor | 2 |
| 5.70 | 2.60 | 3.50 | 1.00 | versicolor | 2 |
| 5.50 | 2.40 | 3.80 | 1.10 | versicolor | 2 |
| 5.50 | 2.40 | 3.70 | 1.00 | versicolor | 2 |
| 5.80 | 2.70 | 3.90 | 1.20 | versicolor | 2 |
| 6.00 | 2.70 | 5.10 | 1.60 | versicolor | 2 |
| 5.40 | 3.00 | 4.50 | 1.50 | versicolor | 2 |
| 6.00 | 3.40 | 4.50 | 1.60 | versicolor | 2 |
| 6.70 | 3.10 | 4.70 | 1.50 | versicolor | 2 |
| 6.30 | 2.30 | 4.40 | 1.30 | versicolor | 2 |
| 5.60 | 3.00 | 4.10 | 1.30 | versicolor | 2 |
| 5.50 | 2.50 | 4.00 | 1.30 | versicolor | 2 |
| 5.50 | 2.60 | 4.40 | 1.20 | versicolor | 2 |
| 6.10 | 3.00 | 4.60 | 1.40 | versicolor | 2 |
| 5.80 | 2.60 | 4.00 | 1.20 | versicolor | 2 |
| 5.00 | 2.30 | 3.30 | 1.00 | versicolor | 2 |
| 5.60 | 2.70 | 4.20 | 1.30 | versicolor | 2 |
| 5.70 | 3.00 | 4.20 | 1.20 | versicolor | 2 |
| 5.70 | 2.90 | 4.20 | 1.30 | versicolor | 2 |
| 6.20 | 2.90 | 4.30 | 1.30 | versicolor | 2 |
| 5.10 | 2.50 | 3.00 | 1.10 | versicolor | 2 |
| 5.70 | 2.80 | 4.10 | 1.30 | versicolor | 2 |
| 6.30 | 3.30 | 6.00 | 2.50 | virginica | 3 |
| 5.80 | 2.70 | 5.10 | 1.90 | virginica | 3 |
| 7.10 | 3.00 | 5.90 | 2.10 | virginica | 3 |
| 6.30 | 2.90 | 5.60 | 1.80 | virginica | 3 |
| 6.50 | 3.00 | 5.80 | 2.20 | virginica | 3 |
| 7.60 | 3.00 | 6.60 | 2.10 | virginica | 3 |
| 4.90 | 2.50 | 4.50 | 1.70 | virginica | 3 |
| 7.30 | 2.90 | 6.30 | 1.80 | virginica | 3 |
| 6.70 | 2.50 | 5.80 | 1.80 | virginica | 3 |
| 7.20 | 3.60 | 6.10 | 2.50 | virginica | 3 |
| 6.50 | 3.20 | 5.10 | 2.00 | virginica | 3 |
| 6.40 | 2.70 | 5.30 | 1.90 | virginica | 3 |
| 6.80 | 3.00 | 5.50 | 2.10 | virginica | 3 |
| 5.70 | 2.50 | 5.00 | 2.00 | virginica | 3 |
| 5.80 | 2.80 | 5.10 | 2.40 | virginica | 3 |
| 6.40 | 3.20 | 5.30 | 2.30 | virginica | 3 |
| 6.50 | 3.00 | 5.50 | 1.80 | virginica | 3 |
| 7.70 | 3.80 | 6.70 | 2.20 | virginica | 3 |
| 7.70 | 2.60 | 6.90 | 2.30 | virginica | 3 |
| 6.00 | 2.20 | 5.00 | 1.50 | virginica | 3 |
| 6.90 | 3.20 | 5.70 | 2.30 | virginica | 3 |
| 5.60 | 2.80 | 4.90 | 2.00 | virginica | 3 |
| 7.70 | 2.80 | 6.70 | 2.00 | virginica | 3 |
| 6.30 | 2.70 | 4.90 | 1.80 | virginica | 3 |
| 6.70 | 3.30 | 5.70 | 2.10 | virginica | 3 |
| 7.20 | 3.20 | 6.00 | 1.80 | virginica | 3 |
| 6.20 | 2.80 | 4.80 | 1.80 | virginica | 3 |
| 6.10 | 3.00 | 4.90 | 1.80 | virginica | 3 |
| 6.40 | 2.80 | 5.60 | 2.10 | virginica | 3 |
| 7.20 | 3.00 | 5.80 | 1.60 | virginica | 3 |
| 7.40 | 2.80 | 6.10 | 1.90 | virginica | 3 |
| 7.90 | 3.80 | 6.40 | 2.00 | virginica | 3 |
| 6.40 | 2.80 | 5.60 | 2.20 | virginica | 3 |
| 6.30 | 2.80 | 5.10 | 1.50 | virginica | 3 |
| 6.10 | 2.60 | 5.60 | 1.40 | virginica | 3 |
| 7.70 | 3.00 | 6.10 | 2.30 | virginica | 3 |
| 6.30 | 3.40 | 5.60 | 2.40 | virginica | 3 |
| 6.40 | 3.10 | 5.50 | 1.80 | virginica | 3 |
| 6.00 | 3.00 | 4.80 | 1.80 | virginica | 3 |
| 6.90 | 3.10 | 5.40 | 2.10 | virginica | 3 |
| 6.70 | 3.10 | 5.60 | 2.40 | virginica | 3 |
| 6.90 | 3.10 | 5.10 | 2.30 | virginica | 3 |
| 5.80 | 2.70 | 5.10 | 1.90 | virginica | 3 |
| 6.80 | 3.20 | 5.90 | 2.30 | virginica | 3 |
| 6.70 | 3.30 | 5.70 | 2.50 | virginica | 3 |
| 6.70 | 3.00 | 5.20 | 2.30 | virginica | 3 |
| 6.30 | 2.50 | 5.00 | 1.90 | virginica | 3 |
| 6.50 | 3.00 | 5.20 | 2.00 | virginica | 3 |
| 6.20 | 3.40 | 5.40 | 2.30 | virginica | 3 |
| 5.90 | 3.00 | 5.10 | 1.80 | virginica | 3 |
| district | Coderre | Bergeron | Joly | total | winner | result | district_id |
|---|---|---|---|---|---|---|---|
| 101-Bois-de-Liesse | 2481 | 1829 | 3024 | 7334 | Joly | plurality | 101 |
| 102-Cap-Saint-Jacques | 2525 | 1163 | 2675 | 6363 | Joly | plurality | 102 |
| 11-Sault-au-Récollet | 3348 | 2770 | 2532 | 8650 | Coderre | plurality | 11 |
| 111-Mile-End | 1734 | 4782 | 2514 | 9030 | Bergeron | majority | 111 |
| 112-DeLorimier | 1770 | 5933 | 3044 | 10747 | Bergeron | majority | 112 |
| 113-Jeanne-Mance | 1455 | 3599 | 2316 | 7370 | Bergeron | plurality | 113 |
| 12-Saint-Sulpice | 3252 | 2521 | 2543 | 8316 | Coderre | plurality | 12 |
| 121-La Pointe-aux-Prairies | 5456 | 1760 | 3330 | 10546 | Coderre | majority | 121 |
| 122-Pointe-aux-Trembles | 4734 | 1879 | 2852 | 9465 | Coderre | majority | 122 |
| 123-Rivière-des-Prairies | 5737 | 958 | 1656 | 8351 | Coderre | majority | 123 |
| 13-Ahuntsic | 2979 | 3430 | 2873 | 9282 | Bergeron | plurality | 13 |
| 131-Saint-Édouard | 1827 | 6408 | 2815 | 11050 | Bergeron | majority | 131 |
| 132-Étienne-Desmarteau | 2331 | 5748 | 2788 | 10867 | Bergeron | majority | 132 |
| 133-Vieux-Rosemont | 2670 | 4962 | 3234 | 10866 | Bergeron | plurality | 133 |
| 134-Marie-Victorin | 3673 | 3155 | 2431 | 9259 | Coderre | plurality | 134 |
| 14-Bordeaux-Cartierville | 3612 | 1554 | 2081 | 7247 | Coderre | plurality | 14 |
| 141-Côte-de-Liesse | 4308 | 1320 | 3959 | 9587 | Coderre | plurality | 141 |
| 142-Norman-McLaren | 4104 | 1459 | 2822 | 8385 | Coderre | plurality | 142 |
| 151-Saint-Léonard-Est | 3931 | 882 | 1641 | 6454 | Coderre | majority | 151 |
| 152-Saint-Léonard-Ouest | 5387 | 1184 | 1908 | 8479 | Coderre | majority | 152 |
| 161-Saint-HenriPetite-BourgognePointe-Saint-Charles | 2432 | 3368 | 3578 | 9378 | Joly | plurality | 161 |
| 162-Saint-PaulÉmard | 2566 | 2092 | 2438 | 7096 | Coderre | plurality | 162 |
| 171-ChamplainL'Île-des-Soeurs | 3347 | 2562 | 3291 | 9200 | Coderre | plurality | 171 |
| 172-Desmarchais-Crawford | 2476 | 2631 | 2849 | 7956 | Joly | plurality | 172 |
| 181-Peter-McGill | 1451 | 754 | 1894 | 4099 | Joly | plurality | 181 |
| 182-Saint-Jacques | 1906 | 2169 | 2282 | 6357 | Joly | plurality | 182 |
| 183-Sainte-Marie | 1347 | 2827 | 2271 | 6445 | Bergeron | plurality | 183 |
| 191-Saint-Michel | 3668 | 984 | 1220 | 5872 | Coderre | majority | 191 |
| 192-François-Perrault | 2878 | 2666 | 2039 | 7583 | Coderre | plurality | 192 |
| 193-Villeray | 2201 | 5819 | 2782 | 10802 | Bergeron | majority | 193 |
| 194-Parc-Extension | 2420 | 1793 | 1402 | 5615 | Coderre | plurality | 194 |
| 21-Ouest | 2184 | 691 | 1076 | 3951 | Coderre | majority | 21 |
| 22-Est | 1589 | 708 | 1172 | 3469 | Coderre | plurality | 22 |
| 23-Centre | 2526 | 851 | 1286 | 4663 | Coderre | majority | 23 |
| 31-Darlington | 1873 | 1182 | 1232 | 4287 | Coderre | plurality | 31 |
| 32-Côte-des-Neiges | 1644 | 1950 | 1578 | 5172 | Bergeron | plurality | 32 |
| 33-Snowdon | 1548 | 1503 | 1636 | 4687 | Joly | plurality | 33 |
| 34-Notre-Dame-de-Grâce | 1773 | 2653 | 3262 | 7688 | Joly | plurality | 34 |
| 35-Loyola | 2040 | 1437 | 2648 | 6125 | Joly | plurality | 35 |
| 41-du Canal | 1165 | 832 | 1266 | 3263 | Joly | plurality | 41 |
| 42-J.-Émery-Provost | 1193 | 653 | 1157 | 3003 | Coderre | plurality | 42 |
| 43-Fort-Rolland | 1325 | 1205 | 1908 | 4438 | Joly | plurality | 43 |
| 51-Sault-Saint-Louis | 4201 | 1642 | 3717 | 9560 | Coderre | plurality | 51 |
| 52-Cecil-P.-Newman | 3536 | 1330 | 2943 | 7809 | Coderre | plurality | 52 |
| 61-Pierre-Foretier | 631 | 258 | 998 | 1887 | Joly | majority | 61 |
| 62-Denis-Benjamin-Viger | 595 | 226 | 1068 | 1889 | Joly | majority | 62 |
| 63-Jacques-Bizard | 518 | 224 | 690 | 1432 | Joly | plurality | 63 |
| 64-Sainte-Geneviève | 332 | 131 | 326 | 789 | Coderre | plurality | 64 |
| 71-Tétreaultville | 3694 | 2589 | 3454 | 9737 | Coderre | plurality | 71 |
| 72-MaisonneuveLongue-Pointe | 2746 | 3250 | 3139 | 9135 | Bergeron | plurality | 72 |
| 73-Hochelaga | 1546 | 3679 | 2675 | 7900 | Bergeron | plurality | 73 |
| 74-Louis-Riel | 3509 | 2178 | 2338 | 8025 | Coderre | plurality | 74 |
| 81-Marie-Clarac | 6591 | 1085 | 1435 | 9111 | Coderre | majority | 81 |
| 82-Ovide-Clermont | 6229 | 780 | 1051 | 8060 | Coderre | majority | 82 |
| 91-Claude-Ryan | 996 | 643 | 423 | 2062 | Coderre | plurality | 91 |
| 92-Joseph-Beaubien | 540 | 833 | 592 | 1965 | Bergeron | plurality | 92 |
| 93-Robert-Bourassa | 446 | 465 | 419 | 1330 | Bergeron | plurality | 93 |
| 94-Jeanne-Sauvé | 491 | 698 | 489 | 1678 | Bergeron | plurality | 94 |
| nation | medal | count |
|---|---|---|
| South Korea | gold | 24 |
| China | gold | 10 |
| Canada | gold | 9 |
| South Korea | silver | 13 |
| China | silver | 15 |
| Canada | silver | 12 |
| South Korea | bronze | 11 |
| China | bronze | 8 |
| Canada | bronze | 12 |
| direction | strength | frequency |
|---|---|---|
| N | 0-1 | 0.50 |
| NNE | 0-1 | 0.60 |
| NE | 0-1 | 0.50 |
| ENE | 0-1 | 0.40 |
| E | 0-1 | 0.40 |
| ESE | 0-1 | 0.30 |
| SE | 0-1 | 0.40 |
| SSE | 0-1 | 0.40 |
| S | 0-1 | 0.60 |
| SSW | 0-1 | 0.40 |
| SW | 0-1 | 0.50 |
| WSW | 0-1 | 0.60 |
| W | 0-1 | 0.60 |
| WNW | 0-1 | 0.50 |
| NW | 0-1 | 0.40 |
| NNW | 0-1 | 0.10 |
| N | 1-2 | 1.60 |
| NNE | 1-2 | 1.80 |
| NE | 1-2 | 1.50 |
| ENE | 1-2 | 1.60 |
| E | 1-2 | 1.60 |
| ESE | 1-2 | 1.20 |
| SE | 1-2 | 1.50 |
| SSE | 1-2 | 1.70 |
| S | 1-2 | 2.20 |
| SSW | 1-2 | 2.00 |
| SW | 1-2 | 2.30 |
| WSW | 1-2 | 2.40 |
| W | 1-2 | 2.30 |
| WNW | 1-2 | 2.60 |
| NW | 1-2 | 2.30 |
| NNW | 1-2 | 0.80 |
| N | 2-3 | 0.90 |
| NNE | 2-3 | 1.30 |
| NE | 2-3 | 1.60 |
| ENE | 2-3 | 0.90 |
| E | 2-3 | 1.00 |
| ESE | 2-3 | 0.60 |
| SE | 2-3 | 0.60 |
| SSE | 2-3 | 0.90 |
| S | 2-3 | 1.40 |
| SSW | 2-3 | 1.70 |
| SW | 2-3 | 1.90 |
| WSW | 2-3 | 2.20 |
| W | 2-3 | 1.80 |
| WNW | 2-3 | 1.70 |
| NW | 2-3 | 1.80 |
| NNW | 2-3 | 0.80 |
| N | 3-4 | 0.90 |
| NNE | 3-4 | 0.80 |
| NE | 3-4 | 1.20 |
| ENE | 3-4 | 1.00 |
| E | 3-4 | 0.80 |
| ESE | 3-4 | 0.40 |
| SE | 3-4 | 0.50 |
| SSE | 3-4 | 0.50 |
| S | 3-4 | 0.80 |
| SSW | 3-4 | 0.90 |
| SW | 3-4 | 1.30 |
| WSW | 3-4 | 1.10 |
| W | 3-4 | 1.20 |
| WNW | 3-4 | 1.20 |
| NW | 3-4 | 1.30 |
| NNW | 3-4 | 1.00 |
| N | 4-4 | 0.40 |
| NNE | 4-4 | 0.50 |
| NE | 4-4 | 1.20 |
| ENE | 4-4 | 0.50 |
| E | 4-4 | 0.40 |
| ESE | 4-4 | 0.20 |
| SE | 4-4 | 0.40 |
| SSE | 4-4 | 0.40 |
| S | 4-4 | 0.70 |
| SSW | 4-4 | 0.60 |
| SW | 4-4 | 0.70 |
| WSW | 4-4 | 0.80 |
| W | 4-4 | 0.90 |
| WNW | 4-4 | 1.00 |
| NW | 4-4 | 1.00 |
| NNW | 4-4 | 0.70 |
| N | 4-5 | 0.30 |
| NNE | 4-5 | 0.30 |
| NE | 4-5 | 0.60 |
| ENE | 4-5 | 0.20 |
| E | 4-5 | 0.10 |
| ESE | 4-5 | 0.10 |
| SE | 4-5 | 0.05 |
| SSE | 4-5 | 0.10 |
| S | 4-5 | 0.10 |
| SSW | 4-5 | 0.20 |
| SW | 4-5 | 0.30 |
| WSW | 4-5 | 0.40 |
| W | 4-5 | 0.90 |
| WNW | 4-5 | 0.90 |
| NW | 4-5 | 0.90 |
| NNW | 4-5 | 0.30 |
| N | 5-6 | 0.20 |
| NNE | 5-6 | 0.10 |
| NE | 5-6 | 0.10 |
| ENE | 5-6 | 0.10 |
| E | 5-6 | 0.10 |
| ESE | 5-6 | 0.10 |
| SE | 5-6 | 0.05 |
| SSE | 5-6 | 0.05 |
| S | 5-6 | 0.10 |
| SSW | 5-6 | 0.05 |
| SW | 5-6 | 0.20 |
| WSW | 5-6 | 0.20 |
| W | 5-6 | 0.40 |
| WNW | 5-6 | 0.70 |
| NW | 5-6 | 0.70 |
| NNW | 5-6 | 0.40 |
| N | 6+ | 0.10 |
| NNE | 6+ | 0.10 |
| NE | 6+ | 0.10 |
| ENE | 6+ | 0.10 |
| E | 6+ | 0.10 |
| ESE | 6+ | 0.05 |
| SE | 6+ | 0.05 |
| SSE | 6+ | 0.05 |
| S | 6+ | 0.05 |
| SSW | 6+ | 0.10 |
| SW | 6+ | 0.10 |
| WSW | 6+ | 0.10 |
| W | 6+ | 0.90 |
| WNW | 6+ | 2.20 |
| NW | 6+ | 1.50 |
| NNW | 6+ | 0.20 |
mindmap
root((Artificial Intelligence))
subtopic1(Machine Learning)
subtopic1a(Supervised Learning)
subtopic1a1(Linear Regression)
subtopic1a2(Decision Trees)
subtopic1a3(SVM)
subtopic1b(Unsupervised Learning)
subtopic1b1(Clustering)
subtopic1b2(Dimensionality Reduction)
subtopic1c(Reinforcement Learning)
subtopic1c1(Q-Learning)
subtopic1c2(Deep Q-Networks)
subtopic1c3(Policy Gradient)
subtopic2(Neural Networks)
subtopic2a(Feedforward Networks)
subtopic2a1(Activation Functions)
subtopic2a2(Backpropagation)
subtopic2b(Recurrent Networks)
subtopic2b1(LSTM)
subtopic2b2(GRU)
subtopic2c(Convolutional Networks)
subtopic2c1(Image Classification)
subtopic2c2(Object Detection)
subtopic3(Natural Language Processing)
subtopic3a(Tokenization)
subtopic3b(Word Embeddings)
subtopic3b1(Word2Vec)
subtopic3b2(GloVe)
subtopic3c(Transformers)
subtopic3c1(BERT)
subtopic3c2(GPT)
subtopic4(Computer Vision)
subtopic4a(Image Recognition)
subtopic4b(Semantic Segmentation)
subtopic4c(Object Detection)
subtopic5(Generative Models)
subtopic5a(GANs)
subtopic5a1(Discriminator)
subtopic5a2(Generator)
subtopic5b(VAEs)
subtopic5b1(Latent Space)
subtopic5b2(Reconstruction)
subtopic6(Ethics in AI)
subtopic6a(Bias)
subtopic6b(Privacy)
subtopic6c(Transparency)
subtopic6d(Accountability)
subtopic6e(Fairness)pan (mouse drag) and zoom (shift + mouse wheel) (reset)graph LR
A[Square Rect] -- Link text --> B((Circle))
A --> C(Round Rect)
B --> D{Rhombus}
C --> D___________________________________
< This is an unformatted component >
-----------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||