Skip to content

Instantly share code, notes, and snippets.

@tonyfast
Created June 25, 2021 20:45
Show Gist options
  • Save tonyfast/053564797743b7fbbaa6e421fd2b059d to your computer and use it in GitHub Desktop.
Save tonyfast/053564797743b7fbbaa6e421fd2b059d to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"attachments": {
"610d8a69-95fe-41fc-a3cc-d760b2acf8ef.png": {
"image/png": "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yRg8eDDmzZuH3bt3B90/MIhCAQMzEVEYiI2NxY4dOzB58mTExMQgJiYGY8aMwQcffIDU1FTZvr1798ann36KuXPnomfPntDr9ejSpQumTJkijlL7Q2JiIgoLC/Hoo48iLi4O0dHRGDVqFHbs2IH777/f7XEGgwFbt27FihUr0L9/f0RERKBjx44YMWIECgoKMG/ePL+0tzWef/555OXlITk5GZGRkbhz5w4GDBiAlStX4t1331V8sIhUdHQ0Nm3ahHXr1mHixIno0qULbty4gS5dumDUqFHIzc2VPYhG8MADD6CkpASZmZl48MEH0aFDB5hMJtx7770YOXIkMjMzVcs8iEiZxhHo+XeIKOR40m0o7SOsk75L9xOWpS9hajSbzQaHwwGbzSZ7Wa1WWK1WWCwWWCwWXLt2TVZyEM4SExPFGtklS5YgMzMzwC0iolDnbjpKJaWlpejatSsMBgMMBgP0ej30ej10Op3sJTyiHbhbb6/RaFxeAumy87uUJ9MutnRqRiUcYSYiIiIiUsHATERERESkIuAPLqmtrQ10E4jIS74qyVD6rPQC5CUZdrtdfLdarbDZbLBYLLBaraqzLRARkW9999130Ov1MBgM0Ol00Ov10Gq10Ol04ru0JEOpHMO5JMP5czCUZAQ8MAN37+wlotDRljXMSoFZqYZZqGO+efOmL74iERF5oHPnzrL65eZqmD0JzMFYwxwUgZmIiLx3/vz5QDchaOXl5SEvL69Fx+7evRv9+/f3cYuIKJQxMBMRUdhZunQpli5dGuhmEFGY4E1/REREREQqGJiJiIiIiFQwMBMRERERqWBgJiIiIiJSwcBMRERERKSCgZmIiIiISAUDMxERERGRCgZmIiIiIiIVDMxERERERCoYmImIiIiIVDAwExERERGpYGAmIiIiIlKhLSwsRFFRUaDbQUREREQUlDjCTERERESkgoGZiIiIiEgFAzMRERERkQoGZiIiIiIiFQzMREREREQq9C056LPPPoPFYgEATJkyBQaDwaeNIiIiIiIKFhxhJiKigCsqKkJCQoL4qq2tDXSTiIhEDMxERERERCpaVJJxzz33wGq1AgC0WmZuIiIiIgpfLQrMDz/8sK/bQUREREQUlDg8TERERESkokUjzEREFHiJiYkwm80AgCVLliAjIwM5OTk4duwYzGYzhgwZgmXLliElJcXl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"
}
},
"cell_type": "markdown",
"id": "a628f212-8933-4759-88eb-6dbbb8ebf9ff",
"metadata": {},
"source": [
"# `pidgy.emoji` support\n",
"\n",
"![image.png](attachment:610d8a69-95fe-41fc-a3cc-d760b2acf8ef.png)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "dfac5fff-afc4-4794-b8e9-6ddea3f73c78",
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"😄 `pidgy` brings support for `emoji` in tangling and weaving code.\n",
"the full experience comes to 💡 in `pidgy` mode. it provides\n",
"the completion support for emojis and the ability to use `emoji` variables in python code.\n",
"\n",
"\n",
"\n",
"`emoji` can carry many meanings & can be practical ways to avoid naming challenges in programming.\n",
"\n",
"> ⚠ `pidgy.emoji` can be used as a standlone extension to bring `emoji` support to `IPython`, but `pidgy` gives the full experience"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
":smile: `pidgy` brings support for `emoji` in tangling and weaving code.\n",
"the full experience comes to :light_bulb: in `pidgy` mode. it provides\n",
"the completion support for emojis and the ability to use `emoji` variables in python code.\n",
"\n",
"\n",
"\n",
"`emoji` can carry many meanings & can be practical ways to avoid naming challenges in programming.\n",
"\n",
"> :warning: `pidgy.emoji` can be used as a standlone extension to bring `emoji` support to `IPython`, but `pidgy` gives the full experience"
]
},
{
"cell_type": "markdown",
"id": "d18ce756-90aa-488f-915c-6f32374ed9b6",
"metadata": {},
"source": [
"`pidgy` permits both `emoji` and their aliases, enclosed in colons, as ways to reference \n",
"objects with `emoji`"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "1b6af234-644b-4bea-a164-f78c14c4f254",
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
" import pandas as 🐼\n",
" import pandas as 🐼"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
" import pandas as :panda_face:\n",
" import pandas as 🐼"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "45b8ebad-97fe-45a5-a323-086825bcbb68",
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"now `panda_face` is defined as a variables; the leading and trailing colons are stripped"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"now `panda_face` is defined as a variables; the leading and trailing colons are stripped"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "7574e714-f7e8-4259-b3e0-2d38ad7abbfc",
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"`emoji` completion helps in naming, emoji are converted to their aliases, and they\n",
"can be combined to build more complex names\n",
"\n",
" 🐻🍺⚾🩰 = \"😴\"\n",
"\n",
"this combination of emoji creates the name `bearbeerbaseballballet_shoes`\n",
"\n",
" assert bearbeerbaseballballet_shoes == \"😴\"\n",
" \n",
"other valid characters, including unicode, can be include between `emoji`\n",
"\n",
" 🔠α🔩__🔨 = \"🧰\"\n",
" assert 🔠α🔩__🔨 == capital_abcdαnut_and_bolt__hammer"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"`emoji` completion helps in naming, emoji are converted to their aliases, and they\n",
"can be combined to build more complex names\n",
"\n",
" :bear::beer::baseball::ballet_shoes: = \":sleeping:\"\n",
"\n",
"this combination of emoji creates the name `bearbeerbaseballballet_shoes`\n",
"\n",
" assert bearbeerbaseballballet_shoes == \":sleeping:\"\n",
" \n",
"other valid characters, including unicode, can be include between `emoji`\n",
"\n",
" :capital_abcd:α:nut_and_bolt:__:hammer: = \":toolbox:\"\n",
" assert :capital_abcd:α:nut_and_bolt:__:hammer: == capital_abcdαnut_and_bolt__hammer"
]
},
{
"cell_type": "markdown",
"id": "ce47169a-ed7a-42bb-aecb-3da554324a28",
"metadata": {},
"source": [
"## edge cases\n",
"\n",
"there are few places where the use of the emoji`\":*:\"` pattern"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "93ac0695-e058-46c1-878f-9096c0313188",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"int"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/markdown": [
"### annotations\n",
"\n",
"the `pidgy.emoji` transformer does conflict annotations, the colons\n",
"are stripped from the variable name and the reference is the smiley alias.\n",
"\n",
" 👼: int = 0\n",
" \n",
"the name will be munged \n",
" \n",
" assert \"👼\" not in __annotations__\n",
" __annotations__[\"baby_angel\"]"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"### annotations\n",
"\n",
"the `pidgy.emoji` transformer does conflict annotations, the colons\n",
"are stripped from the variable name and the reference is the smiley alias.\n",
"\n",
" :baby_angel:: int = 0\n",
" \n",
"the name will be munged \n",
" \n",
" assert \":baby_angel:\" not in __annotations__\n",
" __annotations__[\"baby_angel\"]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "ccfb7b09-056e-491f-9af9-8ccb01fab72b",
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"### slices\n",
"\n",
"so far there don't seem to be any issues with `emoji` and `slice` syntax"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"### slices\n",
"\n",
"so far there don't seem to be any issues with `emoji` and `slice` syntax"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "f9441a75-8fcf-40d1-a7b7-fac484f412f4",
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
" ⛓ = list(\"abc\")\n",
" ⬆, ⬇ = 1, 0"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
" :chains: = list(\"abc\")\n",
" :up_arrow:, :down_arrow: = 1, 0"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "224fc5fc-d88f-4755-9070-5e78606729a7",
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
" ⚾ = \"abc\""
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
" :baseball: = \"abc\""
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "fb70f4ae-ad0a-46eb-b94c-b8261dad1bad",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/markdown": [
" baby_angel"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
" baby_angel"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "2fa00f31-8c59-4866-a53d-59841a4e4ad0",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"('a', 'b')"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"['a']"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"['a']"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"after our voyage into `emoji` it becomes possible to 🤔 about purely\n",
"symbollic programs, for fun, and art, of course.\n",
"\n",
" return\\\n",
" (⛓[⬇], ⛓[⬆]),\\\n",
" ⛓[slice(⬇, ⬆)],\\\n",
" ⛓[⬇:⬆]"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"after our voyage into `emoji` it becomes possible to :thinking_face: about purely\n",
"symbollic programs, for fun, and art, of course.\n",
"\n",
" return\\\n",
" (:chains:[:down_arrow:], :chains:[:up_arrow:]),\\\n",
" :chains:[slice(:down_arrow:, :up_arrow:)],\\\n",
" :chains:[:down_arrow:::up_arrow:]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "42913e85-ca95-49de-8865-04469cd7dc83",
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
" ⚾🟢 = \"abc\"\n",
" assert baseballgreen_circle == \"abc\""
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
" ⚾🟢 = \"abc\"\n",
" assert baseballgreen_circle == \"abc\""
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1da79348-a488-4fe8-9ef4-b2529e51b31e",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "pidgy 3",
"language": "python",
"name": "pidgy"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment