Wikifunctions
wikifunctionswiki
https://www.wikifunctions.org/wiki/Wikifunctions:Main_Page
MediaWiki 1.47.0-wmf.15
first-letter
Media
Special
Talk
User
User talk
Wikifunctions
Wikifunctions talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
TimedText
TimedText talk
Module
Module talk
Translations
Translations talk
Event
Event talk
Wikifunctions:Project chat
4
1184
299402
299296
2026-08-14T12:48:26Z
Virinas-code
2884
/* Wikifunctions as a programming system */ Reply
299402
wikitext
text/x-wiki
{{shortcut|[[WF:CHAT]]|[[WF:PC]]|[[WF:VP]]}}
__NEWSECTIONLINK__
[[Category:Help]] <!-- please do not remove this line -->
Welcome to the Project chat, a place to discuss any and all aspects of Wikifunctions: the project itself, policy and proposals, individual data items, technical issues, etc.
Other places to find help:
* [[Wikifunctions:Administrators' noticeboard]]
* [[Wikifunctions:Report a technical problem]]
* [[Wikifunctions:FAQ]]
{{Autoarchive resolved section
|age = 1
|archive = ((FULLPAGENAME))/Archive/((year))/((month:##))
|timeout=30
}}
{{Archives|{{#tag:div|<br />{{Flatlist|{{Special:PrefixIndex/WF:Project chat/Archive/|stripprefix=1|hideredirects=1}}
|class=mw-collapsible-content|style=font-size:92%;}}|class="mw-collapsible mw-collapsible-toggle mw-collapsed"}}
|prefix=WF:Project chat/Archive/
}}
==Discussion at [[Meta:Requests_for_comment/The_future_of_Abstract_Wikipedia|Meta Requests for comment: The future of Abstract Wikipedia]]==
[[File:Symbol watching blue lashes high contrast.svg|20px|link=|alt=]] You are invited to join the discussion at [[Meta:Requests_for_comment/The_future_of_Abstract_Wikipedia|Meta Requests for comment: The future of Abstract Wikipedia]]. <!-- Template:Please see --> [[User:Qcne|Qcne]] ([[User talk:Qcne|talk]]) 11:35, 14 July 2026 (UTC)
:Isn't it too early for this RFC? The project was released for public preview in March-only four months ago—and it has already demonstrated its technical feasibility. Furthermore, some of the examples cited in the RFC depend entirely on specific function choices. Since this is a community-built project, contributors should remain free to use the functions they prefer. Personally, I feel the repetition of words in every sentence simply shows that active contributors currently view this issue as a low priority. After all, fixing it would require rewriting sentences to use pronouns, or correcting them with a comma-separated list of occupations. [[User:Jsamwrites|John Samuel]] 13:37, 14 July 2026 (UTC)
::Thanks John. The project was approved in 2020 and WMF expected the first articles in 2023 so it is not four months old. Integration into language Wikipedias is planned for Q1 of the current annual plan. If it is too early to evaluate, it is too early to ship. I'd welcome your thoughts on the Meta RfC itself. [[User:Qcne|Qcne]] ([[User talk:Qcne|talk]]) 13:40, 14 July 2026 (UTC)
:<s>Speaking of "too early", [[abstract:Project:Response to English Wikipedia criticism]] has ~3 days left, so I'll hold off on commenting until then.</s> But on a first reading, I can see some of the same misunderstandings repeated. You could delete most of the text above your three proposals and get the same effect.<!--
--><br>edit: Yep, misunderstandings all the way down (the page). I've left [[meta:Requests_for_comment/The_future_of_Abstract_Wikipedia#c-YoshiRulz-20260716205200-Grapesurgeon-20260714140300|a brief comment]] since all my points had already been made by others. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 20:56, 16 July 2026 (UTC)
== Wikifunctions & Abstract Wikipedia Newsletter #257: Beyond syntactic tables ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-07-16|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we discuss syntactic tables and news in Types, we show some community blogposts and tools, we remind you of the Wikifunctions and Abstract Wikipedia events at Wikimania 2026, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
We also remind you that in the next weeks these newsletter reminders will be paused, and that they will resume in mid-August.
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 10:55, 17 July 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30755600 -->
== Update on Blockly editor ==
In case anyone is actually using [[User:YoshiRulz/Blockly|my external editor based on Blockly]] (there's no analytics so I have no idea): I cleared out my "papercut" backlog yesterday, fixing bugs, making exporting smoother, and adding more blocks necessary for NLG functions. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:35, 20 July 2026 (UTC)
:Great! I'll try it out now. [[User:So9q|So9q]] ([[User talk:So9q|talk]]) 18:15, 21 July 2026 (UTC)
== Building reproducible, computable phenotypes on WikiFunctions ==
Hello all! Very new to WikiFunctions, more involved in the Wikidata side of things, but I was thinking that WikiFunctions may be a great space for computable phenotypes. These are structures (lists of rules) used in medicine to determine if a person has or doesn't have a particular condition (type 2 diabetes, asthma, etc.). There is a constant issue in my field of recreating the wheel for these phenotypes and very few resources where they are openly available (there was PheKB but it isn't updated often and only contains natural language descriptions of the phenotypes and often no code or other information to reproduce). My thought process was that an algorithm for a computable phenotype would essentially be a list of synthetic (fake) patients with certain characteristics, and then the computable phenotype would be run, and it would return a list of patients who have that condition. The major use case would be allowing individuals to download these code snippets to increase general reproducibility in medical care and studies overall. Would it be possible to utilize WikiFunctions for this? [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 08:25, 23 July 2026 (UTC)
:({{Q|25203551}})<br>What system(s) are currently in use for doing such computations? Python scripts?<br>{{SITENAME}} currently does not cater to offline execution, so I imagine it wouldn't be suitable for medical ''practice'' where there are strict data protections. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 11:35, 23 July 2026 (UTC)
::Currently this involves something along the lines of a structured series of descriptors that make up the computable phenotype (ICD codes, RxNorm codes, lab test levels, age ranges, etc.), a fake "patient" (or list of "fake" patients) as input, and the patients that fit the computable phenotype criteria as output. In terms of systems currently in use, they are kind of-- everything. SQL, Java, SPARQL, Python, Perl, Ruby, etc. Currently I develop mostly using Python, so I would likely use that for implementation. And of course, yes, they would not be suitable for practice due to protections! For an example of an algorithm that I think could be useful to adapt, see: https://phekb.org/phenotype/type-2-diabetes-mellitus. [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 12:02, 23 July 2026 (UTC)
:::So your reference is a decision tree, and are each of the "questions" evaluated by looking up a property/element in the input? That could be translated into a Function relatively easily. Most examples I can think of are NLG-related, like [[Z36580]], but there are [[WF:Catalogue/Wikidata_operations#Real_life_information_retrieved_using_Wikidata|some simpler Functions]] which extract parts of a given Wikidata Item, and [[Z34840]] works with the representations of numbers. What is the structure of the input EMR? [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 13:54, 23 July 2026 (UTC)
::::Precisely-- I think most of these would be simple implementations, but good to generally have archived as most of them become lost media(-ish). Best-case, the input EMR would be a set of synthetic patients using the OMOP CDM (https://ohdsi.github.io/CommonDataModel/), the most common open data model in the space. It does mean it wouldn't be completely system agnostic, but it would most in the majority of situations. [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 14:07, 23 July 2026 (UTC)
:::::If you decide to go ahead with this, you should [[WF:Type_proposals#Templates|propose a new type]] since it looks like a simple [[Z881|list]] or [[Z883|dict]] won't cover it. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:31, 23 July 2026 (UTC)
:Did you look much into the possibility of encoding these in Wikidata somehow? Have [[d:WD:WikiProject Medicine]] / [[meta:Wiki Project Med]] investigated it before? [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:31, 23 July 2026 (UTC)
::I don't think so-- it could potentially be somewhat encoded in Wikidata-- main issue is that it uses a list of codes which Wikidata sometimes attaches to the same entity in ways that don't match up 1-to-1. And there may be drift in those codes over time, so the list of codes would have to be hard-coded. But there should generally be a way to link from the WikiFunction to Wikidata right? [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 22:06, 23 July 2026 (UTC)
:::Linking ''to WF'' from an Item on Wikidata [[d:WD:Wikifunctions/Development|is an open question]], beyond sitelinks of course. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 12:02, 24 July 2026 (UTC)
::::So maybe creating functions here makes the most sense for the time being? I want to make sure I'm following the rules as intended but would that be okay for now? (Creating one or two and then presenting to the community to see if things look acceptable?) [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 06:46, 25 July 2026 (UTC)
:::::Yes, you're welcome to try! --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 06:53, 25 July 2026 (UTC)
::::::Thanks! I've been thinking about this a little bit-- in terms of objects, it may make sense to have an object that is an OMOP CDM database (which is allowed by their licensing, as the database schema is open source). But I'm wondering if it should instead be an extension of a more generic database object? [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 11:06, 28 July 2026 (UTC)
== OWID's replacement for Extension:Graph ==
[[meta:OWID Gadget]] / [[c:Module:Owidslider]]<br>I'm currently watching the Wikimania talk "[https://wikimedia.eventyay.com/wm/wikimania2026/talk/CMPQQJ/ Bringing Interactive Graphs from Our World in Data to Wikipedia]" going through the latest iteration of their interactive graphs, and they seem to be in a good position now, including <abbr title="internationalisation">i18n</abbr>. I think it would be nice to use them in Abstract Wikipedia articles as well, but it's implemented as a Lua module + JS gadget. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 13:00, 23 July 2026 (UTC)
== Friday's talks at Wikimania ==
{{noping|Mahir256}} just finished his talk/workshop "[https://wikimedia.eventyay.com/wm/wikimania2026/talk/HYTQBF From Abstract Content to Concrete Text with Wikidata Lexemes]" on {{Q|136813071}}. You can [https://www.youtube.com/watch?v=hvpOFVZhgnE&t=24370s watch it on YouTube here] (though there were audio problems, '''volume warning''').
<br>The workshop immediately before that was "[https://wikimedia.eventyay.com/wm/wikimania2026/talk/TWGKWB/ Making indigenous languages ready for Wikifunctions]". Hello to anyone who came from there! [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:58, 24 July 2026 (UTC)
:@[[User:YoshiRulz|YoshiRulz]]: Thanks for highlighting these! There's also today's workshop [https://www.youtube.com/watch?v=nCVeXaAk77c on YouTube] about 90 minutes after the start of the stream, though that might not be as interesting to watch. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 13:28, 25 July 2026 (UTC)
== Testing an unconnected implementation ==
Hi everyone!
A few hours ago, I created [[Z38370|my first function]] together with [[Z38371|an unfinished Python implementation]]. When I wanted to test my implementation using the "Try this implementation" box in the bottom-right corner, I noticed that the button "Run function" was grayed out and there was a warning saying "This function has no connected implementations."
As it seems, you can only run an implementation if its corresponding function has at least one connected implementation. The implementation you want to run doesn't even have to be connected itself, as I can run the unconnected implementation [[Z12949]] without any problems, even when I modify its code in the editor.
Is this behavior intentional? And is there any way I can test my implementation? [[User:Tc14Hd|Tc14Hd]] ([[User talk:Tc14Hd|talk]]) 19:28, 28 July 2026 (UTC)
:Yeah, it's [[phab:T343559#11421293|a pointless limitation]]. I've connected the test for you. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 23:56, 28 July 2026 (UTC)
::Thanks! I knew I couldn't be the only one who noticed this problem... [[User:Tc14Hd|Tc14Hd]] ([[User talk:Tc14Hd|talk]]) 13:00, 29 July 2026 (UTC)
== [[Help:Categorization]] ==
Hi! Just wanted to let everyone know that I recently created [[Help:Categorization]] as a draft help page explaining how categories work. I'm new to Wikifunctions, but I used my knowledge of MediaWiki in general combined with some research to write it. If anyone would like to improve it, feel free to. [[User:Axolitl|Axolitl]] ([[User talk:Axolitl|talk]]) 04:32, 30 July 2026 (UTC)
:It's just a general MediaWiki categories guide. It doesn't have anything special for Wikifunctions, which doesn't really have categories in the main namespace. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 16:42, 30 July 2026 (UTC)
== Wikifunctions & Abstract Wikipedia Newsletter #258: Abstract Wikipedia at Wikimania ==
<div lang="en" dir="ltr" class="mw-content-ltr">There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-07-29|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we discuss the presentations and workshops at Wikimania, including a features feedback request based on what we heard there, and highlight new features shipped this week including diffs for Wikifunctions.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Enjoy the reading! [[m:user:Quiddity (WMF)|Quiddity (WMF)]] 19:05, 30 July 2026 (UTC) </div>
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30870212 -->
== Impact of labels translation ==
A lot of the edits on Wikifunctions are additions and changes of labels, descriptions, and aliases of functions, inputs, tests, and implementations. (I will subsequently call this "labels" for simplicity.)
At Wikimania 2026, I heard from editors in several languages that they were encouraged to translate Wikifunctions' labels, and it made me wonder: Are there reasons to think that editing those labels has impact on the usage of Wikifunctions and Abstract Wikipedia by people who speak these languages? In general, I am quite famous as a major supporter of translating everything imaginable, but there should also be priorities, so if editing those labels doesn't have impact, then perhaps editors should be encouraged to translate something more visible.
After English, [https://quarry.wmcloud.org/query/103687 the most common languages for editing labels] are German, French, Igbo, Italian, Indonesian, Bengali, Dutch, Japanese, Hindi, and Hebrew <small>([[User:Amire80/wikifunctionsanalytics|information about this data]])</small>.
Looking a bit more deeply into some of those:
* Hebrew labels were mostly contributed by @[[User:מקף|מקף]] (pronounced Maqaf), and a few were contributed by myself. I edit them mostly because I love seeing the UI translated as completely as possible, and since some object labels are integrated into the site's UI, they should be translated. Does this complete translation raise the usage of Wikifunctions by Hebrew speakers, though? I doubt it. Maqaf probably edits them because he creates some functions related to the Hebrew language, but that's just a guess, and I'd love to hear more about his motivation.
* The top editor of German labels is @[[User:Ameisenigel|Ameisenigel]], who is generally a major contributor to translations across many Wikimedia projects, so perhaps his motivation is similar to mine, but he does it much more than I do. He also edits the content of actual functions, implementations, and tests. Some of the other German label editors do almost nothing but editing labels, although some, like @[[User:Lucas Werkmeister|Lucas Werkmeister]] and of course @[[User:Denny|Denny]] also contribute to actual functions and implementations. But back to the main question: German is the top language for label translations thanks to [[User:Ameisenigel|Ameisenigel]]'s huge work, but does it, for example, impact the creation of abstract content that works in German? When I try to select German on most abstract articles, I usually don't see a fully translated article. But maybe I'm not searching well?
* The situation is a bit similar with French. @[[User:Jérémy-Günther-Heinz Jähnick|Jérémy-Günther-Heinz Jähnick]] is the top French label editor, but he makes almost no contributions to functions and implementations. The second top label editor is @[[User:VIGNERON|VIGNERON]], who does contribute quite a lot to functions and implementations. There are several other prolific French label editors, but most of them contribute little or nothing at all to functions and implementations. And as with German, I almost never see abstract articles fully translated into French.
* Igbo has shown disproportionate label editing activity. I don't know why exactly, but I guess that there was some event that encouraged people to write labels (if anyone knows more, please tell me). All the top 10 Igbo label editors only wrote labels and didn't do anything else with functions or implementations. There are quite a lot of [[Wikifunctions:Catalogue/Natural language operations/Igbo|Igbo language functions]], all of which were made by @[[User:Dolphyb|Dolphyb]], who contributed very little to translations. This, by itself, is not a problem at all: it's very common that programmers mostly write code and translators mostly translate. There is still the same question, though: do those language functions and massive label translations contribute to achieving Abstract Wikipedia's goal of generating Igbo content? I haven't seen evidence to support that, but I'd love to see it if anyone can present it.
* The situation with Indonesian is similar to the situation with Igbo, but there are [[Wikifunctions:Catalogue/Natural language operations/Igbo|much fewer language functions for Indonesian]].
So that's what I can glean. If I'm incorrect about anything or if you can add some more info, please speak up. Because of my interest in localization, I'll be very grateful to learn more. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 19:50, 30 July 2026 (UTC)
:Adding labels in other languages has several advantages for the project. To name a few
:* It is an easy introduction to Wikifunctions
:* it is good for the image of Wikifunctions and Abstract Wikipedia as not being English centric
:* Contributors of Wikifunctions should be able to add texts in their own languages, so translations main functions is vital for that. That includes labels, descriptions and inputs.
:Not many labels are translated yet and not many functions work yet for other languages than English at the moment. The community is still very small, but I hope both will grow over time. They can mutually benefit each other. [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 21:19, 30 July 2026 (UTC)
::@[[User:HenkvD|HenkvD]], I heard similar claims before, but it's to scrutinize them.
::{{tq|It is an easy introduction to Wikifunctions}} - and what does this introduction lead to? I haven't seen clear evidence that translating labels leads to other contributions or to using functions.
::{{tq|it is good for the image of Wikifunctions and Abstract Wikipedia as not being English centric}} - is it actually good? Evidently, many people in recent critical discussions about Wikifunctions and Abstract Wikipedia still think that it's English-centric.
::{{tq|Contributors of Wikifunctions should be able to add texts in their own languages, so translations main functions is vital for that. That includes labels, descriptions and inputs}} - it ''sounds'' vital; as I said, I support localization of everything in principle, and this is the main reason for thinking like that. However, this doesn't answer my question: what is the ''actual'' impact? Wikifunctions has been online for three years, so we should have seen something by now, and we aren't seeing anything.
::{{tq|Not many labels are translated yet}} - how do you define "many"? Thousands of labels were translated, and I think that it is "many". But, as you say, {{tq|not many functions work yet for other languages than English at the moment}} - so evidently, translating labels didn't lead to writing those functions, at least yet. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 21:43, 30 July 2026 (UTC)
:::Wikifunctions might be live for 3 years, but Abstract Wikipedia is only lie a few months. As it is early days for '''Language''' functions, and the first are made in English it still is English centric. THAT NEEDS TO CHANGE. Translations should help with that. [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 22:08, 30 July 2026 (UTC)
:See also [[Help:Multilingual]]. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 21:25, 30 July 2026 (UTC)
::Does it say anything about the ''impact'' of translating labels? I don't see it. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 21:44, 30 July 2026 (UTC)
:::No, I bring it up only as a possible explanation of translators' motives, and to point out where the documentation is should you want to improve it. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 22:00, 30 July 2026 (UTC)
:@[[User:Amire80|Amire80]]: I've seen folks at Wikimania use Abstract Wikipedia in their language and start and edit articles in Tyap, Japanese, and French. Having labels for those functions unlocks the Abstract Wikipedia to be used entirely in their language. --[[User:Denny|Denny]] ([[User talk:Denny|talk]]) 06:07, 31 July 2026 (UTC)
::I understand the general idea of what this is supposed to be. I wonder whether there is actual measurable impact.
::You give Tyap as a successful example, but it's in fact the example of the opposite. I found zero functions whose name is translated into this language. I found one implementation whose name is translated into Tyap, [[Z29740]], and also a few translated language names and type names. My ''intuition'' is that type names are actually among the most important things to translate here, but very few of them are translated at the moment, and I'm trying to talk about measurable impact here and not about intuition. And as you say in the newsletter, the Tyap contributor was able to do something, even though almost nothing is translated into his language.
::The label translation statistics for Japanese and French are very good, but seeing something at Wikimania is anecdotal; it's not measurable impact.
::So again: I understand the general idea of why localization is desirable. I've dedicated more than sixteen years of my life to promoting this idea, I keep doing it now, and I plan to keep doing for as long as my health allows me to do it. But here, I'm asking not about the idea, but about the impact. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 09:57, 31 July 2026 (UTC)
:::Hi {{ping|Amire80}}. I’m not skilled at programming, but I manage to handle the translation work—even if it isn’t perfect. I’m doing my bit to help out. [[User:Jérémy-Günther-Heinz Jähnick|Jérémy-Günther-Heinz Jähnick]] ([[User talk:Jérémy-Günther-Heinz Jähnick|talk]]) 22:29, 1 August 2026 (UTC)
::::Thank you! It's fine, not everyone has to know programming. I'm just wondering how much is it actually helping out. I'm not necessarily saying that it doesn't, but I do wonder how to measure that it does. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 05:50, 2 August 2026 (UTC)
:::@[[User:Amire80|Amire80]]: I don't even understand what you are asking for. Measuring what impact, and how? The Tyap editor was able to use it because he also spoke English. If he wouldn't have, he would have an even harder time to use the interface. --[[User:Denny|Denny]] ([[User talk:Denny|talk]]) 07:30, 2 August 2026 (UTC)
::::Does the translation of function labels into a language have a measurable impact on the usage of Wikifunctions and Abstract Wikipedia in that language?
::::For example, a lot of function labels are translated into Igbo. Does it mean that a lot of abstract articles are fully readable in Igbo?
::::Same question about German, French, Italian, etc. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 11:44, 2 August 2026 (UTC)
:::::Translation of labels makes it easier to understand the function side of Abstract Wikipedia, and easier to add and change the lemma. It does NOT have affect on the final text in the language. It may help in writing functions for that language. As Abstract Wikipedia is a fairly new project with few contributors the impact cannot be measured. How would you measure that anyway? [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 12:02, 2 August 2026 (UTC)
::::::They ''can'' make it easier to understand the function, but ''do'' they make it easier?
::::::For example, there was obviously some organized activity to translate labels into Igbo. Look at [https://quarry.wmcloud.org/query/107942 this query]: You can see that there was a lot of label editing activity in Igbo in February, March, April, May, June, and September 2024, and very little activity in other times. It was probably related to this event: [[:m:Event:Translation of catalogue of available functions on wikifunctions igbo]].
::::::There was also [https://diff.wikimedia.org/2026/01/16/introducing-data-and-functions-reflections-from-indonesian-data-and-technology-week-2025/ a similar event for Indonesian], and you can see in [https://quarry.wmcloud.org/query/107943 the statistics for Indonesian] that there was a peak of edits in December 2025, as described in the blog post.
::::::I don't know if these events were funded with money, but they were definitely ''organized''. Organization requires effort. And of course, effort was also invested into the actual translation. Effort should be invested if it has some impact, and if it has no impact, then it should be invested elsewhere.
::::::How would I measure it? Some examples:
::::::# Are there abstract articles that can actually be fully viewable in Igbo and Indonesian? As far as I can see, there aren't, but correct me if I'm wrong.
::::::# Are there many language functions that can generate text in Igbo and Indonesian, and are those functions actually used? The answer to the first question is "not many" ([[Wikifunctions:Catalogue/Natural language operations/Igbo|Igbo]], [[Wikifunctions:Catalogue/Natural language operations/Indonesian|Indonesian]]); the answer to the second and more important question is "they are probably not used". But again, correct me if I'm wrong.
::::::[[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 21:14, 4 August 2026 (UTC)
:::::::I think you're right. To help translation to make more impact, we could document which of our 39,000 objects are most important to translate. For example, the list of types, the list of the fragment functions most used on AW, and the list of functions most used in compositions on WF. Your query tool may be able to help make the third of these? --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 00:58, 5 August 2026 (UTC)
::::::::I'll try, thanks for the tip! [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 02:09, 5 August 2026 (UTC)
:Perhaps the more useful question is not the impact of contributing labels, but the impact of not contributing them. At present, a user who cannot search for a function using their own language is effectively required to use English (or another well-supported language). Such users do not create a visible failure case.
:It may therefore be difficult to measure the benefit of translated labels from usage statistics alone because the absence of translations creates a barrier before usage even begins.
:There may also be a feedback loop. English currently has the greatest discoverability, which means English-speaking contributors are more likely to notice when a function cannot be found, and to add aliases or improve labels accordingly. This may mean that English has a higher proportion of functions with aliases, and typically more aliases for any such function. Languages with less discoverability have fewer opportunities for this kind of positive feedback. [[User:GrounderUK|GrounderUK]] ([[User talk:GrounderUK|talk]]) 10:09, 5 August 2026 (UTC)
::The questions to ask about this are: which languages are the most successful ones in terms of abstract articles translation? What made them successful? Can it be replicated?
::But that would be a topic for a separate thread.
::Here, I'm wondering about the impact of what people do invest their effort in. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 11:04, 5 August 2026 (UTC)
== Contributing to language functions 1: Language Fragments ==
At Wikimania, @[[User:Dnshitobu|Dnshitobu]] recommended cloning a page like [[User:Dnshitobu/Dagbani Fragments]] and filling it with my own language. If I understand correctly, it's supposed to help to create functions for handling my language.
I created [[User:Amire80/Hebrew Fragments]] and started filling it. There are a bunch of problems with it, but let's say that I can complete it. Is it actually useful? Once it's complete, what do I do with it?
More broadly, if it is useful, is there a written guideline anywhere that recommends doing it? If I didn't visit Wikimania, I wouldn't know about it. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 22:10, 30 July 2026 (UTC)
:From [[WF:Status_updates/2026-07-29#Abstract_Wikipedia_at_Wikimania|this week's newsletter]]: <q>[Dnshitobu's] main proposal is that editors can create simple wikitext tables of example fragments in their language so that others could later do the technical work of setting up the lexemes and NLG functions.</q> The next step is to correlate your example sentences to the top-level NLG functions, then add 1 or 2 test cases to each function from your table.<br>I don't believe {{noping|Dnshitobu}} wrote up the process anywhere on-wiki, but that would be worth doing. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 22:30, 30 July 2026 (UTC)
::OK, I can try to do it.
::However, I should mention that the examples work kind of well in English, and perhaps they work in Dagbani, but they don't translate easily into Hebrew. Different nouns need different prepositions some letters require morphology transformations and some don't, etc. It cannot really be solved with a few basic concatenations as it was probably done in English.
::The same is true for probably most other languages. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 23:49, 30 July 2026 (UTC)
::Also, who do I notify when it's ready? [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 00:58, 31 July 2026 (UTC)
:::[[WF:Requests for connection and disconnection]] [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 01:15, 31 July 2026 (UTC)
::::But these are not functions or implementations. These are just example strings. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 09:58, 31 July 2026 (UTC)
:::::Right, you have to create test cases from them. For example, the "part of" sentences #7 and #8 correspond to [[Z34637]], so start by adding a test there. Then create a new function with the same shape as [[Z34867]] and add all your sentences to it as tests. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 17:49, 31 July 2026 (UTC)
::::::I think people should get help also if they can just write down how a fragment looks like for a specific language. So it should be not required to create a test case. So far I am not good in implementing functions in Wikifunctions. In the last days I have thinked about how to find a good way to define the fragments if the inputs are modified. This is difficult and I am not sure what is the best way. In the past I proposed [[User:Hogü-456/Decision table for Fragment experiments|decision tables]] for it. From my point of view more ideas and ways how to implement functions are needed as I expected more content in more languages in Abstract Wikipedia so far. It seems to me like it is too complicated to contribute to Wikifunctions at the moment. [[User:Hogü-456|Hogü-456]] ([[User talk:Hogü-456|talk]]) 21:31, 11 August 2026 (UTC)
== Contributing to language functions 2: Natural language operations ==
At [https://meta.wikimedia.org/wiki/Requests_for_comment/The_future_of_Abstract_Wikipedia#c-YoshiRulz-20260730202700-Amire80-20260730200900 this comment], @[[User:YoshiRulz|YoshiRulz]] recommended using pages like [[Wikifunctions:Catalogue/Natural language operations/Hebrew]] to see what functions are missing.
What can I actually do with that table? Is there a guide for writing such functions and fitting them into the NLG system?
Is this much better than something like [[User:Dnshitobu/Dagbani Fragments]], which I've mentioned in another comment on this talk page? Or can both be used? [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 22:17, 30 July 2026 (UTC)
:The guide is at [[User:DSantamaria-WMF/Guide: Working with Z14294]] ({{ping|DSantamaria-WMF}} why is this not in Helpspace?), and mirrored in [[toolforge:abstract-data]] IIRC.<br>You can use whatever organisational method you find easiest. (Or if you're lucky enough to have someone to collaborate with, find consensus.) Starting with a Wikitext table means you're not forced to learn about {{Z|14294}} and function creation before you can start working. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 22:34, 30 July 2026 (UTC)
::About the guide, I just end that guide one week ago and I was asking for some feedback on its correctness, once I have some feedback on that I will move it to the proper space.
::And definitely the tool is meant to be used for those purposes (finding all the [https://www.wikifunctions.org/view/en/Z14294 Z14294] that needs coverage in a specific language for example). Let me know if I can help with that. [[User:DSantamaria-WMF|DSantamaria-WMF]] ([[User talk:DSantamaria-WMF|talk]]) 05:36, 31 July 2026 (UTC)
:On [[Abstract:User:HenkvD/Tasks per language]] I drafted a list of tasks per languages and per language fragment. Feel free to comment on this draft. [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 10:17, 31 July 2026 (UTC)
::Linking to the topic two above, one extra thing for Tasks per Language could be a link to a (sectioned) list of ZIDs that are most important to translate. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 13:22, 5 August 2026 (UTC)
== On a set type ==
In [[WF:TP]], sets were refused as an independent type (and we are redirected towards using Typed lists). After adding many functions relative to hereditary sets and von Neumann ordinals, I believe a proper hereditary set type could be welcome on Wikifunctions. Here is the rationale behind this:
* In its current state the Wikifunctions composition language lacks basic arithmetic operations. It is interesting to provide a set-based "fallback" for those, even if its performance makes it rarely used. One of Wikifunction's goals is to "Imagine a programming system that allows us to make the next big leap in knowledge representation"<ref group="set">[[Wikifunctions:About]]</ref>, having a proper representation of natural numbers is a good start.
* Set operations are the basis of mathematics. Mathematically, natural numbers are typically defined with sets.<ref group="set">[[w:Set-theoretic definition of natural numbers]]</ref> Note that these mathematical sets are well defined ''hereditary sets'': sets that only contain other hereditary sets or are the empty set.
* Currently Typed list(Object) is the best available representation of hereditary sets. They are however unclear (Object could be anything, while hereditary sets can't contain anything), and a pain to document: every function performing arithmetic using set representation needs to write "von Neumann ordinals represented as hereditary sets"; simply making the input type "Hereditary set" is a much cleaner and clear solution.
* Hereditary sets can easily be defined as Typed list(Hereditary set). I am however unsure wether this kind of recursive type is possible in Wikifunctions.
* Hereditary sets have all the characteristics of a normal type (a validator, an equality function<ref group="set">{{Z+|Z34273}}</ref>, and even type converters<ref group="set">{{Z|Z39064}}'s <code>to_set</code> function</ref>). Making a proper type for them avoids repetitive work and allow for better integration in the Wikisource ecosystem. Note that all these functions are different from their Typed list equivalents (equality ignores duplicates, type converters return set objects and not list objects).
I would love to see a proper hereditary set type being discussed. If this isn't the right place, please tell me, I'm quite new to the type proposal process :) [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 20:30, 8 August 2026 (UTC)
:Another use is to avoid confusion, such as between {{Z|Z34270}} and {{Z|Z34273}}, which has already caused issues before.<ref group="set">[[Talk:Z36677#Wrong set equality]]</ref> [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 20:32, 8 August 2026 (UTC)
:IMO being "reliant" on code Implementations for arithmetic isn't a problem. Von Neumann ordinals are useful as a mathematical foundation but not as a computational one. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 05:18, 9 August 2026 (UTC)
:After further work on von Neumann ordinals related functions, it appears Wikifunctions' builtin type converter from a Python list to a Typed list really struggles with deeply nested lists. I believe having a strong type converter for hereditary sets can really help with fast computations. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 00:06, 13 August 2026 (UTC)
:I don't have the whole answer, but here's some information to start.
:> Hereditary sets can easily be defined as Typed list(Hereditary set). I am however unsure wether this kind of recursive type is possible in Wikifunctions.
:This is possible! All of the needed features exist in Wikifunctions. If you try to define this type and find it's not possible, then that should be filed as a bug in Wikifunctions (and one we will triage fix through the normal channels).
:I also want to set some expectations. While Wikifunctions can (barring bugs?) absolutely represent a hereditary set type, operations on that type will not necessarily have the expected asymptotic performance characteristics. Generally, the ZObject language specification doesn't allow for an object to have an arbitrary number of members, so any container type will end up relying on some kind of recursively-defined structure like WF's own List type. Practically, this means that the composition language could never do something like an O(1) set lookup.
:That said, I also want to point you to code converters, which would allow the hereditary set type to be converted to a more efficient representation inside of the JS and Python code executors. That's a secondary concern for after the type exists.
:Happy to discuss further! [[User:CMassaro (WMF)|CMassaro (WMF)]] ([[User talk:CMassaro (WMF)|talk]]) 16:02, 13 August 2026 (UTC)
::Hi! I'm guessing the proper way to discuss this would be to make a draft type proposal? I still have some free time left on my holiday and I would love to develop that idea further :)
::I'm aware of performance limitations; my goal is to rely on composition only as some kind of ''theoretical fallback'' while all performance intensive computation is done with code implementations. That way what I make can be "well-defined" and fast at the same time (ideally...). [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 21:38, 13 August 2026 (UTC)
:::Yes, that makes sense. Are you on IRC? #wikipedia-abstract is a very friendly and helpful group; if you're looking to make a new type, that would be a good place to get pointers. [[User:CMassaro (WMF)|CMassaro (WMF)]] ([[User talk:CMassaro (WMF)|talk]]) 09:36, 14 August 2026 (UTC)
<references group="set" />
== Wikifunctions & Abstract Wikipedia Newsletter #259: Congratulations Jules*. An apple is a fruit ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-08-05|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we congratulate Wikimedian of the Year and we discuss his favourite article in relation to Abstract Wikipedia, we introduce a new Type of function on Wikifunctions, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
We also remind you that in the next weeks these newsletter reminders will be paused, and that they will resume in mid-August.
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 13:19, 10 August 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30870212 -->
: {{tq|Given that they are stored as persistent objects, their anonymity is kinda defeated, but it may be useful for testing and documentation purposes.}} Not exactly sure what the point is, then, since we'd still need the same amount of documentation in the description to say which function this is a nonce for. [[User:Aaron Liu|Aaron Liu]] ([[User talk:Aaron Liu|talk]]) 17:55, 10 August 2026 (UTC)
::You can use them without creating a persistent object, [https://www.wikifunctions.org/wiki/Z801?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z801%22%2C%22Z801K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z39025%22%2C%22Z39025K1%22%3A%5B%22Z38546%22%2C%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z38926%22%2C%22Z38926K1%22%3A%22Z30795%22%2C%22Z38926K2%22%3A%22%5D%5D%22%7D%2C%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z38926%22%2C%22Z38926K1%22%3A%22Z30035%22%2C%22Z38926K2%22%3A%22%5B%5B%22%7D%5D%2C%22Z39025K2%22%3A%7B%22Z1K1%22%3A%22Z11%22%2C%22Z11K1%22%3A%22Z1002%22%2C%22Z11K2%22%3A%22currying%22%7D%7D%7D example]. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 21:54, 10 August 2026 (UTC)
::: Ooh, that's neat. [[User:Aaron Liu|Aaron Liu]] ([[User talk:Aaron Liu|talk]]) 00:17, 11 August 2026 (UTC)
== Wikifunctions as a programming system ==
With [[Z38546|lambda]] and half<ref group="note">For it to be considered complete, shouldn't it take the environment in which to evaluate? Which reminds me, where's local variables in composition? Sure, it can be emulated via an [[w:Immediately invoked function expression|IIFE]], but how does that look like? So, macros as well. I look forward to how a generalized, multilingual Lisp interpreter function would look like..</ref>-of-an-[[Z38590|eval]], the runtime environment of Wikifunctions now resembles a somewhat less [[w:Greenspun's tenth rule|poor LISP]]. Whereas the runtime, as it stands now, is somewhat reminiscent of [[w:Smalltalk|Smalltalk]], [[w:Self (programming language)|Self]] and others, an [[w:object-oriented programming|object-oriented programming]] [https://arxiv.org/abs/2302.10003 ''system'']. <ref group="note">How I wish there was a Wikipedia article about programming systems in this sense... </ref> I wonder: how far/well the ''theory'' (in the sense of [[w:programming language theory|programming language theory]], [[w:semantics (programming languages)|semantics]] and such) behind Wikifunctions have been developed, whether that has been documented somewhere (beyond [[WF:Function model|Function model]]) or it still resides [[w:tacit knowledge|in the minds]] of the implementors for now, which direction<ref group="note">e.g. [[w:Metaobject#Metaobject protocol|Metaobject protocol]] (quite relevant, since it's object-oriented), higher-[[w:Kind (type theory)|kind]]ed types and so on</ref> you wish to develop this system and so on; where such discussions can take place.
Among the [https://meta.wikimedia.org/wiki/Abstract_Wikipedia/Goals#Secondary_goals secondary goals] is: <q>Faster development of new programming languages due to accessing a wider standard library (or repository) of functions in a new dedicated wiki.</q> For which we should have categorized and isolated the portion of functions (and objects), to be made available seperately as self-contained/sufficient collections, that are most relevant to implementing programming languages/systems. Has (if so, how much) there already been any work in this direction?
Since Wikifunctions aims to be natural-language- as well as programming-language-[[w:agnostic (data)|agnostic]], it should be agnostic of any particular representation as well. Thus it should work with different representations (whether it's the underlying (JSON) representation of the objects, the specific choice of numberings, type system or even ontology) and be convertible among equivalence classes of representations (and conceptualizations?). It's this level of generality I'm quite interested about, and wish to have some in-depth discussion (here, insofar relevant to this project and elsewhere).
----
<references group="note"/>
[[User:Smlckz|Smlckz]] ([[User talk:Smlckz|talk]]) 11:31, 12 August 2026 (UTC)
:Hi @[[User:Smlckz|Smlckz]]! I am really interested in the viability of Wikifunctions as a programming system too, but I don't think you're in a for a great experience... While my experience here is quite limited, I worked a lot on a major issue that still bothers me: the composition language is incapable of basic arithmetic. If you look into [[Wikifunctions:Reserved ZIDs]], you'll notice that there isn't any built in implementation for addition, subtraction, and there isn't even a builtin type for Natural numbers. This leads to quite a few fundamental issues, like the fact that the built-in {{Z|80}} depends on the non-built-in {{Z|13518}}...
:Strings aren't much better: the only core functions to manipulate them, {{Z|886}} and {{Z|888}} have been deprecated.
:And while [[Wikifunctions:Function model]] is a great start it is out of date and is nowhere complete enough to be considered a proper specification. If you want any information as to how evaluation and the object model actually work you have to look into the Gitlab repos for the current implementation.
:Last thing, the {{Z|823}} function is a total breach of purity, and allows functions to get information about there own implementation, the environment they run in, etc. This can even be used, I believe, as a source of randomness.
:I have great hopes that Wikifunctions will become a strong programming system one day, but as of now, it's far behind any other functional programming languages. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 00:15, 13 August 2026 (UTC)
::I hope that folks who are interested, like you two, can help with moving in that direction.
::The development team is not focusing on that secondary goal currently. That shouldn't preclude anyone else from doing so.
::How does Z823 break purity?
::Honest question: do we need closure for anonymous functions, or is alpha conversion sufficient? --[[User:DVrandecic (WMF)|DVrandecic (WMF)]] ([[User talk:DVrandecic (WMF)|talk]]) 12:25, 13 August 2026 (UTC)
:::Sorry for the use of the maybe unclear term purity, I stole it from the Nix language :)
:::Purity would be the principle that the same inputs always return the same outputs, independently from the running environement. {{Z|823}} does the exact opposite by literally giving you information about the outside environment. This constitues a source of randomness that I really do not appreciate from a theoretical standpoint, as it potentially introduces painful runtime errors (race conditions even, albeit only in extreme cases) which no one likes to debug.
:::I personally think that it is quite an useless function (4 uses in mainspace), but if people really want to keep it, I propose to restrict its usage to tests or make any function using it be marked as "impure" too.
:::To answer your last question, I don't really understand it --- I'm sorry for showing my lack of computer science basics here :') If you wish to explain it further, I'd be happy to give you my opinion. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 21:44, 13 August 2026 (UTC)
:::{{tq|Honest question: do we need closure for anonymous functions, or is alpha conversion sufficient?}} If we want to evolve towards a proper [[w:rewriting|rewriting]] system, conversion and reduction rules from lambda calculus might suffice. But, for now, if I have understood the current system correctly, we'd need to have closures, if only for reasons of efficiency. Imagine big, non-persistent, runtime objects, being referenced multiple times in anonymous functions, after beta reduction, to get represented with that many copies in their bodies.. (The evaluator might not be affected, but once these anonymous functions need to persist or even just pass through programming language boundaries, forcing normalization/serialization..) So, if we want to support anonymous functions as first-class objects of the kind of system we currently have, closures are essential. [[User:Smlckz|Smlckz]] ([[User talk:Smlckz|talk]]) 03:09, 14 August 2026 (UTC)
::{{tq|I worked a lot on a major issue that still bothers me: the composition language is incapable of basic arithmetic.}} When anonymous functions work better, we should be able to implement [[w:Church encoding|Church numerals]] using them. Similarly, when we'll have support for sum types, we could use that to implement [[w:Peano axioms|Peano arithmetic]] (as linked list of unit type). While these are interesting for theoretical purposes, we can't rely on them in practice, due to the kind of runtime we have here; it'd be too inefficient for any non-trivial use. Like functions can have multiple implementations, types could do the same, giving rise to typeclasses.. <small>The aspiration towards purity gives rise to expectations of realization of [[w:Curry–Howard correspondence|program-proof equivalence]], in having proofs of theorems hosted alongside ordinary functions (and perhaps proofs of correctness of such ordinary functions), but that's too far in the future for us to consider.</small> We can then have performant implementations of types alongside theoretically interesting ones. {{tq|This leads to quite a few fundamental issues, like the fact that the built-in {{Z|80}} depends on the non-built-in {{Z|13518}}...}} Which does sound quite backwards. I'd've expected to see a built-in natural number type, with byte defined as a derived type out of it. (For comparison, here's what Common Lisp came up with: [https://metaspec.dev/t_integer.html] [https://metaspec.dev/t_unsigned-byte.html]) {{tq|Last thing, the {{Z|823}} function is a total breach of purity, and allows functions to get information about there own implementation, the environment they run in, etc.}} This information can also be used to choose more performant (or, for a particular environment, a better-suited) implementation amongst available. I don't expect this system to be able uphold the level of purity expected from a purely functional programming language, but only up to a certain degree: that most functions won't directly need to rely on such escape hatches. (Compare Rust's <code>unsafe</code>. Similarly, consider the caveats of [https://wiki.haskell.org/index.php?title=Hask '''Hask'''].) [[User:Smlckz|Smlckz]] ([[User talk:Smlckz|talk]]) 17:41, 13 August 2026 (UTC)
:::Church numerals are an idea I love, and Peano arithmetic too! My initial attempt with von Neumann ordinals quickly stopped because of speed concerns :') Typeclasses is an idea I had a while ago (although I phrased it as Single Type, Multiple Representations) and could further improve Wikifunctions' abstractness and maybe even performance. I agree the lack of a number type is a major flaw in the system. Last point, I think implementation choice should mostly be done by the system automatically; what you call <code>unsafe</code> is similar to the concept of impurity in Nix, where calling an impure function makes the function calling it impure too. I believe an automatic explicit visible marking of such impure functions could help prevent their abusive use.
:::Given that some people seem interested in the ideas we discussed but it isn't a main focus at the moment, would you like us to discuss further ideas such as the writing of a formal Wikifunctions ''specification'', some new type proposals for an integer type, and maybe even develop the idea of typeclasses?
:::If you'd like a more dynamic discussion I have Discord if needed (hope it's not illegal to say that!) [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 21:52, 13 August 2026 (UTC)
::::I'd like to discuss, along with participation from implementors, such that we don't build [[wikt:castle in the air|castle in the air]]. With how things are in flux, designing a specification now might not be a good idea. At least, we'd need multiple competing full-featured implementations such that the need for specification can naturally arise. We can certainly discuss existing implementations of various programming systems: what to pick, what to discard and what to innovate in our circumstances.. <small><small>I don't use Discord. You can talk with me on [[w:IRC|IRC]]: find me in the Libera.chat channel <code>#wikipedia-abstract</code>. If you don't have an IRC client set up, you can use Libera's [https://libera.chat/guides/clients web clients]. Mention the time (with timezone) you'll be available. We can discuss which (better or worse) protocol/platform to use for further communication there. </small></small> [[User:Smlckz|Smlckz]] ([[User talk:Smlckz|talk]]) 04:16, 14 August 2026 (UTC)
:::::I do have IRC! <code>virinas-code</code>, I use the Konversation client. You do seem to have a lot more experience than me with functional programming so I'll be happy to discuss ideas with you :)
:::::I'm typically available from 2PM to 8PM and from 11PM to 2AM-4AM in the Europe/Paris timezone. I think one of the first thing we should do is fix the built-in lack of a number type. A specification can come much later, but we do need to reinforce existing documentation (e.g. by completing [[Wikifunctions:Function model]]). [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 12:48, 14 August 2026 (UTC)
== Wikifunctions & Abstract Wikipedia Newsletter #260: Shoutout to User:99of9 ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-08-13|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we congratulate our own User:99of9 for his extensive work with the Wikifunctions & Abstract Wikipedia communities, we discuss what happened at Wikimania, we introduce a document for interested communities to join Abstract Wikipedia, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 15:55, 13 August 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30870212 -->
b6opklp9pg2dds0bpa6f63pfr0x5wd5
Z11248
0
15612
299406
297059
2026-08-14T13:37:52Z
99of9
1622
299406
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z11248"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z11248K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Enter an Igbo word"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Wort in Igbo"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20",
"Z38940"
],
"Z8K4": [
"Z14",
"Z11249"
],
"Z8K5": "Z11248"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Adds a preposition 'na' to a word (Igbo)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1014",
"Z11K2": "Na-gbakwụnye mbụụzọ 'na' na okwu"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "füge Präposition 'na' zu einem Wort hinzu (Igbo)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"elide na",
"n' added to Igbo word",
"add na or n' to Igbo word",
"prefix Igbo word with na or n'"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Add na before the word when the word begins with a consonant and adds n' before the word when the word begins with a vowel."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1014",
"Z11K2": "Tinye 'na' tụpụ okwu mgbe okwu na-amalite na mgbochiume, ma tinye kwa (n') tụpụ okwu Mgbe okwu na-amalite na ụdaume."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "fügt 'na' vor einem Wort ein, wenn es mit einem Konsonant beginnt und n', wenn es mit einem Vokal beginnt"
}
]
}
}
tuzstji5xk4r0fb5zlag7q95i2pfen3
299408
299406
2026-08-14T13:40:21Z
99of9
1622
Added Z39441 to the approved list of test cases
299408
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z11248"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z11248K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Enter an Igbo word"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Wort in Igbo"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20",
"Z38940",
"Z39441"
],
"Z8K4": [
"Z14",
"Z11249"
],
"Z8K5": "Z11248"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Adds a preposition 'na' to a word (Igbo)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1014",
"Z11K2": "Na-gbakwụnye mbụụzọ 'na' na okwu"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "füge Präposition 'na' zu einem Wort hinzu (Igbo)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"elide na",
"n' added to Igbo word",
"add na or n' to Igbo word",
"prefix Igbo word with na or n'"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Add na before the word when the word begins with a consonant and adds n' before the word when the word begins with a vowel."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1014",
"Z11K2": "Tinye 'na' tụpụ okwu mgbe okwu na-amalite na mgbochiume, ma tinye kwa (n') tụpụ okwu Mgbe okwu na-amalite na ụdaume."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "fügt 'na' vor einem Wort ein, wenn es mit einem Konsonant beginnt und n', wenn es mit einem Vokal beginnt"
}
]
}
}
72i40uiqlavjj6p4jhw0i0iuopj1dum
Wikifunctions:Catalogue/Natural language operations/English
4
41934
299359
299060
2026-08-14T12:05:04Z
Denny
81
/* Nouns and pronouns */
299359
wikitext
text/x-wiki
==Sentence and fragment generation==
===General-purpose===
* {{Z+|Z26088}}
* {{Z+|Z23410}}
* {{Z+|Z21765}}
* {{Z+|Z26570}}
* {{Z+|Z32199}}
* {{Z+|Z32230}}
* {{Z+|Z32244}}
* {{Z+|Z32249}}
===Special use cases===
* {{Z+|Z20597}}
* {{Z+|Z28784}}
==Morphology==
===Nouns and pronouns===
* {{Z+|Z11089}}
* {{Z+|Z11218}}
* {{Z+|Z22490}}
( {{Z+|Z39430}}
====Possessives====
* {{Z+|Z11302}}
* {{Z+|Z19125}}
===Verbs===
* {{Z+|Z24676}}
* {{Z+|Z24687}}
* {{Z+|Z13177}}
* {{Z+|Z13087}}
===Adjectives and adverbs===
* {{Z+|Z11795}}
* {{Z+|Z12203}}
** {{Z+|Z29851}}
*** {{Z+|Z29852}}
===Articles===
* {{Z+|Z21739}}
** {{Z+|Z32314}}
* {{Z+|Z32935}}
* {{Z+|Z32929}}
* {{Z+|Z32645}}
===Word derivation===
* {{Z+|Z11390}}
* {{Z+|Z11646}}
* {{Z+|Z13280}}
* {{Z+|Z13262}}
===Other===
* {{Z+|Z13254}}
==Numbers==
* {{Z+|Z13587}}
* {{Z+|Z14526}}
* {{Z+|Z13596}}
* {{Z+|Z14726}}
* {{Z+|Z14531}}
* {{Z+|Z14523}}
==Other==
* {{Z+|Z23827}}
* {{Z+|Z18852}}
* {{Z+|Z18859}}
== Function usage on Abstract Wikipedia ==
See function usage on Abstract Wikipedia on this [https://abstract-data.toolforge.org/?lang=en tool for en].
==Configurations==
{{LanguageConfigurations|Language=en|Language2=en-au|Language3=en-gb|Language4=en-us}}
== Syntactic tables (experimental) ==
For more about Syntactic tables see the [[Wikifunctions:Catalogue/Natural language operations/Global language functions#Language functions for table|language independent functions for tables]]. These are the ones specific for English. Syntactic tables are experimental and may be deprecated entirely, especially in favor of syntactic functions.
=== Nouns ===
* Example noun: {{Z|Z36617}}
* {{Z+|Z36607}}
* {{Z+|Z36754}}
* {{Z+|Z36759}}
* {{Z+|Z36762}}
* {{Z+|Z36766}}
* {{Z+|Z36770}}
* {{Z+|Z36969}}
* {{Z+|Z37080}}
=== Determiners ===
* specific determiners
** {{Z+|Z36781}}
** {{Z+|Z36782}}
** {{Z+|Z36783}}
** {{Z+|Z36784}}
** {{Z+|Z36791}}
* {{Z+|Z36785}}
* {{Z+|Z36792}}
=== Noun phrase ===
* {{Z+|Z36798}}
* {{Z+|Z36925}}
* {{Z+|Z36935}}
=== Adjective ===
* example adjective: {{Z|Z36968}}
* {{Z+|Z36972}}
* {{Z+|Z36975}}
* {{Z+|Z36978}}
* {{Z+|Z37076}}
=== Sentence ===
* {{Z+|Z37083}}
* {{Z+|Z37086}}
* {{Z+|Z36939}}
* {{Z+|Z36953}}
[[Category:Lists of functions]]
[[Category:English]]
pnmpfbjd36bxkiofme5lmnwxif90rs5
299361
299359
2026-08-14T12:06:04Z
Denny
81
/* Nouns and pronouns */
299361
wikitext
text/x-wiki
==Sentence and fragment generation==
===General-purpose===
* {{Z+|Z26088}}
* {{Z+|Z23410}}
* {{Z+|Z21765}}
* {{Z+|Z26570}}
* {{Z+|Z32199}}
* {{Z+|Z32230}}
* {{Z+|Z32244}}
* {{Z+|Z32249}}
===Special use cases===
* {{Z+|Z20597}}
* {{Z+|Z28784}}
==Morphology==
===Nouns and pronouns===
* {{Z+|Z11089}}
* {{Z+|Z11218}}
* {{Z+|Z22490}}
* {{Z+|Z39430}}
====Possessives====
* {{Z+|Z11302}}
* {{Z+|Z19125}}
===Verbs===
* {{Z+|Z24676}}
* {{Z+|Z24687}}
* {{Z+|Z13177}}
* {{Z+|Z13087}}
===Adjectives and adverbs===
* {{Z+|Z11795}}
* {{Z+|Z12203}}
** {{Z+|Z29851}}
*** {{Z+|Z29852}}
===Articles===
* {{Z+|Z21739}}
** {{Z+|Z32314}}
* {{Z+|Z32935}}
* {{Z+|Z32929}}
* {{Z+|Z32645}}
===Word derivation===
* {{Z+|Z11390}}
* {{Z+|Z11646}}
* {{Z+|Z13280}}
* {{Z+|Z13262}}
===Other===
* {{Z+|Z13254}}
==Numbers==
* {{Z+|Z13587}}
* {{Z+|Z14526}}
* {{Z+|Z13596}}
* {{Z+|Z14726}}
* {{Z+|Z14531}}
* {{Z+|Z14523}}
==Other==
* {{Z+|Z23827}}
* {{Z+|Z18852}}
* {{Z+|Z18859}}
== Function usage on Abstract Wikipedia ==
See function usage on Abstract Wikipedia on this [https://abstract-data.toolforge.org/?lang=en tool for en].
==Configurations==
{{LanguageConfigurations|Language=en|Language2=en-au|Language3=en-gb|Language4=en-us}}
== Syntactic tables (experimental) ==
For more about Syntactic tables see the [[Wikifunctions:Catalogue/Natural language operations/Global language functions#Language functions for table|language independent functions for tables]]. These are the ones specific for English. Syntactic tables are experimental and may be deprecated entirely, especially in favor of syntactic functions.
=== Nouns ===
* Example noun: {{Z|Z36617}}
* {{Z+|Z36607}}
* {{Z+|Z36754}}
* {{Z+|Z36759}}
* {{Z+|Z36762}}
* {{Z+|Z36766}}
* {{Z+|Z36770}}
* {{Z+|Z36969}}
* {{Z+|Z37080}}
=== Determiners ===
* specific determiners
** {{Z+|Z36781}}
** {{Z+|Z36782}}
** {{Z+|Z36783}}
** {{Z+|Z36784}}
** {{Z+|Z36791}}
* {{Z+|Z36785}}
* {{Z+|Z36792}}
=== Noun phrase ===
* {{Z+|Z36798}}
* {{Z+|Z36925}}
* {{Z+|Z36935}}
=== Adjective ===
* example adjective: {{Z|Z36968}}
* {{Z+|Z36972}}
* {{Z+|Z36975}}
* {{Z+|Z36978}}
* {{Z+|Z37076}}
=== Sentence ===
* {{Z+|Z37083}}
* {{Z+|Z37086}}
* {{Z+|Z36939}}
* {{Z+|Z36953}}
[[Category:Lists of functions]]
[[Category:English]]
60fs0thnpswz8dsjdky8vya06gv86a4
299390
299361
2026-08-14T12:28:28Z
Denny
81
/* Nouns and pronouns */
299390
wikitext
text/x-wiki
==Sentence and fragment generation==
===General-purpose===
* {{Z+|Z26088}}
* {{Z+|Z23410}}
* {{Z+|Z21765}}
* {{Z+|Z26570}}
* {{Z+|Z32199}}
* {{Z+|Z32230}}
* {{Z+|Z32244}}
* {{Z+|Z32249}}
===Special use cases===
* {{Z+|Z20597}}
* {{Z+|Z28784}}
==Morphology==
===Nouns and pronouns===
* {{Z+|Z11089}}
* {{Z+|Z11218}}
* {{Z+|Z22490}}
====Possessives====
* {{Z+|Z11302}}
* {{Z+|Z19125}}
===Verbs===
* {{Z+|Z24676}}
* {{Z+|Z24687}}
* {{Z+|Z13177}}
* {{Z+|Z13087}}
===Adjectives and adverbs===
* {{Z+|Z11795}}
* {{Z+|Z12203}}
** {{Z+|Z29851}}
*** {{Z+|Z29852}}
===Articles===
* {{Z+|Z21739}}
** {{Z+|Z32314}}
* {{Z+|Z32935}}
* {{Z+|Z32929}}
* {{Z+|Z32645}}
===Word derivation===
* {{Z+|Z11390}}
* {{Z+|Z11646}}
* {{Z+|Z13280}}
* {{Z+|Z13262}}
===Other===
* {{Z+|Z13254}}
==Numbers==
* {{Z+|Z13587}}
* {{Z+|Z14526}}
* {{Z+|Z13596}}
* {{Z+|Z14726}}
* {{Z+|Z14531}}
* {{Z+|Z14523}}
==Other==
* {{Z+|Z23827}}
* {{Z+|Z18852}}
* {{Z+|Z18859}}
== Function usage on Abstract Wikipedia ==
See function usage on Abstract Wikipedia on this [https://abstract-data.toolforge.org/?lang=en tool for en].
==Configurations==
{{LanguageConfigurations|Language=en|Language2=en-au|Language3=en-gb|Language4=en-us}}
== Syntactic tables (experimental) ==
For more about Syntactic tables see the [[Wikifunctions:Catalogue/Natural language operations/Global language functions#Language functions for table|language independent functions for tables]]. These are the ones specific for English. Syntactic tables are experimental and may be deprecated entirely, especially in favor of syntactic functions.
=== Nouns ===
* Example noun: {{Z|Z36617}}
* {{Z+|Z36607}}
* {{Z+|Z36754}}
* {{Z+|Z36759}}
* {{Z+|Z36762}}
* {{Z+|Z36766}}
* {{Z+|Z36770}}
* {{Z+|Z36969}}
* {{Z+|Z37080}}
=== Determiners ===
* specific determiners
** {{Z+|Z36781}}
** {{Z+|Z36782}}
** {{Z+|Z36783}}
** {{Z+|Z36784}}
** {{Z+|Z36791}}
* {{Z+|Z36785}}
* {{Z+|Z36792}}
=== Noun phrase ===
* {{Z+|Z36798}}
* {{Z+|Z36925}}
* {{Z+|Z36935}}
=== Adjective ===
* example adjective: {{Z|Z36968}}
* {{Z+|Z36972}}
* {{Z+|Z36975}}
* {{Z+|Z36978}}
* {{Z+|Z37076}}
=== Sentence ===
* {{Z+|Z37083}}
* {{Z+|Z37086}}
* {{Z+|Z36939}}
* {{Z+|Z36953}}
[[Category:Lists of functions]]
[[Category:English]]
pue82phidsmmriznv8tdom3v081fioy
299391
299390
2026-08-14T12:29:41Z
Denny
81
/* Syntactic tables (experimental) */
299391
wikitext
text/x-wiki
==Sentence and fragment generation==
===General-purpose===
* {{Z+|Z26088}}
* {{Z+|Z23410}}
* {{Z+|Z21765}}
* {{Z+|Z26570}}
* {{Z+|Z32199}}
* {{Z+|Z32230}}
* {{Z+|Z32244}}
* {{Z+|Z32249}}
===Special use cases===
* {{Z+|Z20597}}
* {{Z+|Z28784}}
==Morphology==
===Nouns and pronouns===
* {{Z+|Z11089}}
* {{Z+|Z11218}}
* {{Z+|Z22490}}
====Possessives====
* {{Z+|Z11302}}
* {{Z+|Z19125}}
===Verbs===
* {{Z+|Z24676}}
* {{Z+|Z24687}}
* {{Z+|Z13177}}
* {{Z+|Z13087}}
===Adjectives and adverbs===
* {{Z+|Z11795}}
* {{Z+|Z12203}}
** {{Z+|Z29851}}
*** {{Z+|Z29852}}
===Articles===
* {{Z+|Z21739}}
** {{Z+|Z32314}}
* {{Z+|Z32935}}
* {{Z+|Z32929}}
* {{Z+|Z32645}}
===Word derivation===
* {{Z+|Z11390}}
* {{Z+|Z11646}}
* {{Z+|Z13280}}
* {{Z+|Z13262}}
===Other===
* {{Z+|Z13254}}
==Numbers==
* {{Z+|Z13587}}
* {{Z+|Z14526}}
* {{Z+|Z13596}}
* {{Z+|Z14726}}
* {{Z+|Z14531}}
* {{Z+|Z14523}}
==Other==
* {{Z+|Z23827}}
* {{Z+|Z18852}}
* {{Z+|Z18859}}
== Function usage on Abstract Wikipedia ==
See function usage on Abstract Wikipedia on this [https://abstract-data.toolforge.org/?lang=en tool for en].
==Configurations==
{{LanguageConfigurations|Language=en|Language2=en-au|Language3=en-gb|Language4=en-us}}
== Syntactic tables (experimental) ==
For more about Syntactic tables see the [[Wikifunctions:Catalogue/Natural language operations/Global language functions#Language functions for table|language independent functions for tables]]. These are the ones specific for English. Syntactic tables are experimental and may be deprecated entirely, especially in favor of syntactic functions.
=== Nouns ===
* Example noun: {{Z|Z36617}}
* {{Z+|Z36607}}
* {{Z+|Z36754}}
* {{Z+|Z36759}}
* {{Z+|Z36762}}
* {{Z+|Z36766}}
* {{Z+|Z36770}}
* {{Z+|Z36969}}
* {{Z+|Z37080}}
=== Determiners ===
* specific determiners
** {{Z+|Z36781}}
** {{Z+|Z36782}}
** {{Z+|Z36783}}
** {{Z+|Z36784}}
** {{Z+|Z36791}}
* {{Z+|Z36785}}
* {{Z+|Z36792}}
=== Noun phrase ===
* {{Z+|Z36798}}
* {{Z+|Z36925}}
* {{Z+|Z36935}}
=== Adjective ===
* example adjective: {{Z|Z36968}}
* {{Z+|Z36972}}
* {{Z+|Z36975}}
* {{Z+|Z36978}}
* {{Z+|Z37076}}
=== Sentence ===
* {{Z+|Z37083}}
* {{Z+|Z37086}}
* {{Z+|Z36939}}
* {{Z+|Z36953}}
== Syntactic phrase functions ==
=== Functions for building anonymous functions ===
* {{Z+|Z39425}}
* {{Z+|Z39430}}
[[Category:Lists of functions]]
[[Category:English]]
nbkj2ksn0dcb41nspqeg81onh1kpqth
299400
299391
2026-08-14T12:43:42Z
Denny
81
/* Syntactic phrase functions */
299400
wikitext
text/x-wiki
==Sentence and fragment generation==
===General-purpose===
* {{Z+|Z26088}}
* {{Z+|Z23410}}
* {{Z+|Z21765}}
* {{Z+|Z26570}}
* {{Z+|Z32199}}
* {{Z+|Z32230}}
* {{Z+|Z32244}}
* {{Z+|Z32249}}
===Special use cases===
* {{Z+|Z20597}}
* {{Z+|Z28784}}
==Morphology==
===Nouns and pronouns===
* {{Z+|Z11089}}
* {{Z+|Z11218}}
* {{Z+|Z22490}}
====Possessives====
* {{Z+|Z11302}}
* {{Z+|Z19125}}
===Verbs===
* {{Z+|Z24676}}
* {{Z+|Z24687}}
* {{Z+|Z13177}}
* {{Z+|Z13087}}
===Adjectives and adverbs===
* {{Z+|Z11795}}
* {{Z+|Z12203}}
** {{Z+|Z29851}}
*** {{Z+|Z29852}}
===Articles===
* {{Z+|Z21739}}
** {{Z+|Z32314}}
* {{Z+|Z32935}}
* {{Z+|Z32929}}
* {{Z+|Z32645}}
===Word derivation===
* {{Z+|Z11390}}
* {{Z+|Z11646}}
* {{Z+|Z13280}}
* {{Z+|Z13262}}
===Other===
* {{Z+|Z13254}}
==Numbers==
* {{Z+|Z13587}}
* {{Z+|Z14526}}
* {{Z+|Z13596}}
* {{Z+|Z14726}}
* {{Z+|Z14531}}
* {{Z+|Z14523}}
==Other==
* {{Z+|Z23827}}
* {{Z+|Z18852}}
* {{Z+|Z18859}}
== Function usage on Abstract Wikipedia ==
See function usage on Abstract Wikipedia on this [https://abstract-data.toolforge.org/?lang=en tool for en].
==Configurations==
{{LanguageConfigurations|Language=en|Language2=en-au|Language3=en-gb|Language4=en-us}}
== Syntactic tables (experimental) ==
For more about Syntactic tables see the [[Wikifunctions:Catalogue/Natural language operations/Global language functions#Language functions for table|language independent functions for tables]]. These are the ones specific for English. Syntactic tables are experimental and may be deprecated entirely, especially in favor of syntactic functions.
=== Nouns ===
* Example noun: {{Z|Z36617}}
* {{Z+|Z36607}}
* {{Z+|Z36754}}
* {{Z+|Z36759}}
* {{Z+|Z36762}}
* {{Z+|Z36766}}
* {{Z+|Z36770}}
* {{Z+|Z36969}}
* {{Z+|Z37080}}
=== Determiners ===
* specific determiners
** {{Z+|Z36781}}
** {{Z+|Z36782}}
** {{Z+|Z36783}}
** {{Z+|Z36784}}
** {{Z+|Z36791}}
* {{Z+|Z36785}}
* {{Z+|Z36792}}
=== Noun phrase ===
* {{Z+|Z36798}}
* {{Z+|Z36925}}
* {{Z+|Z36935}}
=== Adjective ===
* example adjective: {{Z|Z36968}}
* {{Z+|Z36972}}
* {{Z+|Z36975}}
* {{Z+|Z36978}}
* {{Z+|Z37076}}
=== Sentence ===
* {{Z+|Z37083}}
* {{Z+|Z37086}}
* {{Z+|Z36939}}
* {{Z+|Z36953}}
== Syntactic phrase functions ==
=== Functions for building anonymous functions ===
* {{Z+|Z39425}}
* {{Z+|Z39430}}
* {{Z+|Z39437}}
[[Category:Lists of functions]]
[[Category:English]]
qaqohimr4lo29ftc1f4erihrn3wy30z
Wikifunctions:Catalogue/Natural language operations/Igbo
4
41940
299546
296855
2026-08-15T07:15:22Z
99of9
1622
/* Function usage on Abstract Wikipedia */
299546
wikitext
text/x-wiki
* {{Z+|Z11353}}
* {{Z+|Z11306}}
* {{Z+|Z11248}}
* {{Z+|Z12408}}
* {{Z+|Z12770}}
* {{Z+|Z12806}}
* {{Z+|Z13145}}
* {{Z+|Z13916}}
* {{Z+ |Z13922}}
* {{Z+|Z13927}}
* {{Z+|Z16000}}
* {{Z+|Z16053}}
* {{Z+|Z16074}}
* {{Z+|Z16524}}
* {{Z+|Z35780}}
* {{Z+|Z38933}}
== Function usage on Abstract Wikipedia ==
See function usage on Abstract Wikipedia on this [https://abstract-data.toolforge.org/?lang=ig tool for ig].
== Wikidata Properties without Igbo labels ==
*In a Tabernacle [https://tabernacle.toolforge.org/#/tab/sparql/SELECT%20%3Fproperty%20%7B%0A%20%20%7B%0A%20%20%20%20SELECT%20*%20%7B%0A%20%20%20%20%20%20%3Fproperty%20rdf%3Atype%20wikibase%3AProperty%20.%0A%20%20%20%20%20%20MINUS%20%7B%3Fproperty%20wikibase%3ApropertyType%20wikibase%3AExternalId%20.%7D%0A%20%20%20%20%20%20FILTER%20NOT%20EXISTS%20%7B%0A%20%20%20%20%20%20%20%20%3Fproperty%20rdfs%3Alabel%20%3Flabel%20.%0A%20%20%20%20%20%20%20%20FILTER(LANG(%3Flabel)%20%3D%20%22ig%22)%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%20LIMIT%2010000%0A%20%20%7D%0A%7D/Len%2Cig%3BDen%2Cig table].
==Configurations==
{{LanguageConfigurations|Language=ig}}
[[Category:Lists of functions]]
[[Category:Igbo]]
336pze8hbth4mfqhanoq5hcfthtptp7
Z19651
0
42327
299559
137025
2026-08-15T08:16:30Z
Ameisenigel
44
de
299559
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19651"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z18670",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z18670",
"Z18670K1": "gauza"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "gauzak"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "gauza -\u003E gauzak"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "gauza → gauzak"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
fgxz4ivbw82bnadcuv84zhvro72k9ad
Z19652
0
42340
299560
137026
2026-08-15T08:16:56Z
Ameisenigel
44
de
299560
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19652"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z18670",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z18670",
"Z18670K1": "Kafka"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "Kafkak"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Kafka -\u003E Kafkak"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Kafka → Kafkak"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
qlmg3gkf4w7d5whkrzki64e6icd0irv
Z19653
0
42354
299561
136955
2026-08-15T08:17:18Z
Ameisenigel
44
de
299561
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19653"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z19645",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z19645(Z19645K1):\n\ts = str(Z19645K1)\n\tr = ''\n\ti = 0\n\tfor c in s[::-1]:\n\t\ti += 1\n\t\tif i \u003E 3:\n\t\t\ti = 1\n\t\t\tr = '.' + r\n\t\tr = c + r\n\treturn r"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Iterate through all characters"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Punkte zwischen Tripletts einfügen in Python"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
57iner6npvyum0vrdb6nkg4pfvtcjx7
Z19654
0
42367
299562
280072
2026-08-15T08:18:41Z
Ameisenigel
44
de
299562
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19654"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z19654K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "String"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "Un chaine"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Zeichenkette"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z13518",
"Z17K2": "Z19654K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Every N chars"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "L’intervalle n"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "alle n Zeichen"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z19654K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "String to add"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "La chaine à insérer"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "hinzuzufügende Zeichenkette"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20",
"Z19656",
"Z20583"
],
"Z8K4": [
"Z14",
"Z24314",
"Z19655",
"Z34721"
],
"Z8K5": "Z19654"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Add chars every n chars"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "insérer un caractère tous les n caractères"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Zeichen alle n Zeichen einfügen"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"String intersperse"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Broader version of Z19645"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "Version plus générique de Z19643."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "allgemeinere Version von Z19645"
}
]
}
}
lafviu2v480j2d0p363gbgmez6cu54f
Z19655
0
42368
299563
137006
2026-08-15T08:19:16Z
Ameisenigel
44
de
299563
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19655"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z19654",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z19654(Z19654K1, Z19654K2, Z19654K3):\n\ts = str(Z19654K1)\n\tr = ''\n\ti = 0\n\tfor c in s[::-1]:\n\t\ti += 1\n\t\tif i \u003E int(Z19654K2):\n\t\t\ti = 1\n\t\t\tr = str(Z19654K3) + r\n\t\tr = c + r\n\treturn r"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Add chars every n chars Python"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Zeichen alle n Zeichen einfügen in Python"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
iprq5d7of9ggbu7z4nus2maxacj8x6c
Z19656
0
42369
299564
137005
2026-08-15T08:20:00Z
Ameisenigel
44
de
299564
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19656"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z19654",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z19654",
"Z19654K1": "ABCDEF",
"Z19654K2": {
"Z1K1": "Z13518",
"Z13518K1": "1"
},
"Z19654K3": "."
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "A.B.C.D.E.F"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "[\"ABCDEF\",1,\".\"] = \"A.B.C.D.E.F\""
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Punkt zwischen jedem Zeichen einfügen"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
ss21wpedsxfe5g695w9lvepj1dwviee
Z19657
0
42372
299565
137035
2026-08-15T08:20:21Z
Ameisenigel
44
de
299565
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19657"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z19645",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z19654",
"Z19654K1": {
"Z1K1": "Z7",
"Z7K1": "Z13713",
"Z13713K1": {
"Z1K1": "Z18",
"Z18K1": "Z19645K1"
}
},
"Z19654K2": {
"Z1K1": "Z13518",
"Z13518K1": "3"
},
"Z19654K3": "."
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Using [[WF:BROAD]]er function"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Punkte zwischen Tripletts einfügen als Komposition"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
e61ni4h1nteb3v53h9shsod44r604ka
Z19658
0
42373
299566
151605
2026-08-15T08:21:06Z
Ameisenigel
44
de
299566
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19658"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z19658K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "объект языка"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language object"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "עצם שפה"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Sprachobjekt"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20",
"Z19659"
],
"Z8K4": [
"Z14",
"Z21229"
],
"Z8K5": "Z19658"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "русское наречие по объекту языка"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "convert a language object to a Russian adverb"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "עצם שפה לתואר פועל ברוסית"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Sprachobjekt in russisches Adverb umwandeln"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "получает объект языка и возвращает наречие, описывающее этот язык"
}
]
}
}
217ua08xyfzbuyjtoca4ycg40t2x5mt
Z19659
0
42377
299568
137037
2026-08-15T08:22:05Z
Ameisenigel
44
de
299568
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19659"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z19658",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z19658",
"Z19658K1": "Z1442"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "на языке дуала"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": " Z1442/дуала \u003E на языке дуала"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Duala → на языке дуала"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
5r3og8cgls08wh7hd6gn94kx3zflxwk
Z19660
0
42379
299569
137052
2026-08-15T08:23:34Z
Ameisenigel
44
de
299569
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19660"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z18784",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z18784",
"Z18784K1": {
"Z1K1": "Z7",
"Z7K1": "Z16568",
"Z16568K1": {
"Z1K1": "Z99",
"Z99K1": "Z1442"
},
"Z16568K2": "Z1005"
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "на языке дуала"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Z1442/дуала \u003E на языке дуала"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "дуала → на языке дуала"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
g11cl3wckgztjs42haafmqok9rw6cbi
User talk:DSantamaria-WMF
3
47924
299404
293262
2026-08-14T13:17:30Z
99of9
1622
/* Download list of QIDs used in AW article */ new section
299404
wikitext
text/x-wiki
{{Welcome/lang|user=DSantamaria-WMF|welcominguser=VIGNERON|1=[[User:VIGNERON|VIGNERON]] ([[User talk:VIGNERON|talk]]) 18:38, 15 January 2025 (UTC)}}
== abstract-data reporting persistent String as a Function with no Implementation ==
e.g. [[toolforge:abstract-data/zid/Z13128]] (though I have now removed the sole usage from the live site) [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:29, 8 May 2026 (UTC)
:Thanks @[[User:YoshiRulz|YoshiRulz]]! I think this is gone already, probably stalled data! [[User:DSantamaria-WMF|DSantamaria-WMF]] ([[User talk:DSantamaria-WMF|talk]]) 13:12, 11 May 2026 (UTC)
::Yes, but I meant that [[Z13128]] shouldn't have been in the list in the first place, because it's not a persistent [[Z8]]. Unfortunate timing that it rolled over just before you were able to see the page for yourself. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 16:20, 11 May 2026 (UTC)
== Lexemes in abstract-data tool ==
Hello David, I am interested in your abstract-data tool. At a [https://abstract.wikipedia.org/wiki/User:Hog%C3%BC-456/Missing_Lexemecheck subpage] of my user page in Abstract Wikipedia I described how to find lexemes related to items mentioned in Abstract articles. Does your tool check this too to show if a function does work. I like your tool and I am interested in understanding how it works. So can you please send me a link to the source code of the tool. From my point of view it is necessary to check an abstract article by a human with at least advanced knowledge in the language to say if the article does work. So your tool does only show if the functions generate output in a given language. [[User:Hogü-456|Hogü-456]] ([[User talk:Hogü-456|talk]]) 19:32, 10 May 2026 (UTC)
:Yes! That is exactly the focus of the tool, to see what are the different gaps in the different languages and content, seeing if the content is renderable or not.
:> Does your tool check this too to show if a function does work.
:Yes, but not executing the function, but rather understanding the composition, to avoid hammering the API. Because of that the JS / Python implementations are a big gap right now.
:The code: https://gitlab.wikimedia.org/toolforge-repos/abstract-data [[User:DSantamaria-WMF|DSantamaria-WMF]] ([[User talk:DSantamaria-WMF|talk]]) 14:36, 11 May 2026 (UTC)
== Country flags in abstract-data ==
Please blow up all the country flags in abstract-data. [https://www.flagsarenotlanguages.com/ Flags represent countries, not languages.] Please replace them with language codes, which the community has been using for decades. Thanks. [[User:魔琴|魔琴]] ([[User talk:魔琴|talk]]) 06:37, 13 May 2026 (UTC)
:I just removed them, IMHO it was just an aesthetic concept, I like the look and feel that flags bring to the language labels, but happy to remove them if make some people feel uncomfortable with the concept. [[User:DSantamaria-WMF|DSantamaria-WMF]] ([[User talk:DSantamaria-WMF|talk]]) 05:58, 15 May 2026 (UTC)
::I'm a flag enjoyer, but very few languages have flags. There's Esperanto's verda stelo, the Francophonie's five-color flag, and a smattering of others. Most languages don't have a visual iconography, even as written languages. And then there are the unfortunate implications that choosing one country's flag over another ends up making, whether intended or (as in this case) not. There do exist [[commons:category:blue ISO 639 icons with double parentheses]] which might be substitutable, but the main design element there is text anyway. [[User:Arlo Barnes|Arlo Barnes]] ([[User talk:Arlo Barnes|talk]]) 16:44, 15 May 2026 (UTC)
== Abstract-data query ==
Hi David. Please can you check how you are calculating Lexeme gaps? On https://abstract-data.toolforge.org/article/Q408 it says French is missing a lexeme for Australia. But as far as I can tell everything is correctly in place at https://www.wikidata.org/wiki/Lexeme:L22344. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 09:47, 23 July 2026 (UTC)
:Hey,
:thanks for the report, definitely a bug, is fixed right now, thanks for the report again! [[User:DSantamaria-WMF|DSantamaria-WMF]] ([[User talk:DSantamaria-WMF|talk]]) 11:52, 23 July 2026 (UTC)
== Download list of QIDs used in AW article ==
Hi David. I had an idea I think you can help with. It was inspired by viewing https://abstract.wikipedia.org/view/en/Q408 in Igbo, and being asked for a list of all the items that need labels. It's a lot. I wouldn't want to do them one by one. So I thought about giving them a [https://tabernacle.toolforge.org/#/ Tabernacle] table. But to make that, I don't know a way of getting a list of all QIDs used in an AW article. Perhaps we can scrape them all from the raw HTML? But your tool seems to already know which QIDs are used, so I wondered if you could give us a "download list" link at https://abstract-data.toolforge.org/article/Q408 . What do you think? --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 13:17, 14 August 2026 (UTC)
0xhyf8b0ltop3qf8lhzpqotk5asem60
299410
299404
2026-08-14T14:12:57Z
99of9
1622
/* Download list of QIDs used in AW article */ Reply
299410
wikitext
text/x-wiki
{{Welcome/lang|user=DSantamaria-WMF|welcominguser=VIGNERON|1=[[User:VIGNERON|VIGNERON]] ([[User talk:VIGNERON|talk]]) 18:38, 15 January 2025 (UTC)}}
== abstract-data reporting persistent String as a Function with no Implementation ==
e.g. [[toolforge:abstract-data/zid/Z13128]] (though I have now removed the sole usage from the live site) [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:29, 8 May 2026 (UTC)
:Thanks @[[User:YoshiRulz|YoshiRulz]]! I think this is gone already, probably stalled data! [[User:DSantamaria-WMF|DSantamaria-WMF]] ([[User talk:DSantamaria-WMF|talk]]) 13:12, 11 May 2026 (UTC)
::Yes, but I meant that [[Z13128]] shouldn't have been in the list in the first place, because it's not a persistent [[Z8]]. Unfortunate timing that it rolled over just before you were able to see the page for yourself. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 16:20, 11 May 2026 (UTC)
== Lexemes in abstract-data tool ==
Hello David, I am interested in your abstract-data tool. At a [https://abstract.wikipedia.org/wiki/User:Hog%C3%BC-456/Missing_Lexemecheck subpage] of my user page in Abstract Wikipedia I described how to find lexemes related to items mentioned in Abstract articles. Does your tool check this too to show if a function does work. I like your tool and I am interested in understanding how it works. So can you please send me a link to the source code of the tool. From my point of view it is necessary to check an abstract article by a human with at least advanced knowledge in the language to say if the article does work. So your tool does only show if the functions generate output in a given language. [[User:Hogü-456|Hogü-456]] ([[User talk:Hogü-456|talk]]) 19:32, 10 May 2026 (UTC)
:Yes! That is exactly the focus of the tool, to see what are the different gaps in the different languages and content, seeing if the content is renderable or not.
:> Does your tool check this too to show if a function does work.
:Yes, but not executing the function, but rather understanding the composition, to avoid hammering the API. Because of that the JS / Python implementations are a big gap right now.
:The code: https://gitlab.wikimedia.org/toolforge-repos/abstract-data [[User:DSantamaria-WMF|DSantamaria-WMF]] ([[User talk:DSantamaria-WMF|talk]]) 14:36, 11 May 2026 (UTC)
== Country flags in abstract-data ==
Please blow up all the country flags in abstract-data. [https://www.flagsarenotlanguages.com/ Flags represent countries, not languages.] Please replace them with language codes, which the community has been using for decades. Thanks. [[User:魔琴|魔琴]] ([[User talk:魔琴|talk]]) 06:37, 13 May 2026 (UTC)
:I just removed them, IMHO it was just an aesthetic concept, I like the look and feel that flags bring to the language labels, but happy to remove them if make some people feel uncomfortable with the concept. [[User:DSantamaria-WMF|DSantamaria-WMF]] ([[User talk:DSantamaria-WMF|talk]]) 05:58, 15 May 2026 (UTC)
::I'm a flag enjoyer, but very few languages have flags. There's Esperanto's verda stelo, the Francophonie's five-color flag, and a smattering of others. Most languages don't have a visual iconography, even as written languages. And then there are the unfortunate implications that choosing one country's flag over another ends up making, whether intended or (as in this case) not. There do exist [[commons:category:blue ISO 639 icons with double parentheses]] which might be substitutable, but the main design element there is text anyway. [[User:Arlo Barnes|Arlo Barnes]] ([[User talk:Arlo Barnes|talk]]) 16:44, 15 May 2026 (UTC)
== Abstract-data query ==
Hi David. Please can you check how you are calculating Lexeme gaps? On https://abstract-data.toolforge.org/article/Q408 it says French is missing a lexeme for Australia. But as far as I can tell everything is correctly in place at https://www.wikidata.org/wiki/Lexeme:L22344. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 09:47, 23 July 2026 (UTC)
:Hey,
:thanks for the report, definitely a bug, is fixed right now, thanks for the report again! [[User:DSantamaria-WMF|DSantamaria-WMF]] ([[User talk:DSantamaria-WMF|talk]]) 11:52, 23 July 2026 (UTC)
== Download list of QIDs used in AW article ==
Hi David. I had an idea I think you can help with. It was inspired by viewing https://abstract.wikipedia.org/view/en/Q408 in Igbo, and being asked for a list of all the items that need labels. It's a lot. I wouldn't want to do them one by one. So I thought about giving them a [https://tabernacle.toolforge.org/#/ Tabernacle] table. But to make that, I don't know a way of getting a list of all QIDs used in an AW article. Perhaps we can scrape them all from the raw HTML? But your tool seems to already know which QIDs are used, so I wondered if you could give us a "download list" link at https://abstract-data.toolforge.org/article/Q408 . What do you think? --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 13:17, 14 August 2026 (UTC)
:Maybe another opportunity for download would be at the "missing labels" box in e.g. https://abstract-data.toolforge.org/?lang=ig . --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 14:12, 14 August 2026 (UTC)
gwcaogsx575xihfgaj9gasje7zay1w9
Z23865
0
54211
299425
179056
2026-08-14T18:00:15Z
JhowieNitnek
1044
Added Dutch translation
299425
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z23865"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z16683",
"Z17K2": "Z23865K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "timestamp"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "tijdstempel"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z23865K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "format"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "formaat"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20",
"Z23867"
],
"Z8K4": [
"Z14",
"Z23866"
],
"Z8K5": "Z23865"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "format Unix timestamp"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "Unix-tijdstempel opmaken"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "format string should be mostly compatible with https://en.cppreference.com/w/cpp/chrono/c/strftime"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "De opmaakstring moet grotendeels compatibel zijn met https://en.cppreference.com/w/cpp/chrono"
}
]
}
}
7pweur0m6nxi66s44xumm4fu3my1gsz
Z26039
0
60718
299543
298711
2026-08-15T06:48:50Z
99of9
1622
nudge
299543
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z26039"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z26039K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Entität"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1272",
"Z11K2": "entitet"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "entitas"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "entité"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1830",
"Z11K2": "エンティティ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "entiteit"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "entità"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "entita"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1003",
"Z11K2": "entidad"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z26039K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "class"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Klasse"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1272",
"Z11K2": "vrsta"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "kelas"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "classe"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1830",
"Z11K2": "分類(クラス)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "klasse"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "classe"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "třída"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1003",
"Z11K2": "clase"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z26039K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Sprache"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1272",
"Z11K2": "jezik"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "bahasa"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "langue"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1830",
"Z11K2": "言語"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "taal"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "lingua"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "jazyk"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1003",
"Z11K2": "idioma"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20",
"Z26040",
"Z26042",
"Z26599",
"Z26610",
"Z27212",
"Z27251",
"Z27282",
"Z26041",
"Z32148",
"Z33133",
"Z33134",
"Z33726",
"Z33749",
"Z27211",
"Z27286",
"Z34108",
"Z33774",
"Z35531",
"Z35532",
"Z35533",
"Z35534",
"Z35535",
"Z35536",
"Z35537",
"Z35538",
"Z35539",
"Z35540",
"Z35541",
"Z35542",
"Z35543",
"Z34689",
"Z26054",
"Z26061",
"Z28015",
"Z36876",
"Z38827",
"Z38699",
"Z38826",
"Z38825",
"Z36077",
"Z36080",
"Z36081",
"Z38822",
"Z38823"
],
"Z8K4": [
"Z14",
"Z36091",
"Z33725"
],
"Z8K5": "Z26039"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "subject is instance of (string) \u003CAW: use Z32962\u003E"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Instanziierungssatz ohne Artikel"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1272",
"Z11K2": "rečenica koja instanciira"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "Contoh potongan kalimat tanpa artikel"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "l'entité fait partie de cette classe (texte)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1830",
"Z11K2": "冠詞なしのインスタンス化フラグメント"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1061",
"Z11K2": "artikelløs instantiseringsfragment"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "instantie van fragment zonder lidwoord"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1282",
"Z11K2": "stummadur un tamm hep ger-mall"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "soggetto è istanza di (stringa)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "subjekt je instancí třídy (jako řetězec)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1003",
"Z11K2": "sujeto es una instancia de (cadena)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"is a",
"instance of",
"X is a Y",
"P31",
"one of",
"is an",
"occupation",
"subject is instance of",
"classificational construct fragment (String)",
"Article-less instantiating fragment",
"subject is instance of (string)",
"entity is an instance of class",
"A is a B"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1430",
"Z31K2": [
"Z6",
"ist ein",
"ist eine",
"Instanz"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1272",
"Z31K2": [
"Z6",
"jest",
"je",
"su"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1004",
"Z31K2": [
"Z6",
"est",
"instance de",
"est une instance de",
"est un",
"est une",
"X est Y",
"est un(e)",
"instanciation de fragment",
"P31",
"X P31 Y"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1157",
"Z31K2": [
"Z6",
"is een"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1062",
"Z31K2": [
"Z6",
"je instancí",
"[X] je [Y]",
"P31"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1003",
"Z31K2": [
"Z6",
"Español: es un/una, instancia de, X is un/una Y, un/una de, sujeto es una instancia de, "
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "A sentence which expresses the relationship X is an instance of Y. In English has the form \"[The] X is a/n Y\": \"Nairobi is a city.\" For X subclass of Y use Z26095."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Schreibt einen Satz wie z. B. \"Nairobi ist eine Stadt.\". Es nimmt eine Entität und eine Klasse und macht einen Satz, der aussagt, die Entität ist eine Instanz der Klasse."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1272",
"Z11K2": "Sastavlja rečenicu oblika \"Nairobi je grad.\", tj. uzima entitet i njegovu vrstu te navodi da je to entitet te vrste."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "Produit une phrase de la forme \"Nairobi est une ville.\", c'est-à-dire qu'elle prend une entité et sa classe et affirme qu'il s'agit d'une entité de cette classe. Texte seul, ne comporte pas de lien."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "Membuat kalimat dalam bentuk \"Nairobi adalah kota.\", yakni, fungsi ini mengambil entitas dan kelas, kemudian menyatakan bahwa entitas tersebut adalah kelas."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1830",
"Z11K2": "「Nairobi is a city.」という形式の文を作成。つまり、エンティティとその分類(クラス)を受け取り、そのクラスのエンティティであると書き出します。"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1061",
"Z11K2": "laver en sætning af formen \"Nairobi er en by., dvs. den tager en entitet og dens klasse og skriver at at entiteten er af den klasse."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "Schrijf een zin zoals \"Nairobi is een stad.\" Deze zin neemt een entiteit en een klasse en stelt dat de entiteit een instantie is van de klasse."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "Una frase \"[Il] X è un Y.\", con X una singola istanza di Y."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "Sestaví větu, která vyjadřuje vztah, že X je instancí Y („[X] je [Y].“). Např. „Vltava je řeka.“ Pokud má X být podtřídou Y, použijte Z26095."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1003",
"Z11K2": "Español: Un enunciado que expresa la relación X es una instancia de Y. En Español tiene la forma \"[El/La] X es un/una Y\": Villa Nueva es una ciudad. Para X subclase de Y usa Z26095. "
}
]
}
}
do5189ul60yzx27mlk9nk99pe3wmk1q
Z26095
0
60846
299478
299134
2026-08-14T22:31:40Z
Ornithorynque liminaire
1539
[fr] nom plus simple
299478
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z26095"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z26095K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "class"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "classe"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "classe"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Klasse"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "třída"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z26095K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "super-class"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "superclasse"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "super-classe"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Oberklasse"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "nadtřída"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z26095K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "lingua"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "langue"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Sprache"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "jazyk"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z26628",
"Z27056",
"Z27081",
"Z27082",
"Z27218",
"Z26512",
"Z33807",
"Z34119",
"Z38128",
"Z39331"
],
"Z8K4": [
"Z14",
"Z37043"
],
"Z8K5": "Z26095"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "subject is kind of (Monolingual text)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "l'entité est une sous-classe (monolingue))"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "soggetto è tipo di (testo monolingue)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Instanziierungssatz mit Artikel"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1830",
"Z11K2": "冠詞ありのインスタンス化フラグメント"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "subjekt je podtřídou (jako jednojazyčný text)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1014",
"Z11K2": "bụ ụdị "
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"P279",
"classified as",
"subclass of",
"Article-ful instantiating fragment",
"type of",
"subject is kind of",
"something is a something",
"An X is a Y.",
"A X is a Y.",
"X is a Y",
"X is P279 of Y"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1062",
"Z31K2": [
"Z6",
"P279",
"podtřída",
"je druhem"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Makes a sentence which expresses the relationship between an instance of a subclass X and its superclass Y. In English has the form \"a/n X is a Y\": \"A frog is an amphibian.\" Non-subclass use Z26039"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "par exemple, « un chat est un mammifère »."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "\"Il X è un Y.\", con X una sottoclasse di Y."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "Sestaví větu, která vyjadřuje vztah, že X je podtypem Y („[X] je [Y].“). Např. „Žába je obojživelník.“ Pokud má X být instancí Y, použijte Z26039."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1014",
"Z11K2": "Nwamba bụ ụmụ anụmanụ"
}
]
}
}
04nub7cpaxfasqj15kd7n1rjxb0b0ys
299479
299478
2026-08-14T22:31:50Z
Ornithorynque liminaire
1539
299479
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z26095"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z26095K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "class"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "classe"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "classe"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Klasse"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "třída"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z26095K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "super-class"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "superclasse"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "super-classe"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Oberklasse"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "nadtřída"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z26095K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "lingua"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "langue"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Sprache"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "jazyk"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z26628",
"Z27056",
"Z27081",
"Z27082",
"Z27218",
"Z26512",
"Z33807",
"Z34119",
"Z38128",
"Z39331"
],
"Z8K4": [
"Z14",
"Z37043"
],
"Z8K5": "Z26095"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "subject is kind of (Monolingual text)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "l'entité est une sous-classe (monolingue)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "soggetto è tipo di (testo monolingue)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Instanziierungssatz mit Artikel"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1830",
"Z11K2": "冠詞ありのインスタンス化フラグメント"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "subjekt je podtřídou (jako jednojazyčný text)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1014",
"Z11K2": "bụ ụdị "
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"P279",
"classified as",
"subclass of",
"Article-ful instantiating fragment",
"type of",
"subject is kind of",
"something is a something",
"An X is a Y.",
"A X is a Y.",
"X is a Y",
"X is P279 of Y"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1062",
"Z31K2": [
"Z6",
"P279",
"podtřída",
"je druhem"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Makes a sentence which expresses the relationship between an instance of a subclass X and its superclass Y. In English has the form \"a/n X is a Y\": \"A frog is an amphibian.\" Non-subclass use Z26039"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "par exemple, « un chat est un mammifère »."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "\"Il X è un Y.\", con X una sottoclasse di Y."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "Sestaví větu, která vyjadřuje vztah, že X je podtypem Y („[X] je [Y].“). Např. „Žába je obojživelník.“ Pokud má X být instancí Y, použijte Z26039."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1014",
"Z11K2": "Nwamba bụ ụmụ anụmanụ"
}
]
}
}
sm2lzggtaxrahvhx46jklckn00r8k97
Z30751
0
71130
299424
237136
2026-08-14T17:57:30Z
JhowieNitnek
1044
Added Dutch translation
299424
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z30751"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z30751K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "unit"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "eenheid"
}
]
}
}
],
"Z8K2": "Z40",
"Z8K3": [
"Z20",
"Z30752",
"Z30753"
],
"Z8K4": [
"Z14",
"Z30754"
],
"Z8K5": "Z30751"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "is valid GNU coreutils size unit?"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "Is geldige GNU coreutils-grootte-eenheid?"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"is valid decimal or binary size unit?",
"is valid GNU coreutils decimal or binary size unit?"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
9nzwdirelurpg0a1wuks6hqvwdc87wt
Z33024
0
79571
299529
296403
2026-08-15T05:55:04Z
99of9
1622
299529
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z33024"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z33024K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "items"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Elemente"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z33024K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language "
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Sprache"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z11"
},
"Z8K3": [
"Z20",
"Z33025",
"Z34679",
"Z34688",
"Z38847"
],
"Z8K4": [
"Z14",
"Z34678"
],
"Z8K5": "Z33024"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "label texts for Wikidata items [QIDs]"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Bezeichnungstexte für Wikidata-Elemente"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"label monolingual texts for Wikidata items"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "returns the text from label in the given language, for each Wikidata item referenced"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Gibt für jedes referenzierte Wikidata-Element den Text aus der Bezeichnung in der angegebenen Sprache zurück"
}
]
}
}
kn5ax5cm1zz490uyg6ayous6c9dt37h
299537
299529
2026-08-15T06:24:34Z
99of9
1622
Added Z39472 to the approved list of implementations
299537
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z33024"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z33024K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "items"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Elemente"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z33024K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language "
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Sprache"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z11"
},
"Z8K3": [
"Z20",
"Z33025",
"Z34679",
"Z34688",
"Z38847"
],
"Z8K4": [
"Z14",
"Z34678",
"Z39472"
],
"Z8K5": "Z33024"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "label texts for Wikidata items [QIDs]"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Bezeichnungstexte für Wikidata-Elemente"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"label monolingual texts for Wikidata items"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "returns the text from label in the given language, for each Wikidata item referenced"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Gibt für jedes referenzierte Wikidata-Element den Text aus der Bezeichnung in der angegebenen Sprache zurück"
}
]
}
}
6obqv09t42x1gx42hbuc1yg4nx4ghtl
Z33056
0
79608
299460
292021
2026-08-14T21:15:47Z
Ornithorynque liminaire
1539
add belgian french
299460
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z33056"
},
"Z2K2": [
"Z1",
"Z1004",
"Z1640",
"Z1757",
"Z1334",
"français de Belgique"
],
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "French variants"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "varianter av franska"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
rdrwc7wu1lpc554el33y4a9hv4zif69
299461
299460
2026-08-14T21:18:03Z
Ornithorynque liminaire
1539
ah I'm not allowed to create fr-be
299461
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z33056"
},
"Z2K2": [
"Z1",
"Z1004",
"Z1640",
"Z1757",
"Z1334"
],
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "French variants"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "varianter av franska"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
k8emf6v82nwx2py7uddr7s16wcl3mgr
299462
299461
2026-08-14T21:18:30Z
Ornithorynque liminaire
1539
french
299462
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z33056"
},
"Z2K2": [
"Z1",
"Z1004",
"Z1640",
"Z1757",
"Z1334"
],
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "French variants"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "varianter av franska"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "Variantes du français"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
keqhlsznxiafgo0lpdxnf0txahkamiv
Z34282
0
81548
299465
290888
2026-08-14T21:45:23Z
Ornithorynque liminaire
1539
french
299465
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z34282"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z34282K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z34282K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z34284",
"Z35670",
"Z35846"
],
"Z8K4": [
"Z14",
"Z34283"
],
"Z8K5": "Z34282"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "auto-classifying sentence – entity (monolingual)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "description automatique de l'entité (monolingue)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"classifying sentence - entity",
"auto-classifying sentence – entity"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "X is a Y, where Y is obtained from a P31 of the entity item. Consider Z26039 instead to specify the class Y yourself."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "X est un ou une Y (en utilisant P31)"
}
]
}
}
4lg7a4u88yx7qh2trvvu4yjqmoozhdo
Z35976
0
84854
299472
290470
2026-08-14T22:27:08Z
Ornithorynque liminaire
1539
fr
299472
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z35976"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z35976K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z35976K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z37654"
],
"Z8K4": [
"Z14",
"Z35977"
],
"Z8K5": "Z35976"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for software"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "infobox logiciel"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
pda8on6rqyjhsb6cmtdtvg2ld82jnmm
Z36232
0
85350
299541
298434
2026-08-15T06:39:10Z
99of9
1622
Added Z39313 to the approved list of test cases
299541
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z36232"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z36232K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "subject reference"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6092",
"Z17K2": "Z36232K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "property reference"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z1",
"Z17K2": "Z36232K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "value (string, quantity, monolingual text, QID...)"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z36232K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "variant of English"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z36236",
"Z36237",
"Z36239",
"Z37798",
"Z39227",
"Z39313"
],
"Z8K4": [
"Z14",
"Z36233"
],
"Z8K5": "Z36232"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "specific property of subject is value, English"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"English specific property of subject is value"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "HTML sentence for \"The \u003Cproperty\u003E of \u003Csubject\u003E is \u003Cvalue\u003E.\" Attempt for any specific property triple. Use for triples in present tense. Use Z36218 or its child Z36206 to draw from WD."
}
]
}
}
fnflqt3y13wv0ah5krxruvyzn33hghf
Z36233
0
85351
299542
298435
2026-08-15T06:43:12Z
99of9
1622
more comprehensive fallbacks for inverses (now passing test)
299542
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z36233"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z36232",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z19267",
"Z19267K1": {
"Z1K1": "Z18",
"Z18K1": "Z36232K2"
},
"Z19267K2": {
"Z1K1": "Z6092",
"Z6092K1": "P206"
}
},
"Z802K2": {
"Z1K1": "Z7",
"Z7K1": "Z29749",
"Z29749K1": {
"Z1K1": "Z7",
"Z7K1": "Z37271",
"Z37271K1": {
"Z1K1": "Z18",
"Z18K1": "Z36232K1"
},
"Z37271K2": {
"Z1K1": "Z18",
"Z18K1": "Z36232K3"
},
"Z37271K3": {
"Z1K1": "Z18",
"Z18K1": "Z36232K4"
}
},
"Z29749K2": {
"Z1K1": "Z18",
"Z18K1": "Z36232K4"
}
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z12696",
"Z12696K1": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P144"
}
],
"Z12696K2": {
"Z1K1": "Z18",
"Z18K1": "Z36232K2"
}
},
"Z802K2": {
"Z1K1": "Z7",
"Z7K1": "Z32234",
"Z32234K1": [
"Z1",
{
"Z1K1": "Z7",
"Z7K1": "Z33848",
"Z33848K1": {
"Z1K1": "Z18",
"Z18K1": "Z36232K3"
},
"Z33848K2": {
"Z1K1": "Z18",
"Z18K1": "Z36232K4"
}
},
"Z13128",
{
"Z1K1": "Z7",
"Z7K1": "Z36270",
"Z36270K1": {
"Z1K1": "Z7",
"Z7K1": "Z19308",
"Z19308K1": {
"Z1K1": "Z7",
"Z7K1": "Z23680",
"Z23680K1": {
"Z1K1": "Z7",
"Z7K1": "Z35103",
"Z35103K1": {
"Z1K1": "Z7",
"Z7K1": "Z35036",
"Z35036K1": {
"Z1K1": "Z18",
"Z18K1": "Z36232K2"
},
"Z35036K2": [
"Z6030",
"Z6036"
],
"Z35036K3": [
"Z60",
"Z1360"
],
"Z35036K4": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P7087"
}
]
},
"Z35103K2": {
"Z1K1": "Z6092",
"Z6092K1": "P7087"
}
}
}
},
"Z36270K2": {
"Z1K1": "Z18",
"Z18K1": "Z36232K4"
}
},
"Z13128",
{
"Z1K1": "Z7",
"Z7K1": "Z36270",
"Z36270K1": {
"Z1K1": "Z18",
"Z18K1": "Z36232K1"
},
"Z36270K2": {
"Z1K1": "Z18",
"Z18K1": "Z36232K4"
}
},
"."
]
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z32234",
"Z32234K1": [
"Z1",
"The ",
{
"Z1K1": "Z7",
"Z7K1": "Z32556",
"Z32556K1": {
"Z1K1": "Z7",
"Z7K1": "Z24766",
"Z24766K1": {
"Z1K1": "Z7",
"Z7K1": "Z35364",
"Z35364K1": {
"Z1K1": "Z7",
"Z7K1": "Z35036",
"Z35036K1": {
"Z1K1": "Z18",
"Z18K1": "Z36232K2"
},
"Z35036K2": [
"Z6030",
"Z6036"
],
"Z35036K3": [
"Z60"
],
"Z35036K4": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P1629"
}
]
}
},
"Z24766K2": {
"Z1K1": "Z18",
"Z18K1": "Z36232K4"
}
},
"Z32556K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z29825",
"Z29825K1": {
"Z1K1": "Z18",
"Z18K1": "Z36232K4"
},
"Z29825K2": {
"Z1K1": "Z18",
"Z18K1": "Z36232K2"
}
}
}
},
" of ",
{
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z22131",
"Z22131K1": {
"Z1K1": "Z7",
"Z7K1": "Z32645",
"Z32645K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z36232K1"
},
"Z30120K2": [
"Z6030",
"Z6033",
"Z6035",
"Z6036"
],
"Z30120K3": "Z33034",
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P31"
},
{
"Z1K1": "Z6092",
"Z6092K1": "P279"
}
]
}
}
},
"Z802K2": "the ",
"Z802K3": ""
},
{
"Z1K1": "Z7",
"Z7K1": "Z36270",
"Z36270K1": {
"Z1K1": "Z18",
"Z18K1": "Z36232K1"
},
"Z36270K2": {
"Z1K1": "Z18",
"Z18K1": "Z36232K4"
}
},
" is ",
{
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z19352",
"Z19352K1": {
"Z1K1": "Z18",
"Z18K1": "Z36232K3"
},
"Z19352K2": "Z6091"
},
"Z802K2": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z22131",
"Z22131K1": {
"Z1K1": "Z7",
"Z7K1": "Z32645",
"Z32645K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z36232K3"
},
"Z30120K2": [
"Z6030",
"Z6033",
"Z6035",
"Z6036"
],
"Z30120K3": "Z33034",
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P31"
},
{
"Z1K1": "Z6092",
"Z6092K1": "P279"
}
]
}
}
},
"Z802K2": "the ",
"Z802K3": ""
},
"Z802K3": ""
},
{
"Z1K1": "Z7",
"Z7K1": "Z36209",
"Z36209K1": {
"Z1K1": "Z18",
"Z18K1": "Z36232K3"
},
"Z36209K2": {
"Z1K1": "Z18",
"Z18K1": "Z36232K4"
}
},
"."
]
}
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "specific property of subject is value, En comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
43yarj5004txzvuou2ye7xhbu5hkuwi
User:Denny/Syntactic tables
2
86559
299360
299344
2026-08-14T12:05:14Z
Denny
81
/* necessary for the goals above */
299360
wikitext
text/x-wiki
= Goals =
These are the examples listed on the [[Wikifunctions:Type proposals/Syntactic table|Type proposal]]:
{| class="wikitable"
|+
|Brač is an island.
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36766%22%2C%22Z36766K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z36766K2%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37246%22%2C%22Z37246K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37220%22%2C%22Z37220K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37220K2%22%3A%22Z1430%22%7D%2C%22Z37246K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37157%22%2C%22Z37157K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z6825%22%2C%22Z6825K1%22%3A%7B%22Z1K1%22%3A%22Z6095%22%2C%22Z6095K1%22%3A%22L408939%22%7D%7D%7D%2C%22Z37246K3%22%3A%22Z1430%22%7D%7D (de)]
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37143%22%2C%22Z37143K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37143K2%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37143K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( Brač, island )</code>
|-
|Brač is a beautiful island.
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36969%22%2C%22Z36969K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37076%22%2C%22Z37076K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37076K2%22%3A%22Z1002%22%7D%2C%22Z36969K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36766%22%2C%22Z36766K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z36766K2%22%3A%22Z1002%22%7D%2C%22Z36969K3%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37126%22%2C%22Z37126K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37115%22%2C%22Z37115K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37115K2%22%3A%22Z1002%22%7D%2C%22Z37126K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37150%22%2C%22Z37150K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37146%22%2C%22Z37146K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37146K2%22%3A%22Z1002%22%7D%2C%22Z37150K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37089%22%2C%22Z37089K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37089K2%22%3A%22Z1002%22%7D%2C%22Z37150K3%22%3A%22Z1002%22%7D%2C%22Z37126K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( Brač, noun with adjective( island, beauty ) )</code>
|-
|Brač is a beautiful [[:en:Island|island]].
| [https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36969%22%2C%22Z36969K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37076%22%2C%22Z37076K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37076K2%22%3A%22Z1002%22%7D%2C%22Z36969K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37080%22%2C%22Z37080K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37080K2%22%3A%22Z1002%22%7D%2C%22Z36969K3%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37126%22%2C%22Z37126K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37115%22%2C%22Z37115K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37115K2%22%3A%22Z1002%22%7D%2C%22Z37126K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37150%22%2C%22Z37150K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37146%22%2C%22Z37146K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37146K2%22%3A%22Z1002%22%7D%2C%22Z37150K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37029%22%2C%22Z37029K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37089%22%2C%22Z37089K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37089K2%22%3A%22Z1002%22%7D%2C%22Z37029K2%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37029K3%22%3A%22Z1002%22%7D%2C%22Z37150K3%22%3A%22Z1002%22%7D%2C%22Z37126K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( Brač, noun with adjective( link( island ), beauty ) )</code>
|-
|'''Brač''' is an island.
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36766%22%2C%22Z36766K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z36766K2%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37246%22%2C%22Z37246K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37220%22%2C%22Z37220K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37220K2%22%3A%22Z1430%22%7D%7D%2C%22Z37246K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37157%22%2C%22Z37157K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z6825%22%2C%22Z6825K1%22%3A%7B%22Z1K1%22%3A%22Z6095%22%2C%22Z6095K1%22%3A%22L408939%22%7D%7D%7D%2C%22Z37246K3%22%3A%22Z1430%22%7D%7D (de)]
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37126%22%2C%22Z37126K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37115%22%2C%22Z37115K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37115K2%22%3A%22Z1002%22%7D%7D%2C%22Z37126K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37089%22%2C%22Z37089K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37089K2%22%3A%22Z1002%22%7D%2C%22Z37126K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( strong( Brač ), island )</code>
|-
|'''Brač''' is a beautiful island.
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36969%22%2C%22Z36969K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37076%22%2C%22Z37076K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37076K2%22%3A%22Z1002%22%7D%2C%22Z36969K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36766%22%2C%22Z36766K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z36766K2%22%3A%22Z1002%22%7D%2C%22Z36969K3%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37126%22%2C%22Z37126K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37115%22%2C%22Z37115K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37115K2%22%3A%22Z1002%22%7D%7D%2C%22Z37126K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37150%22%2C%22Z37150K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37146%22%2C%22Z37146K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37146K2%22%3A%22Z1002%22%7D%2C%22Z37150K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37089%22%2C%22Z37089K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37089K2%22%3A%22Z1002%22%7D%2C%22Z37150K3%22%3A%22Z1002%22%7D%2C%22Z37126K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( strong( Brač ), noun with adjective( island, beauty ) )</code>
|-
|'''Brač''' is a beautiful [[:en:Island|island]].
| [https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36969%22%2C%22Z36969K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37076%22%2C%22Z37076K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37076K2%22%3A%22Z1002%22%7D%2C%22Z36969K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37080%22%2C%22Z37080K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37080K2%22%3A%22Z1002%22%7D%2C%22Z36969K3%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37126%22%2C%22Z37126K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37115%22%2C%22Z37115K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37115K2%22%3A%22Z1002%22%7D%7D%2C%22Z37126K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37150%22%2C%22Z37150K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37146%22%2C%22Z37146K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37146K2%22%3A%22Z1002%22%7D%2C%22Z37150K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37029%22%2C%22Z37029K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37089%22%2C%22Z37089K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37089K2%22%3A%22Z1002%22%7D%2C%22Z37029K2%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37029K3%22%3A%22Z1002%22%7D%2C%22Z37150K3%22%3A%22Z1002%22%7D%2C%22Z37126K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( strong( Brač ), noun with adjective( link( island ), beauty ) )</code>
|-
|'''Brač''' is a beautiful island in [[:en:Croatia|Croatia]].
|
|
|
|<code>instantiating( strong( Brač ), noun in location( noun with adjective( beautiful, island ), link( Croatia ) ) ) )</code>
|}
= Functions =
== English ==
=== necessary for the goals above ===
* English noun
** English noun form from two strings(singular, plural, number) - [[Z39425]]
** English noun form from string(singular, number) - [[Z39430]]
** English noun form from Lexeme(LID, number)
** English noun form from Item(QID, number)
** English noun from two strings(singular, plural)
** English noun from string(singular)
** English noun from Lexeme(LID)
** English noun from Lexeme ref(LID)
** English noun from Item(QID)
** English noun from Item ref(QID)
= Tables =
== English ==
=== necessary for the goals above ===
==== Create functions for determiners {{done}} ====
* Generic / grammatic (check for types in the lightweight enumeration types) {{done}}
** Indef sg (a, an) {{done}}
** Indef pl () {{done}}
** Def sg (the) {{done}}
** Def pl (the) {{done}}
* Ratios
** None (no)
** Some {{done}}
** most
** all
* From Number (from natural number) {{done}}
** zero, one, two, three … {{done}}
==== First fragment of option {{done}} ====
==== ++, join with space in between, unless one of them is empty {{done}} ====
==== Option by features from list of options {{done}} ====
* List of options, features
* If
** set equality ( features, features of option ( first element ( list ) )
** first element ( list )
** Option by features from list of options ( tail ( list ) )
==== Option by features from table {{done}} ====
* Table, features
* Find option with exactly the given features using Option by features from list of options
==== Fragments from table by features {{done}} ====
* Table1, table2
* Option by features from table1 by inherent features of table2
* Return fragments of that option
==== get text content from HTML fragment {{done}} ====
* Remove tags {{done}}
* Undo escapes {{done}}
* noun phrase from det and noun: det, N → NP {{done}}
* Depending on det’s number, choose the noun {{done}}
* Set inherent to det’s number {{done}}
* If det==”a” change it to “an” if needed {{done}}
** Need to use text content from HTML fragment {{done}}
* det++N {{done}}
==== Maybe use noun phrase from det and noun for the respective English function {{done}} ====
==== Check on existing lexeme from qid mappings {{done}} ====
==== Think also for Z36766 {{done}} ====
==== Extend noun from qid by “find lexeme, if not take label” {{done}} ====
* Get lexeme for qid, fallback to label {{done}}
* check if that already exists (seems no)
* So maybe try to find lexeme, and the catch is using the label
* Use label: https://www.wikifunctions.org/view/en/Z24766
==== Indefinite noun phrase from noun: QID → NP (an island) {{done}} ====
* Just use noun phrase from det and noun for this {{done}}
* Look up the lexeme connected to QID → N {{done}}
* If no Lexeme, use the English label as N {{done}}
* Noun phrase from noun(N, indefinite) {{done}}
==== Noun phrase from name: QID → NP (Brač) {{Done}} ====
* Look up the Lexeme connected to QID → N {{Done}}
* If no Lexeme, use the English label as N {{Done}}
* Check if a “the” is required {{Done}}
* Noun phrase from noun: N, the or nothing {{Done}}
* {{Todo}} Stability issues
{{Z|Z36925}}
==== Instantiating present: NP, NP → Sentence {{done}} ====
* NP1++is or are be depending on NP1 number++NP2 {{done}}
{{Z|Z36939}}
==== Capitalize HTML fragment: HTML fragment → HTML fragment {{done}} ====
* find the first letter that is not inside a tag and capitalize that {{done}}
* {{Todo}} would be better to use {{Z|Z10018}}, but I guess that's for later
{{Z|Z36944}}
==== Instantiating past: NP, NP → Sentence {{done}} ====
* NP1++was or were depending on NP1 number++NP2 {{done}}
{{Z|Z36953}}
==== strong: X → X {{done}} ====
* Language independent, tag strong every option {{done}}
[[Z36957]]
==== adjective from three strings {{done}} ====
* adjectives in English seem super easy, if we ignore comparative and superlative for now?
* maybe call it positive adjective, just to be clear
* maybe we shouldn't ignore it. There's no item in Wikidata to use as the 'positive adjective'. So it would be difficult to change it later to a full adjective. Let's just have it the necessary three forms.
==== adjective from string {{done}} ====
* use the regular comparative and regular superlative we already have {{done}}
==== adjective from Lexeme {{done}} ====
* get the positive form {{done}}
{{Z|Z36978}}
==== adjective from QID {{done}} ====
* maybe leave that for later when we do the abstract stuff {{done}}
* see curent QID->Adj mapping ins implementations of [[Z22664]] {{done}}
[[Z37076]]
==== noun with adjective: N, Adj → N {{done}} ====
* adj++N {{done}}
* Use that for [[Z22664]] -- used in [[Z21734]] instead, which the other uses for English {{done}}
==== link table: QID, table → table {{done}} ====
* Language independent, href to QID every option {{done}}
[[Z37029]]
==== linked noun: QID → N {{done}} ====
* link( X(QID), QID ) {{done}}
==== instantiate present: NP, N -> sentence {{done}} ====
* instantiate present( NP, Indef NP from N ( N ) ) {{done}}
[[Z37083]]
==== instantiate past: NP, N -> sentence {{done}} ====
* instantiate past: NP, Indef NP from N ( N ) {{done}}
[[Z37086]]
=== bonus ===
==== references ====
*
==== English Nominative Pronoun for person: QID → N ====
* Look for pronouns
* Look for gender
==== English genitive pronoun from item: QID → Det ====
* As previous, but her and his instead of she and he
==== English Pronoun from item: QID → N ====
* Does it have a Lexeme?
** Take grammatical gender
** Well, not in English
* Is it a person? Use English pronoun for person
* Everything else “it”/“they”?
==== English Pronoun from item and class: QID, QID → N ====
* Is it a person? Use English pronoun for person
* Everything else, based on Lexeme
==== English noun phrase for a named item: QID, QID → N ====
* Make “the city” for San Francisco
* Fall back to San Francisco?
* Maybe this is only useful for the abstract layer?
== Abstract ==
==== N from item: QID, language → N {{done}} ====
* concretize {{done}}
[[Z37089]]
==== NP from named item: QID, language → NP {{done}} ====
* concretize {{done}}
[[Z37115]]
==== Instantiating present: NP, N, language → sentence {{done}} ====
* concretize
[[Z37120]]
==== Instantiating present: NP, N, language → HTML fragment {{done}} ====
* first fragment( instantiating from NP and N) {{done}}
[[Z37126]]
==== instantiating present: QID, QID, language → sentence {{done}} ====
* instantiating( NP from named item(QID), N from item(QID), language ) {{done}}
[[Z37140]]
==== instantiating present: QID, QID, language → HTML fragment {{done}} ====
* first fragment(instating table from qid, qid, language) {{done}}
[[Z37143]]
==== N: N, adj → N {{done}} ====
* concretize {{done}}
[[Z37150]]
==== Adj from item: QID → adj {{done}} ====
* concretize {{done}}
[[Z37146]]
== German ==
=== Needs for the abstract functions ===
==== N from 8 strings {{done}} ====
[[Z37154]]
==== N from one string? {{done}} ====
* depends if it has all the morphological functions
** we don't, it seems? (check with Lexeme Forms whether this is true)
* just guessing from label {{done}}
* gender guessing too, made [[Z37170]], not implemented yet
[[Z37175]]
==== N from Lexeme {{done}} ====
[[Z37157]]
==== N from Lexeme reference {{done}} ====
[[Z37160]]
==== N from item {{done}} ====
* connect the concretizer {{done}}
[[Z37163]]
==== definite determiner {{done}} ====
* inherent: singular / plural {{done}}
* options: number, case {{done}}
* one singular {{done}} [[Z37200]]
* one plural {{done}} [[Z37208]]
==== indefinite determiner {{done}} ====
* one singular {{done}} [[Z37198]]
* one plural {{done}} [[Z37199]]
==== NP from Det and N {{done}} ====
[[Z37209]]
Used that for [[Z26070]] eine Insel -- turned out to be quite a speed up!
==== NP from noun without article {{done}} ====
[[Z37232]]
==== does item need an article? {{done}} ====
[[Z37235]]
==== guess grammatical gender of an item ====
WIP [[Z37170]]
==== NP from named item {{done}} ====
* connect to concretizer {{done}}
[[Z37220]]
==== Instantiate present from 2 np: NP, NP, language → Sentence {{done}} ====
[[Z37241]]
==== Instantiate present from NP, N {{Done}} ====
* connect to concretizer {{Done}}
[[Z37246]]
==== Adj from four fragments ====
* [[Z37473]] -- doesn't work though
==== Adj from four strings ====
==== Adj from three strings ====
==== Adj from one string ====
==== Adj from Lexeme ====
==== Adj from item: QID → adj ====
Adjectives in German would become very big tables. [[:d:Lexeme:L343955]] has 147 forms (maybe it should even be more, 2 numbers x 4 cases x 3 inflections x 3 comparisons x 3 genders?)
But, in general, the bigger the number of forms, the more general they are. So maybe instead of having a table with many, many forms, maybe we should have a table with the basic forms, then functions that generate the rest. Then we call it with the right values when we get to it, e.g. when merging it to a noun phrase.
But how do we make this interact with formatting functions such as "strong" or "link"? These rely on the fact that we already have the fragments materialized.
maybe set a marker on the adjective, and in the relevant merge function use functions on the table and reduce it to a smaller number of options?
should I try to make one adjective with all the necessary options? and see how fast it is?
==== positive Adjective from Adjective ====
* just keep the positive
* put the positive into inherent, remove it from options
==== merge adjective and noun ====
* create table with declination
==== update merge determiner and adj+noun to noun phrase ====
* determiner needs declination
* determiner applies declination on adj+noun, which looks just like a noun
==== N: N, adj → N ====
* add to [[Z20612]]
=== useful helpers? ===
==== gender item from noun: noun → item ====
==== gender from noun: noun → gender ====
==== form from noun: noun, case, number → HTML ====
==== form from noun as string: noun, case, number → string ====
==== form from determiner ====
* expand [[Z28670]] by using determiners
==== determiner from number ====
==== some determiner ====
==== determiner from definiteness, gender, number, case ====
==== Instantiating past from NP, N ====
== Todos ==
==== Fix the missing language option {{done}} ====
* start with abstract implementation of noun from item, adding language {{done}}
* together with the concretized function {{done}}
* push from there to all used functions {{done}}
* push to all functions {{done}}
==== Proper error message ====
* when a concretizer implementation does not have a language set, call the right error message
* in general, do better about error messages
==== Functions to improve ====
* {{Z|Z37235}}
* {{Z|Z37170}}
73og2hgpj2cl4yaiopxsl3mgc2e4atb
299401
299360
2026-08-14T12:44:01Z
Denny
81
/* necessary for the goals above */
299401
wikitext
text/x-wiki
= Goals =
These are the examples listed on the [[Wikifunctions:Type proposals/Syntactic table|Type proposal]]:
{| class="wikitable"
|+
|Brač is an island.
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36766%22%2C%22Z36766K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z36766K2%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37246%22%2C%22Z37246K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37220%22%2C%22Z37220K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37220K2%22%3A%22Z1430%22%7D%2C%22Z37246K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37157%22%2C%22Z37157K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z6825%22%2C%22Z6825K1%22%3A%7B%22Z1K1%22%3A%22Z6095%22%2C%22Z6095K1%22%3A%22L408939%22%7D%7D%7D%2C%22Z37246K3%22%3A%22Z1430%22%7D%7D (de)]
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37143%22%2C%22Z37143K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37143K2%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37143K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( Brač, island )</code>
|-
|Brač is a beautiful island.
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36969%22%2C%22Z36969K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37076%22%2C%22Z37076K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37076K2%22%3A%22Z1002%22%7D%2C%22Z36969K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36766%22%2C%22Z36766K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z36766K2%22%3A%22Z1002%22%7D%2C%22Z36969K3%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37126%22%2C%22Z37126K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37115%22%2C%22Z37115K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37115K2%22%3A%22Z1002%22%7D%2C%22Z37126K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37150%22%2C%22Z37150K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37146%22%2C%22Z37146K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37146K2%22%3A%22Z1002%22%7D%2C%22Z37150K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37089%22%2C%22Z37089K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37089K2%22%3A%22Z1002%22%7D%2C%22Z37150K3%22%3A%22Z1002%22%7D%2C%22Z37126K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( Brač, noun with adjective( island, beauty ) )</code>
|-
|Brač is a beautiful [[:en:Island|island]].
| [https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36969%22%2C%22Z36969K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37076%22%2C%22Z37076K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37076K2%22%3A%22Z1002%22%7D%2C%22Z36969K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37080%22%2C%22Z37080K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37080K2%22%3A%22Z1002%22%7D%2C%22Z36969K3%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37126%22%2C%22Z37126K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37115%22%2C%22Z37115K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37115K2%22%3A%22Z1002%22%7D%2C%22Z37126K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37150%22%2C%22Z37150K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37146%22%2C%22Z37146K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37146K2%22%3A%22Z1002%22%7D%2C%22Z37150K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37029%22%2C%22Z37029K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37089%22%2C%22Z37089K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37089K2%22%3A%22Z1002%22%7D%2C%22Z37029K2%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37029K3%22%3A%22Z1002%22%7D%2C%22Z37150K3%22%3A%22Z1002%22%7D%2C%22Z37126K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( Brač, noun with adjective( link( island ), beauty ) )</code>
|-
|'''Brač''' is an island.
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36766%22%2C%22Z36766K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z36766K2%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37246%22%2C%22Z37246K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37220%22%2C%22Z37220K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37220K2%22%3A%22Z1430%22%7D%7D%2C%22Z37246K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37157%22%2C%22Z37157K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z6825%22%2C%22Z6825K1%22%3A%7B%22Z1K1%22%3A%22Z6095%22%2C%22Z6095K1%22%3A%22L408939%22%7D%7D%7D%2C%22Z37246K3%22%3A%22Z1430%22%7D%7D (de)]
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37126%22%2C%22Z37126K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37115%22%2C%22Z37115K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37115K2%22%3A%22Z1002%22%7D%7D%2C%22Z37126K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37089%22%2C%22Z37089K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37089K2%22%3A%22Z1002%22%7D%2C%22Z37126K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( strong( Brač ), island )</code>
|-
|'''Brač''' is a beautiful island.
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36969%22%2C%22Z36969K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37076%22%2C%22Z37076K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37076K2%22%3A%22Z1002%22%7D%2C%22Z36969K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36766%22%2C%22Z36766K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z36766K2%22%3A%22Z1002%22%7D%2C%22Z36969K3%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37126%22%2C%22Z37126K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37115%22%2C%22Z37115K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37115K2%22%3A%22Z1002%22%7D%7D%2C%22Z37126K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37150%22%2C%22Z37150K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37146%22%2C%22Z37146K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37146K2%22%3A%22Z1002%22%7D%2C%22Z37150K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37089%22%2C%22Z37089K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37089K2%22%3A%22Z1002%22%7D%2C%22Z37150K3%22%3A%22Z1002%22%7D%2C%22Z37126K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( strong( Brač ), noun with adjective( island, beauty ) )</code>
|-
|'''Brač''' is a beautiful [[:en:Island|island]].
| [https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36969%22%2C%22Z36969K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37076%22%2C%22Z37076K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37076K2%22%3A%22Z1002%22%7D%2C%22Z36969K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37080%22%2C%22Z37080K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37080K2%22%3A%22Z1002%22%7D%2C%22Z36969K3%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37126%22%2C%22Z37126K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37115%22%2C%22Z37115K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37115K2%22%3A%22Z1002%22%7D%7D%2C%22Z37126K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37150%22%2C%22Z37150K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37146%22%2C%22Z37146K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37146K2%22%3A%22Z1002%22%7D%2C%22Z37150K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37029%22%2C%22Z37029K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37089%22%2C%22Z37089K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37089K2%22%3A%22Z1002%22%7D%2C%22Z37029K2%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37029K3%22%3A%22Z1002%22%7D%2C%22Z37150K3%22%3A%22Z1002%22%7D%2C%22Z37126K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( strong( Brač ), noun with adjective( link( island ), beauty ) )</code>
|-
|'''Brač''' is a beautiful island in [[:en:Croatia|Croatia]].
|
|
|
|<code>instantiating( strong( Brač ), noun in location( noun with adjective( beautiful, island ), link( Croatia ) ) ) )</code>
|}
= Functions =
== English ==
=== necessary for the goals above ===
* English noun
** English noun form from two strings(singular, plural, number) - [[Z39425]]
** English noun form from string(singular, number) - [[Z39430]]
** English noun form from Lexeme(LID, number) - [[Z39437]]
** English noun form from Item(QID, number)
** English noun from two strings(singular, plural)
** English noun from string(singular)
** English noun from Lexeme(LID)
** English noun from Lexeme ref(LID)
** English noun from Item(QID)
** English noun from Item ref(QID)
= Tables =
== English ==
=== necessary for the goals above ===
==== Create functions for determiners {{done}} ====
* Generic / grammatic (check for types in the lightweight enumeration types) {{done}}
** Indef sg (a, an) {{done}}
** Indef pl () {{done}}
** Def sg (the) {{done}}
** Def pl (the) {{done}}
* Ratios
** None (no)
** Some {{done}}
** most
** all
* From Number (from natural number) {{done}}
** zero, one, two, three … {{done}}
==== First fragment of option {{done}} ====
==== ++, join with space in between, unless one of them is empty {{done}} ====
==== Option by features from list of options {{done}} ====
* List of options, features
* If
** set equality ( features, features of option ( first element ( list ) )
** first element ( list )
** Option by features from list of options ( tail ( list ) )
==== Option by features from table {{done}} ====
* Table, features
* Find option with exactly the given features using Option by features from list of options
==== Fragments from table by features {{done}} ====
* Table1, table2
* Option by features from table1 by inherent features of table2
* Return fragments of that option
==== get text content from HTML fragment {{done}} ====
* Remove tags {{done}}
* Undo escapes {{done}}
* noun phrase from det and noun: det, N → NP {{done}}
* Depending on det’s number, choose the noun {{done}}
* Set inherent to det’s number {{done}}
* If det==”a” change it to “an” if needed {{done}}
** Need to use text content from HTML fragment {{done}}
* det++N {{done}}
==== Maybe use noun phrase from det and noun for the respective English function {{done}} ====
==== Check on existing lexeme from qid mappings {{done}} ====
==== Think also for Z36766 {{done}} ====
==== Extend noun from qid by “find lexeme, if not take label” {{done}} ====
* Get lexeme for qid, fallback to label {{done}}
* check if that already exists (seems no)
* So maybe try to find lexeme, and the catch is using the label
* Use label: https://www.wikifunctions.org/view/en/Z24766
==== Indefinite noun phrase from noun: QID → NP (an island) {{done}} ====
* Just use noun phrase from det and noun for this {{done}}
* Look up the lexeme connected to QID → N {{done}}
* If no Lexeme, use the English label as N {{done}}
* Noun phrase from noun(N, indefinite) {{done}}
==== Noun phrase from name: QID → NP (Brač) {{Done}} ====
* Look up the Lexeme connected to QID → N {{Done}}
* If no Lexeme, use the English label as N {{Done}}
* Check if a “the” is required {{Done}}
* Noun phrase from noun: N, the or nothing {{Done}}
* {{Todo}} Stability issues
{{Z|Z36925}}
==== Instantiating present: NP, NP → Sentence {{done}} ====
* NP1++is or are be depending on NP1 number++NP2 {{done}}
{{Z|Z36939}}
==== Capitalize HTML fragment: HTML fragment → HTML fragment {{done}} ====
* find the first letter that is not inside a tag and capitalize that {{done}}
* {{Todo}} would be better to use {{Z|Z10018}}, but I guess that's for later
{{Z|Z36944}}
==== Instantiating past: NP, NP → Sentence {{done}} ====
* NP1++was or were depending on NP1 number++NP2 {{done}}
{{Z|Z36953}}
==== strong: X → X {{done}} ====
* Language independent, tag strong every option {{done}}
[[Z36957]]
==== adjective from three strings {{done}} ====
* adjectives in English seem super easy, if we ignore comparative and superlative for now?
* maybe call it positive adjective, just to be clear
* maybe we shouldn't ignore it. There's no item in Wikidata to use as the 'positive adjective'. So it would be difficult to change it later to a full adjective. Let's just have it the necessary three forms.
==== adjective from string {{done}} ====
* use the regular comparative and regular superlative we already have {{done}}
==== adjective from Lexeme {{done}} ====
* get the positive form {{done}}
{{Z|Z36978}}
==== adjective from QID {{done}} ====
* maybe leave that for later when we do the abstract stuff {{done}}
* see curent QID->Adj mapping ins implementations of [[Z22664]] {{done}}
[[Z37076]]
==== noun with adjective: N, Adj → N {{done}} ====
* adj++N {{done}}
* Use that for [[Z22664]] -- used in [[Z21734]] instead, which the other uses for English {{done}}
==== link table: QID, table → table {{done}} ====
* Language independent, href to QID every option {{done}}
[[Z37029]]
==== linked noun: QID → N {{done}} ====
* link( X(QID), QID ) {{done}}
==== instantiate present: NP, N -> sentence {{done}} ====
* instantiate present( NP, Indef NP from N ( N ) ) {{done}}
[[Z37083]]
==== instantiate past: NP, N -> sentence {{done}} ====
* instantiate past: NP, Indef NP from N ( N ) {{done}}
[[Z37086]]
=== bonus ===
==== references ====
*
==== English Nominative Pronoun for person: QID → N ====
* Look for pronouns
* Look for gender
==== English genitive pronoun from item: QID → Det ====
* As previous, but her and his instead of she and he
==== English Pronoun from item: QID → N ====
* Does it have a Lexeme?
** Take grammatical gender
** Well, not in English
* Is it a person? Use English pronoun for person
* Everything else “it”/“they”?
==== English Pronoun from item and class: QID, QID → N ====
* Is it a person? Use English pronoun for person
* Everything else, based on Lexeme
==== English noun phrase for a named item: QID, QID → N ====
* Make “the city” for San Francisco
* Fall back to San Francisco?
* Maybe this is only useful for the abstract layer?
== Abstract ==
==== N from item: QID, language → N {{done}} ====
* concretize {{done}}
[[Z37089]]
==== NP from named item: QID, language → NP {{done}} ====
* concretize {{done}}
[[Z37115]]
==== Instantiating present: NP, N, language → sentence {{done}} ====
* concretize
[[Z37120]]
==== Instantiating present: NP, N, language → HTML fragment {{done}} ====
* first fragment( instantiating from NP and N) {{done}}
[[Z37126]]
==== instantiating present: QID, QID, language → sentence {{done}} ====
* instantiating( NP from named item(QID), N from item(QID), language ) {{done}}
[[Z37140]]
==== instantiating present: QID, QID, language → HTML fragment {{done}} ====
* first fragment(instating table from qid, qid, language) {{done}}
[[Z37143]]
==== N: N, adj → N {{done}} ====
* concretize {{done}}
[[Z37150]]
==== Adj from item: QID → adj {{done}} ====
* concretize {{done}}
[[Z37146]]
== German ==
=== Needs for the abstract functions ===
==== N from 8 strings {{done}} ====
[[Z37154]]
==== N from one string? {{done}} ====
* depends if it has all the morphological functions
** we don't, it seems? (check with Lexeme Forms whether this is true)
* just guessing from label {{done}}
* gender guessing too, made [[Z37170]], not implemented yet
[[Z37175]]
==== N from Lexeme {{done}} ====
[[Z37157]]
==== N from Lexeme reference {{done}} ====
[[Z37160]]
==== N from item {{done}} ====
* connect the concretizer {{done}}
[[Z37163]]
==== definite determiner {{done}} ====
* inherent: singular / plural {{done}}
* options: number, case {{done}}
* one singular {{done}} [[Z37200]]
* one plural {{done}} [[Z37208]]
==== indefinite determiner {{done}} ====
* one singular {{done}} [[Z37198]]
* one plural {{done}} [[Z37199]]
==== NP from Det and N {{done}} ====
[[Z37209]]
Used that for [[Z26070]] eine Insel -- turned out to be quite a speed up!
==== NP from noun without article {{done}} ====
[[Z37232]]
==== does item need an article? {{done}} ====
[[Z37235]]
==== guess grammatical gender of an item ====
WIP [[Z37170]]
==== NP from named item {{done}} ====
* connect to concretizer {{done}}
[[Z37220]]
==== Instantiate present from 2 np: NP, NP, language → Sentence {{done}} ====
[[Z37241]]
==== Instantiate present from NP, N {{Done}} ====
* connect to concretizer {{Done}}
[[Z37246]]
==== Adj from four fragments ====
* [[Z37473]] -- doesn't work though
==== Adj from four strings ====
==== Adj from three strings ====
==== Adj from one string ====
==== Adj from Lexeme ====
==== Adj from item: QID → adj ====
Adjectives in German would become very big tables. [[:d:Lexeme:L343955]] has 147 forms (maybe it should even be more, 2 numbers x 4 cases x 3 inflections x 3 comparisons x 3 genders?)
But, in general, the bigger the number of forms, the more general they are. So maybe instead of having a table with many, many forms, maybe we should have a table with the basic forms, then functions that generate the rest. Then we call it with the right values when we get to it, e.g. when merging it to a noun phrase.
But how do we make this interact with formatting functions such as "strong" or "link"? These rely on the fact that we already have the fragments materialized.
maybe set a marker on the adjective, and in the relevant merge function use functions on the table and reduce it to a smaller number of options?
should I try to make one adjective with all the necessary options? and see how fast it is?
==== positive Adjective from Adjective ====
* just keep the positive
* put the positive into inherent, remove it from options
==== merge adjective and noun ====
* create table with declination
==== update merge determiner and adj+noun to noun phrase ====
* determiner needs declination
* determiner applies declination on adj+noun, which looks just like a noun
==== N: N, adj → N ====
* add to [[Z20612]]
=== useful helpers? ===
==== gender item from noun: noun → item ====
==== gender from noun: noun → gender ====
==== form from noun: noun, case, number → HTML ====
==== form from noun as string: noun, case, number → string ====
==== form from determiner ====
* expand [[Z28670]] by using determiners
==== determiner from number ====
==== some determiner ====
==== determiner from definiteness, gender, number, case ====
==== Instantiating past from NP, N ====
== Todos ==
==== Fix the missing language option {{done}} ====
* start with abstract implementation of noun from item, adding language {{done}}
* together with the concretized function {{done}}
* push from there to all used functions {{done}}
* push to all functions {{done}}
==== Proper error message ====
* when a concretizer implementation does not have a language set, call the right error message
* in general, do better about error messages
==== Functions to improve ====
* {{Z|Z37235}}
* {{Z|Z37170}}
89j1a9t3tphfgfdd4vhw1ne6z89v82z
299403
299401
2026-08-14T12:57:33Z
Denny
81
/* necessary for the goals above */
299403
wikitext
text/x-wiki
= Goals =
These are the examples listed on the [[Wikifunctions:Type proposals/Syntactic table|Type proposal]]:
{| class="wikitable"
|+
|Brač is an island.
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36766%22%2C%22Z36766K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z36766K2%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37246%22%2C%22Z37246K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37220%22%2C%22Z37220K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37220K2%22%3A%22Z1430%22%7D%2C%22Z37246K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37157%22%2C%22Z37157K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z6825%22%2C%22Z6825K1%22%3A%7B%22Z1K1%22%3A%22Z6095%22%2C%22Z6095K1%22%3A%22L408939%22%7D%7D%7D%2C%22Z37246K3%22%3A%22Z1430%22%7D%7D (de)]
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37143%22%2C%22Z37143K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37143K2%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37143K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( Brač, island )</code>
|-
|Brač is a beautiful island.
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36969%22%2C%22Z36969K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37076%22%2C%22Z37076K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37076K2%22%3A%22Z1002%22%7D%2C%22Z36969K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36766%22%2C%22Z36766K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z36766K2%22%3A%22Z1002%22%7D%2C%22Z36969K3%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37126%22%2C%22Z37126K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37115%22%2C%22Z37115K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37115K2%22%3A%22Z1002%22%7D%2C%22Z37126K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37150%22%2C%22Z37150K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37146%22%2C%22Z37146K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37146K2%22%3A%22Z1002%22%7D%2C%22Z37150K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37089%22%2C%22Z37089K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37089K2%22%3A%22Z1002%22%7D%2C%22Z37150K3%22%3A%22Z1002%22%7D%2C%22Z37126K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( Brač, noun with adjective( island, beauty ) )</code>
|-
|Brač is a beautiful [[:en:Island|island]].
| [https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36969%22%2C%22Z36969K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37076%22%2C%22Z37076K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37076K2%22%3A%22Z1002%22%7D%2C%22Z36969K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37080%22%2C%22Z37080K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37080K2%22%3A%22Z1002%22%7D%2C%22Z36969K3%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37126%22%2C%22Z37126K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37115%22%2C%22Z37115K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37115K2%22%3A%22Z1002%22%7D%2C%22Z37126K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37150%22%2C%22Z37150K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37146%22%2C%22Z37146K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37146K2%22%3A%22Z1002%22%7D%2C%22Z37150K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37029%22%2C%22Z37029K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37089%22%2C%22Z37089K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37089K2%22%3A%22Z1002%22%7D%2C%22Z37029K2%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37029K3%22%3A%22Z1002%22%7D%2C%22Z37150K3%22%3A%22Z1002%22%7D%2C%22Z37126K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( Brač, noun with adjective( link( island ), beauty ) )</code>
|-
|'''Brač''' is an island.
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36766%22%2C%22Z36766K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z36766K2%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37246%22%2C%22Z37246K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37220%22%2C%22Z37220K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37220K2%22%3A%22Z1430%22%7D%7D%2C%22Z37246K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37157%22%2C%22Z37157K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z6825%22%2C%22Z6825K1%22%3A%7B%22Z1K1%22%3A%22Z6095%22%2C%22Z6095K1%22%3A%22L408939%22%7D%7D%7D%2C%22Z37246K3%22%3A%22Z1430%22%7D%7D (de)]
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37126%22%2C%22Z37126K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37115%22%2C%22Z37115K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37115K2%22%3A%22Z1002%22%7D%7D%2C%22Z37126K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37089%22%2C%22Z37089K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37089K2%22%3A%22Z1002%22%7D%2C%22Z37126K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( strong( Brač ), island )</code>
|-
|'''Brač''' is a beautiful island.
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36969%22%2C%22Z36969K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37076%22%2C%22Z37076K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37076K2%22%3A%22Z1002%22%7D%2C%22Z36969K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36766%22%2C%22Z36766K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z36766K2%22%3A%22Z1002%22%7D%2C%22Z36969K3%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37126%22%2C%22Z37126K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37115%22%2C%22Z37115K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37115K2%22%3A%22Z1002%22%7D%7D%2C%22Z37126K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37150%22%2C%22Z37150K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37146%22%2C%22Z37146K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37146K2%22%3A%22Z1002%22%7D%2C%22Z37150K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37089%22%2C%22Z37089K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37089K2%22%3A%22Z1002%22%7D%2C%22Z37150K3%22%3A%22Z1002%22%7D%2C%22Z37126K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( strong( Brač ), noun with adjective( island, beauty ) )</code>
|-
|'''Brač''' is a beautiful [[:en:Island|island]].
| [https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36747%22%2C%22Z36747K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37083%22%2C%22Z37083K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36925%22%2C%22Z36925K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z36925K2%22%3A%22Z1002%22%7D%7D%2C%22Z37083K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36969%22%2C%22Z36969K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37076%22%2C%22Z37076K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37076K2%22%3A%22Z1002%22%7D%2C%22Z36969K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37080%22%2C%22Z37080K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37080K2%22%3A%22Z1002%22%7D%2C%22Z36969K3%22%3A%22Z1002%22%7D%2C%22Z37083K3%22%3A%22Z1002%22%7D%7D (en)]
|
|[https://www.wikifunctions.org/wiki/Special:RunFunction?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37126%22%2C%22Z37126K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z36957%22%2C%22Z36957K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37115%22%2C%22Z37115K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q922%22%7D%2C%22Z37115K2%22%3A%22Z1002%22%7D%7D%2C%22Z37126K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37150%22%2C%22Z37150K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37146%22%2C%22Z37146K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q4376884%22%7D%2C%22Z37146K2%22%3A%22Z1002%22%7D%2C%22Z37150K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37029%22%2C%22Z37029K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37089%22%2C%22Z37089K1%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37089K2%22%3A%22Z1002%22%7D%2C%22Z37029K2%22%3A%7B%22Z1K1%22%3A%22Z6091%22%2C%22Z6091K1%22%3A%22Q23442%22%7D%2C%22Z37029K3%22%3A%22Z1002%22%7D%2C%22Z37150K3%22%3A%22Z1002%22%7D%2C%22Z37126K3%22%3A%22Z1002%22%7D (abs)]
|<code>instantiating( strong( Brač ), noun with adjective( link( island ), beauty ) )</code>
|-
|'''Brač''' is a beautiful island in [[:en:Croatia|Croatia]].
|
|
|
|<code>instantiating( strong( Brač ), noun in location( noun with adjective( beautiful, island ), link( Croatia ) ) ) )</code>
|}
= Functions =
== English ==
=== necessary for the goals above ===
* English noun
** English noun fragment from two strings(singular, plural, number) - [[Z39425]]
** English noun fragment from string(singular, number) - [[Z39430]]
** English noun fragment from Lexeme(LID, number) - [[Z39437]]
** English noun fragment from Item(QID, number)
** English noun from two strings(singular, plural)
** English noun from string(singular)
** English noun from Lexeme(LID)
** English noun from Item(QID)
= Tables =
== English ==
=== necessary for the goals above ===
==== Create functions for determiners {{done}} ====
* Generic / grammatic (check for types in the lightweight enumeration types) {{done}}
** Indef sg (a, an) {{done}}
** Indef pl () {{done}}
** Def sg (the) {{done}}
** Def pl (the) {{done}}
* Ratios
** None (no)
** Some {{done}}
** most
** all
* From Number (from natural number) {{done}}
** zero, one, two, three … {{done}}
==== First fragment of option {{done}} ====
==== ++, join with space in between, unless one of them is empty {{done}} ====
==== Option by features from list of options {{done}} ====
* List of options, features
* If
** set equality ( features, features of option ( first element ( list ) )
** first element ( list )
** Option by features from list of options ( tail ( list ) )
==== Option by features from table {{done}} ====
* Table, features
* Find option with exactly the given features using Option by features from list of options
==== Fragments from table by features {{done}} ====
* Table1, table2
* Option by features from table1 by inherent features of table2
* Return fragments of that option
==== get text content from HTML fragment {{done}} ====
* Remove tags {{done}}
* Undo escapes {{done}}
* noun phrase from det and noun: det, N → NP {{done}}
* Depending on det’s number, choose the noun {{done}}
* Set inherent to det’s number {{done}}
* If det==”a” change it to “an” if needed {{done}}
** Need to use text content from HTML fragment {{done}}
* det++N {{done}}
==== Maybe use noun phrase from det and noun for the respective English function {{done}} ====
==== Check on existing lexeme from qid mappings {{done}} ====
==== Think also for Z36766 {{done}} ====
==== Extend noun from qid by “find lexeme, if not take label” {{done}} ====
* Get lexeme for qid, fallback to label {{done}}
* check if that already exists (seems no)
* So maybe try to find lexeme, and the catch is using the label
* Use label: https://www.wikifunctions.org/view/en/Z24766
==== Indefinite noun phrase from noun: QID → NP (an island) {{done}} ====
* Just use noun phrase from det and noun for this {{done}}
* Look up the lexeme connected to QID → N {{done}}
* If no Lexeme, use the English label as N {{done}}
* Noun phrase from noun(N, indefinite) {{done}}
==== Noun phrase from name: QID → NP (Brač) {{Done}} ====
* Look up the Lexeme connected to QID → N {{Done}}
* If no Lexeme, use the English label as N {{Done}}
* Check if a “the” is required {{Done}}
* Noun phrase from noun: N, the or nothing {{Done}}
* {{Todo}} Stability issues
{{Z|Z36925}}
==== Instantiating present: NP, NP → Sentence {{done}} ====
* NP1++is or are be depending on NP1 number++NP2 {{done}}
{{Z|Z36939}}
==== Capitalize HTML fragment: HTML fragment → HTML fragment {{done}} ====
* find the first letter that is not inside a tag and capitalize that {{done}}
* {{Todo}} would be better to use {{Z|Z10018}}, but I guess that's for later
{{Z|Z36944}}
==== Instantiating past: NP, NP → Sentence {{done}} ====
* NP1++was or were depending on NP1 number++NP2 {{done}}
{{Z|Z36953}}
==== strong: X → X {{done}} ====
* Language independent, tag strong every option {{done}}
[[Z36957]]
==== adjective from three strings {{done}} ====
* adjectives in English seem super easy, if we ignore comparative and superlative for now?
* maybe call it positive adjective, just to be clear
* maybe we shouldn't ignore it. There's no item in Wikidata to use as the 'positive adjective'. So it would be difficult to change it later to a full adjective. Let's just have it the necessary three forms.
==== adjective from string {{done}} ====
* use the regular comparative and regular superlative we already have {{done}}
==== adjective from Lexeme {{done}} ====
* get the positive form {{done}}
{{Z|Z36978}}
==== adjective from QID {{done}} ====
* maybe leave that for later when we do the abstract stuff {{done}}
* see curent QID->Adj mapping ins implementations of [[Z22664]] {{done}}
[[Z37076]]
==== noun with adjective: N, Adj → N {{done}} ====
* adj++N {{done}}
* Use that for [[Z22664]] -- used in [[Z21734]] instead, which the other uses for English {{done}}
==== link table: QID, table → table {{done}} ====
* Language independent, href to QID every option {{done}}
[[Z37029]]
==== linked noun: QID → N {{done}} ====
* link( X(QID), QID ) {{done}}
==== instantiate present: NP, N -> sentence {{done}} ====
* instantiate present( NP, Indef NP from N ( N ) ) {{done}}
[[Z37083]]
==== instantiate past: NP, N -> sentence {{done}} ====
* instantiate past: NP, Indef NP from N ( N ) {{done}}
[[Z37086]]
=== bonus ===
==== references ====
*
==== English Nominative Pronoun for person: QID → N ====
* Look for pronouns
* Look for gender
==== English genitive pronoun from item: QID → Det ====
* As previous, but her and his instead of she and he
==== English Pronoun from item: QID → N ====
* Does it have a Lexeme?
** Take grammatical gender
** Well, not in English
* Is it a person? Use English pronoun for person
* Everything else “it”/“they”?
==== English Pronoun from item and class: QID, QID → N ====
* Is it a person? Use English pronoun for person
* Everything else, based on Lexeme
==== English noun phrase for a named item: QID, QID → N ====
* Make “the city” for San Francisco
* Fall back to San Francisco?
* Maybe this is only useful for the abstract layer?
== Abstract ==
==== N from item: QID, language → N {{done}} ====
* concretize {{done}}
[[Z37089]]
==== NP from named item: QID, language → NP {{done}} ====
* concretize {{done}}
[[Z37115]]
==== Instantiating present: NP, N, language → sentence {{done}} ====
* concretize
[[Z37120]]
==== Instantiating present: NP, N, language → HTML fragment {{done}} ====
* first fragment( instantiating from NP and N) {{done}}
[[Z37126]]
==== instantiating present: QID, QID, language → sentence {{done}} ====
* instantiating( NP from named item(QID), N from item(QID), language ) {{done}}
[[Z37140]]
==== instantiating present: QID, QID, language → HTML fragment {{done}} ====
* first fragment(instating table from qid, qid, language) {{done}}
[[Z37143]]
==== N: N, adj → N {{done}} ====
* concretize {{done}}
[[Z37150]]
==== Adj from item: QID → adj {{done}} ====
* concretize {{done}}
[[Z37146]]
== German ==
=== Needs for the abstract functions ===
==== N from 8 strings {{done}} ====
[[Z37154]]
==== N from one string? {{done}} ====
* depends if it has all the morphological functions
** we don't, it seems? (check with Lexeme Forms whether this is true)
* just guessing from label {{done}}
* gender guessing too, made [[Z37170]], not implemented yet
[[Z37175]]
==== N from Lexeme {{done}} ====
[[Z37157]]
==== N from Lexeme reference {{done}} ====
[[Z37160]]
==== N from item {{done}} ====
* connect the concretizer {{done}}
[[Z37163]]
==== definite determiner {{done}} ====
* inherent: singular / plural {{done}}
* options: number, case {{done}}
* one singular {{done}} [[Z37200]]
* one plural {{done}} [[Z37208]]
==== indefinite determiner {{done}} ====
* one singular {{done}} [[Z37198]]
* one plural {{done}} [[Z37199]]
==== NP from Det and N {{done}} ====
[[Z37209]]
Used that for [[Z26070]] eine Insel -- turned out to be quite a speed up!
==== NP from noun without article {{done}} ====
[[Z37232]]
==== does item need an article? {{done}} ====
[[Z37235]]
==== guess grammatical gender of an item ====
WIP [[Z37170]]
==== NP from named item {{done}} ====
* connect to concretizer {{done}}
[[Z37220]]
==== Instantiate present from 2 np: NP, NP, language → Sentence {{done}} ====
[[Z37241]]
==== Instantiate present from NP, N {{Done}} ====
* connect to concretizer {{Done}}
[[Z37246]]
==== Adj from four fragments ====
* [[Z37473]] -- doesn't work though
==== Adj from four strings ====
==== Adj from three strings ====
==== Adj from one string ====
==== Adj from Lexeme ====
==== Adj from item: QID → adj ====
Adjectives in German would become very big tables. [[:d:Lexeme:L343955]] has 147 forms (maybe it should even be more, 2 numbers x 4 cases x 3 inflections x 3 comparisons x 3 genders?)
But, in general, the bigger the number of forms, the more general they are. So maybe instead of having a table with many, many forms, maybe we should have a table with the basic forms, then functions that generate the rest. Then we call it with the right values when we get to it, e.g. when merging it to a noun phrase.
But how do we make this interact with formatting functions such as "strong" or "link"? These rely on the fact that we already have the fragments materialized.
maybe set a marker on the adjective, and in the relevant merge function use functions on the table and reduce it to a smaller number of options?
should I try to make one adjective with all the necessary options? and see how fast it is?
==== positive Adjective from Adjective ====
* just keep the positive
* put the positive into inherent, remove it from options
==== merge adjective and noun ====
* create table with declination
==== update merge determiner and adj+noun to noun phrase ====
* determiner needs declination
* determiner applies declination on adj+noun, which looks just like a noun
==== N: N, adj → N ====
* add to [[Z20612]]
=== useful helpers? ===
==== gender item from noun: noun → item ====
==== gender from noun: noun → gender ====
==== form from noun: noun, case, number → HTML ====
==== form from noun as string: noun, case, number → string ====
==== form from determiner ====
* expand [[Z28670]] by using determiners
==== determiner from number ====
==== some determiner ====
==== determiner from definiteness, gender, number, case ====
==== Instantiating past from NP, N ====
== Todos ==
==== Fix the missing language option {{done}} ====
* start with abstract implementation of noun from item, adding language {{done}}
* together with the concretized function {{done}}
* push from there to all used functions {{done}}
* push to all functions {{done}}
==== Proper error message ====
* when a concretizer implementation does not have a language set, call the right error message
* in general, do better about error messages
==== Functions to improve ====
* {{Z|Z37235}}
* {{Z|Z37170}}
m3eaci0jp7k068bwwykc4yrommtl5h3
Z36983
0
86655
299463
293830
2026-08-14T21:22:38Z
Ornithorynque liminaire
1539
better French
299463
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z36983"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z36983K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1645",
"Z11K2": "实体"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "entita"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "entité"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Ding"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "entitas"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1643",
"Z11K2": "클래스"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1003",
"Z11K2": "entidad"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "entitet"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "encja"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z36983K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "class"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1645",
"Z11K2": "类别"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "třída"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "classe"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Art"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "kelas"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1643",
"Z11K2": "엔터티"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1003",
"Z11K2": "clase"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "typ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "klasa"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z36983K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "location"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1645",
"Z11K2": "位置"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "umístění"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "localisation"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Ort"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "lokasi"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1643",
"Z11K2": "위치"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1003",
"Z11K2": "ubicación"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "plats"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "położenie"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z36983K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1645",
"Z11K2": "语言"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "jazyk"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "langue"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Sprache"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "bahasa"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1643",
"Z11K2": "언어"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1003",
"Z11K2": "lengua"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "språk"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "język"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z36984",
"Z37475"
],
"Z8K4": [
"Z14",
"Z36985"
],
"Z8K5": "Z36983"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "state location using entity and class"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1645",
"Z11K2": "使用实体和类别说明位置 "
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "vyjádřit umístění pomocí entity a třídy "
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "description par la classe et la localisation"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Satz über ein Ding einer Art an einem Ort "
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "Berikan lokasi menggunakan entitas dan kelas "
},
{
"Z1K1": "Z11",
"Z11K1": "Z1643",
"Z11K2": "엔터티와 클래스를 사용하여 위치 지정 "
},
{
"Z1K1": "Z11",
"Z11K1": "Z1003",
"Z11K2": "localizar utilizando la entidad y la clase "
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "ange plats med entitet och typ (HTML-fragment)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "wyraź położenie za pomocą encji i klasy"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
" something is a something in somewhere",
"is a ? in ?",
" X is a Y in Z",
"state location using entity and class (HTML)",
"entity is a class in location"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1645",
"Z31K2": [
"Z6",
"某物是某地的某类事物"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1430",
"Z31K2": [
"Z6",
"X ist ein Y in Z"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1078",
"Z31K2": [
"Z6",
"sesuatu adalah sesuatu di suatu tempat"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1592",
"Z31K2": [
"Z6",
"Ange plats med entitet och klass"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1025",
"Z31K2": [
"Z6",
"coś jest czymś w czymś, ? jest ? w ?, encja jest klasą w położeniu"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1004",
"Z31K2": [
"Z6",
"localiser en utilisant l'entité et la classe ",
"l'item est quelque chose à cet endroit",
"X est un Y en Z",
"X est une Y à Z"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Forms a sentence stating the location and class of a given entity. E.g. \"Seoul is a city in South Korea.\""
},
{
"Z1K1": "Z11",
"Z11K1": "Z1645",
"Z11K2": "生成一句话,说明某个给定实体的类别及其所在位置。如:“首尔是韩国的一座城市。”"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "Vytvoří větu popisující polohu a třídu dané entity. Např. „Soul je město v Jižní Koreji.“"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "z.B. \"Seoul ist eine Stadt in Südkorea.\""
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "Membuat kalimat yang memberikan lokasi dan kelas dari entitas yang diberikan. Misalnya \"Seoul adalah kota di Korea Selatan.\""
},
{
"Z1K1": "Z11",
"Z11K1": "Z1003",
"Z11K2": "ejemplo : \"Francia es un país en Europa.\""
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "Skapar en mening med plats och typ av en angiven entitet. Ex. \"Seoul är en stad i Sydkorea.\""
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "Tworzy zdanie określające położenie i klasę danej encji, np. Seul jest miastem w Korei Południowej."
}
]
}
}
0ln7ng0vucr1s27b6p4nle78kgstk78
Z37869
0
88054
299535
296409
2026-08-15T06:17:57Z
99of9
1622
only supports values that are QIDs, not quantities, dates, etc
299535
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z37869"
},
"Z2K2": {
"Z1K1": "Z14294",
"Z14294K1": [
"Z14293",
{
"Z1K1": "Z14293",
"Z14293K1": "Z37858",
"Z14293K2": "Z33056"
},
{
"Z1K1": "Z14293",
"Z14293K1": "Z37855",
"Z14293K2": [
"Z60",
"Z1689"
]
},
{
"Z1K1": "Z14293",
"Z14293K1": "Z38844",
"Z14293K2": [
"Z60",
"Z1002",
"Z1124",
"Z1113",
"Z1199",
"Z1437",
"Z1966"
]
}
],
"Z14294K2": "Z37855"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "config for joining WD item property QID values"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "outputs should be monolingual text"
}
]
}
}
i89gypmlrophksrqzm631bqyvyrag19
Z37890
0
88075
299459
291902
2026-08-14T21:13:59Z
Ornithorynque liminaire
1539
French
299459
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z37890"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z37890K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z37890K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z37892"
],
"Z8K4": [
"Z14",
"Z37891"
],
"Z8K5": "Z37890"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity made from-sentence"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "ingrédients"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1004",
"Z31K2": [
"Z6",
"fait à partir de",
"composition"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
74uh9rthgy07so48zw781w6pt4qi0zm
Z38411
0
88754
299584
294635
2026-08-15T09:54:14Z
99of9
1622
Added Z39480 to the approved list of test cases
299584
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38411"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38411K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z38411K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38411K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38411K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z38413",
"Z39480"
],
"Z8K4": [
"Z14",
"Z38412"
],
"Z8K5": "Z38411"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence in English"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
0wqnf18v1cmr7bntwnpe7edbpsa446s
299590
299584
2026-08-15T10:55:32Z
99of9
1622
Removed Z38412 from the approved list of implementations
299590
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38411"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38411K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z38411K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38411K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38411K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z38413",
"Z39480"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z38411"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence in English"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
k3qh8tgu06lugo6ef2slh2vxikjbnqt
299591
299590
2026-08-15T10:55:36Z
99of9
1622
Removed Z38413 and Z39480 from the approved list of test cases
299591
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38411"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38411K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z38411K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38411K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38411K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z38411"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence in English"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
kxtrtsu2yzxxoyhs4enaxr3r51z3c9y
299595
299591
2026-08-15T11:03:01Z
99of9
1622
299595
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38411"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38411K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z38411K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "list of neighbours"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z38411K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38411K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38411K5",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "variant of English"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z38411"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence in English"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
0xrwp15l7c5oo5vqj8l21jla894joio
299600
299595
2026-08-15T11:17:35Z
99of9
1622
Added Z38413 and Z39480 to the approved list of test cases
299600
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38411"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38411K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z38411K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "list of neighbours"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z38411K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38411K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38411K5",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "variant of English"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z38413",
"Z39480"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z38411"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence in English"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
se202vlx9rnhh3jl84zdeeov6xye236
299605
299600
2026-08-15T11:30:03Z
99of9
1622
Added Z38412 to the approved list of implementations
299605
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38411"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38411K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z38411K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "list of neighbours"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z38411K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38411K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38411K5",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "variant of English"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z38413",
"Z39480"
],
"Z8K4": [
"Z14",
"Z38412"
],
"Z8K5": "Z38411"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence in English"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
m3wo1twv7x3136k6rgg23y3u3a7yuxb
Z38412
0
88755
299596
298456
2026-08-15T11:07:16Z
99of9
1622
half of update for new signature
299596
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38412"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38411",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z34669",
"Z34669K1": [
"Z11",
{
"Z1K1": "Z7",
"Z7K1": "Z34669",
"Z34669K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
},
"Z11K2": {
"Z1K1": "Z7",
"Z7K1": "Z10771",
"Z10771K1": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K3"
},
"Z802K2": "it",
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z24766",
"Z24766K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K1"
},
"Z24766K2": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
}
}
}
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z19316",
"Z19316K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K4"
},
"Z19316K2": {
"Z1K1": "Z6091",
"Z6091K1": "Q1994301"
}
},
"Z802K2": {
"Z1K1": "Z11",
"Z11K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
},
"Z11K2": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z12755",
"Z12755K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K2"
}
},
"Z802K2": "shared a border with",
"Z802K3": "shared borders with"
}
},
"Z802K3": {
"Z1K1": "Z11",
"Z11K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
},
"Z11K2": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z12755",
"Z12755K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K2"
}
},
"Z802K2": "shares a border with",
"Z802K3": "shares borders with"
}
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z37870",
"Z37870K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K1"
},
"Z37870K2": {
"Z1K1": "Z6092",
"Z6092K1": "P47"
},
"Z37870K3": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
}
}
],
"Z34669K2": {
"Z1K1": "Z11",
"Z11K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
},
"Z11K2": " "
}
},
{
"Z1K1": "Z11",
"Z11K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
},
"Z11K2": "."
}
],
"Z34669K2": {
"Z1K1": "Z11",
"Z11K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
},
"Z11K2": ""
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence, en, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
sfhxcge2chw42b7euva5dp8p7ggay6i
299604
299596
2026-08-15T11:27:51Z
99of9
1622
complete change?
299604
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38412"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38411",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z34669",
"Z34669K1": [
"Z11",
{
"Z1K1": "Z7",
"Z7K1": "Z34669",
"Z34669K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
},
"Z11K2": {
"Z1K1": "Z7",
"Z7K1": "Z10771",
"Z10771K1": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K3"
},
"Z802K2": "it",
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z24766",
"Z24766K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K1"
},
"Z24766K2": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
}
}
}
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z19316",
"Z19316K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K4"
},
"Z19316K2": {
"Z1K1": "Z6091",
"Z6091K1": "Q1994301"
}
},
"Z802K2": {
"Z1K1": "Z11",
"Z11K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
},
"Z11K2": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z12755",
"Z12755K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K2"
}
},
"Z802K2": "shared a border with",
"Z802K3": "shared borders with"
}
},
"Z802K3": {
"Z1K1": "Z11",
"Z11K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
},
"Z11K2": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z12755",
"Z12755K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K2"
}
},
"Z802K2": "shares a border with",
"Z802K3": "shares borders with"
}
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z26107",
"Z26107K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
},
"Z26107K2": {
"Z1K1": "Z7",
"Z7K1": "Z32308",
"Z32308K1": {
"Z1K1": "Z7",
"Z7K1": "Z13464",
"Z13464K1": "Z36270",
"Z13464K2": {
"Z1K1": "Z18",
"Z18K1": "Z38411K2"
},
"Z13464K3": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
}
},
"Z32308K2": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
}
}
}
],
"Z34669K2": {
"Z1K1": "Z11",
"Z11K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
},
"Z11K2": " "
}
},
{
"Z1K1": "Z11",
"Z11K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
},
"Z11K2": "."
}
],
"Z34669K2": {
"Z1K1": "Z11",
"Z11K1": {
"Z1K1": "Z18",
"Z18K1": "Z38411K5"
},
"Z11K2": ""
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence, en, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
5a2s0lzodqcnnf93nyw5u9l47c4cbvp
Z38413
0
88756
299598
298457
2026-08-15T11:16:27Z
99of9
1622
new signature
299598
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38413"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z38411",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z38411",
"Z38411K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q8842"
},
"Z38411K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q8667"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q9285"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q8853"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q9282"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q43365"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q10578"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q10580"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q8910"
}
],
"Z38411K3": {
"Z1K1": "Z40",
"Z40K1": "Z41"
},
"Z38411K4": {
"Z1K1": "Z6091",
"Z6091K1": "Q192613"
},
"Z38411K5": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z14392",
"Z14392K2": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Virgo shares borders with Boötes, Coma Berenices, Leo, Crater, Corvus, Hydra, Libra and Serpens."
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Virgo constellation shares border, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
lgrvrxqkhyek54hbqlw3vlae8szli7c
299599
299598
2026-08-15T11:17:10Z
99of9
1622
299599
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38413"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z38411",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z38411",
"Z38411K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q8842"
},
"Z38411K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q8667"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q9285"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q8853"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q9282"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q43365"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q10578"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q10580"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q8910"
}
],
"Z38411K3": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z38411K4": {
"Z1K1": "Z6091",
"Z6091K1": "Q192613"
},
"Z38411K5": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z14392",
"Z14392K2": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Virgo shares borders with Boötes, Coma Berenices, Leo, Crater, Corvus, Hydra, Libra and Serpens."
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Virgo constellation shares border, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
9pi5z7vnmtbd9m2qhbjyvmuygbwzeo4
Z38425
0
88768
299526
294640
2026-08-15T05:17:14Z
99of9
1622
299526
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38425"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z38425K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38425K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z38427"
],
"Z8K4": [
"Z14",
"Z38426"
],
"Z8K5": "Z38425"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence (monolingual)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
j1u5p9ye7mu6crx8r96gbh44mmleiv4
299588
299526
2026-08-15T10:54:47Z
99of9
1622
Removed Z38427 from the approved list of test cases
299588
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38425"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z38425K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38425K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z38426"
],
"Z8K5": "Z38425"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence (monolingual)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
1vad7vtit705r2afwskeedp98d8q8f1
299589
299588
2026-08-15T10:54:49Z
99of9
1622
Removed Z38426 from the approved list of implementations
299589
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38425"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z38425K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38425K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z38425"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence (monolingual)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
dw05s5qyh49gj980yea96cltn8vppft
299593
299589
2026-08-15T10:57:17Z
99of9
1622
change signature to include list of neighbours
299593
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38425"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z38425K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "list of neighbours"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z38425K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38425K5",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z38425"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence (monolingual)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
ljbxdxixiicrp8oifqajr91cgo3nl4q
299601
299593
2026-08-15T11:18:17Z
99of9
1622
Added Z38426 to the approved list of implementations
299601
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38425"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z38425K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "list of neighbours"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z38425K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38425K5",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z38426"
],
"Z8K5": "Z38425"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence (monolingual)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
tj2yx1pcs7knx28upwfaqgemyg822y0
299603
299601
2026-08-15T11:21:33Z
99of9
1622
Added Z38427 to the approved list of test cases
299603
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38425"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z38425K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "list of neighbours"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z38425K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38425K5",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z38427"
],
"Z8K4": [
"Z14",
"Z38426"
],
"Z8K5": "Z38425"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence (monolingual)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
24c8nfvqzmbsc4lhdap7jv0f5tjzkli
299606
299603
2026-08-15T11:30:25Z
99of9
1622
Added Z38427 to the approved list of test cases
299606
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38425"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z38425K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "list of neighbours"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z38425K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38425K5",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z38427"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z38425"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence (monolingual)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
o7165j7i8j9fpb6akbbmyb1ke51mh73
299607
299606
2026-08-15T11:30:40Z
99of9
1622
Added Z38426 to the approved list of implementations
299607
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38425"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z38425K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "list of neighbours"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z38425K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38425K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38425K5",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z38427"
],
"Z8K4": [
"Z14",
"Z38426"
],
"Z8K5": "Z38425"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence (monolingual)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
24c8nfvqzmbsc4lhdap7jv0f5tjzkli
Z38426
0
88769
299594
294637
2026-08-15T11:01:09Z
99of9
1622
299594
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38426"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38425",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z34122",
"Z34122K1": {
"Z1K1": "Z7",
"Z7K1": "Z14310",
"Z14310K1": "Z38424",
"Z14310K2": {
"Z1K1": "Z18",
"Z18K1": "Z38425K5"
}
},
"Z34122K2": {
"Z1K1": "Z18",
"Z18K1": "Z38425K1"
},
"Z34122K3": {
"Z1K1": "Z18",
"Z18K1": "Z38425K2"
},
"Z34122K4": {
"Z1K1": "Z18",
"Z18K1": "Z38425K3"
},
"Z34122K5": {
"Z1K1": "Z18",
"Z18K1": "Z38425K4"
},
"Z34122K6": {
"Z1K1": "Z18",
"Z18K1": "Z38425K5"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
hecf2n7dh6olngp62d8bzirpqmw1c8e
Z38427
0
88770
299580
294639
2026-08-15T09:36:06Z
99of9
1622
plural
299580
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38427"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z38425",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z38425",
"Z38425K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q8679"
},
"Z38425K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z38425K3": {
"Z1K1": "Z6091",
"Z6091K1": "Q192613"
},
"Z38425K4": "Z1002"
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "Pisces shares borders with Triangulum, Andromeda, Pegasus, Aquarius, Cetus and Aries."
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Pisces constellation shares border, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
iiyjluelq59d3g951hzla0wds72pxjl
299602
299580
2026-08-15T11:20:56Z
99of9
1622
new signature
299602
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38427"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z38425",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z38425",
"Z38425K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q8679"
},
"Z38425K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q10565"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q9256"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q8864"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q10576"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q8839"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q10584"
}
],
"Z38425K3": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z38425K4": {
"Z1K1": "Z6091",
"Z6091K1": "Q192613"
},
"Z38425K5": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z14392",
"Z14392K2": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Pisces shares borders with Triangulum, Andromeda, Pegasus, Aquarius, Cetus and Aries."
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Pisces constellation shares border, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
44g2m5srfrgo28dd3psb1lifws4oymw
Wikifunctions:Wikimania 2026 survey
4
88878
299405
298848
2026-08-14T13:21:05Z
Arianit
1450
299405
wikitext
text/x-wiki
{{seealso|WF:Feature petitions}}
Thank you to so many of you who came in-person and online to the workshop at Wikimania last week around creating Abstract Wikipedia articles.
__NEWSECTIONLINK__
Based on your comments there and things you ran into or mentioned, we've pulled together a quick ideas list of possible improvements (alongside our work on faster and better NLG support, working with communities to consider piloting Abstract Wikipedia on their wiki, and other major parts of the annual plan).
Please indicate which items you think we should work on soonest by signing your name (<nowiki>~~~~</nowiki>) below them. We'll probably work on many of these, but the count of "votes" and arguments will help guide us in which ones we prioritise.
== Individual fragment editing ==
These are some ideas about how we might make adding and editing individual fragments easier.
=== Only auto-match the Wikidata item to the subject of the article on the first item in a Function call, not all of them ===
: This should avoid the confusing step of suggested items saying "Cairo is the Cairo of Cairo", but instead would need you to specify the item references for the others. The heuristic of only matching the first item might be enough as a starting point for many calls. We probably still want to match all dates and languages, though.
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 07:50, 31 July 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 00:56, 7 August 2026 (UTC)
* [[User:Jens Ohlig|Jens Ohlig]] ([[User talk:Jens Ohlig|talk]]) 19:37, 9 August 2026 (UTC)
* ''Sign here''
=== Split out some of the '…' menu on each item so you can quickly switch to a manual item reference ===
: A big stumbling block for folks was switching from an auto-matched (argument key) item or a function call to a specific item reference. This would allow you to quickly switch to that, without having to notice and go through the menu of all the other options.
* ''Sign here''
=== Re-word the labels for the abstract argument keys to be more clear about what they are ===
: We label the keys as 'wikidata item reference', 'language', and 'date'; we should make it clearer that these are 'this article's subject', 'view language', and 'view date' respectively. This would help avoid confusion about what these keys are for, and when you don't want to use them.
* [[User:Waldyrious|Waldyrious]] ([[User talk:Waldyrious|talk]]) 08:48, 1 August 2026 (UTC)
*:{{Done}} As a first step; how does that work for you? [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 15:45, 5 August 2026 (UTC)
=== Add short description fields to Functions' arguments, to help people can understand what the inputs mean when they use them ===
: For Functions, we have labels, aliases, and short descriptions, but Functions' inputs just have a single label each, which can make it hard for people to know what to put where, especially if they have unusual or unfamiliar words. Add a short description field, maybe shown via a secondary accessor like a "[[File:Codex icon info color-notice.svg|20x20px]]" rather than all the time.
* ''Better documentation of existing functions may also help. The existing one seem outdated or too complicated. We could have pages like "useful functions for towns". Descriptions should also help searching and finding the right function.'' [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 18:04, 11 August 2026 (UTC)
* [[User:Nux|Nux]] ([[User talk:Nux|talk]]) 11:38, 1 August 2026 (UTC) (i) icons with more info might help, like e.g. what the author means by "Hypernym" [https://abstract.wikipedia.org/w/index.php?title=Abstract_Wikipedia:Useful_functions_for_article_composition&oldid=13847].
*:@[[User:Nux|Nux]]: Can you give some more detail for where that kind of interface shows up for you? Do you mean giving more context for labels of functions' inputs? [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 15:46, 5 August 2026 (UTC)
*::@[[User:Jdforrester (WMF)|Jdforrester (WMF)]] Yes, argument description. Like a description for function [https://www.wikifunctions.org/w/index.php?title=Z37921&action=edit&uselang=en]. Like in JavaDoc. [[User:Nux|Nux]] ([[User talk:Nux|talk]]) 19:58, 5 August 2026 (UTC)
*:::Aha, right. Is it OK if I split this out into its own section? That's a very different change from what this section was written up as, based on what I heard in Paris, and should have its own discussion. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 20:06, 5 August 2026 (UTC)
*::::Sure. [[User:Nux|Nux]] ([[User talk:Nux|talk]]) 20:12, 5 August 2026 (UTC)
*:As function writers we can probably do a better job of using the full length of the label we are already allowed (e.g. to explain what hypernym means in that context). --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 03:15, 7 August 2026 (UTC)
* ''Sign here''
=== Example: Thing to fix (copy me!) ===
: What it would involve, and why it would be valuable.
* ''Sign here''
== New/better kinds of fragment ==
Here are some ideas for different kinds of fragments that you could use in abstract articles.
=== Add support for pulling structured data from Commons files ''e.g.'' captions ===
: Right now you can put in image files themselves, but you can't fetch any data about them. This is particularly unhelpful as the Wikidata items still use the File: name rather than the MID; we'd need to add the ability to fetch meta-data from Commons to the back-end services, like we do from Wikidata.
* {{neutral|Comment}} The suggestion of [[phab:T428224|accepting Commons filenames]] as well as MIDs would mean that media values and their qualifiers could be pulled from a Wikidata Item, but most of the metadata isn't there, it's on Commons. I'm not sure which parts from Commons would be useful, maybe the author/licence, maybe the structured data ('depicts' etc.). Does anyone know of a Scribunto module on a sister project which uses metadata from Commons? [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 20:45, 9 August 2026 (UTC)
* It would be simpler to have a function to generate the caption ? [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Add support for video/audio file inclusions ===
: You can only specify image files, not audio or video files which are more complex. If demand is high we could add this sooner rather than later, though it may be complex to align with the existing workflows.
* ''Sign here''
=== Add support for galleries of media file inclusions ===
: You can create multiple media file transclusions, but it's limited to a small number and you have to do all the work of creating the styles around it. We could give a first-level media file output, if this is strongly wanted.
* ''Sign here''
=== Add support for map inclusions ===
: We don't yet support maps, which might be wanted if folks are making articles about places a lot. Full support would be quite complicated.
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 03:24, 31 July 2026 (UTC)
=== Add support for chart inclusions ===
: We don't yet support charts, which might be wanted if folks are making articles about numerical things a lot. Full support would be very complicated.
* ''Sign here''
=== Abstract source mock-ups and multilingual reviews ===
:We are approaching Abstract Wikipedia from the bottom up, with very simple examples. This may be the "Wiki Way", but for software it is very unconventional, and I think it is uncertain whether it can eventually work for more advanced text. The project will have failed unless natural text similar in complexity to current Wikipedia articles can be generated. I think nobody (except possibly [[user:mahir256|Mahir Morshed]]) understands what the abstract source for more complicated sentences would look like.
:Mahir Morshed has created a multilingual text generation system called Ninai/Udiron at [[toolforge:elemthala]] (see his introduction at https://www.wikifunctions.org/wiki/Wikifunctions:Status_updates/2024-10-17 and his session at Wikimania). This is linked to Abstract Wikipedia, and extremely relevant to it (since it is the only real current proposal for the abstract souce that I know), but it should be noted that Ninai is only a proposal, not Abstract Wikipedia policy. The list of constructors defines the abstract source as it is at present. Also more information on how this abstract content can be constructed can be found at https://www.wikidata.org/wiki/User:Mahir256/language-generation, with various links and references.
:It is not clear to me whether the abstract source, consisting of functions of Wikidata items backed up by lexemes, can even work at all for a wide variety of languages. Rendering a text needs much information which is special to the target language, for instance there can be genders, grammatical cases, polite forms of address, etc. Example: The Eiffel Tower (Q243) usually needs a definite article when used in English, whereas Blackpool Tower (Q880905) does not. Where should this information for the English renderer be held? It cannot be in the abstract source, since the answer is special for English; some editors of the abstract source will speak languages which do not use articles. Well, I think that this type of item needs an English lexeme with a flag to indicate the article usage, and that would be a solution. Another example relates to the grammatical tenses, voices and moods of verbs. How will that be managed? I suppose that a verb tense indication must be given as a parameter in the abstract source, but how will the values of this parameter be related to all the possible tense/voice/mood verb forms in all the languages? There are an enormous number of such diverse features; how can we be sure that there is enough information in the abstract source to do the rendering in all cases?
:I think that there is an urgent need to create examples of complex text (such as real Wikipedia articles) in the proposed abstract source. Then testers who comprehend the abstract source format and also know a relevant language should interpret the source text and confirm whether they understand it and whether they have enough information to reconstruct the text in their own language (not by software but with their own mental processes). If so, that would give much-needed confidence that the Abstract Wikipedia scheme can actually work, and I think it would advance the project by making clearer the next needed steps.
* [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 20:41, 5 August 2026 (UTC)
* I do not know if this is a priority but would clearly be interesting to test. I am curious to know if abstract Wikipedia can express something more subtle or complex than a wikidata statements. But it is a strategic question: is the goal to put wikidata statements into sentences (with relatively poor language) to build automatic placeholders articles and call for additional human contribution, or is the goal to generate a full "Wikipedia article" with a rich language ? [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== More showcase/example items ===
: More articles to give an idea of what's possible or good practice. The impressive [[abstract:Q408|Australia]] article is great, but I'm thinking about something-like the query for cats in the Wikidata query service. Ideally with an option to copy everything as the foundation for a new article on a similar topic.
* [[User:Jens Ohlig|Jens Ohlig]] ([[User talk:Jens Ohlig|talk]]) 19:37, 9 August 2026 (UTC)
* [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Example: Thing to fix (copy me!) ===
: What it would involve, and why it would be valuable.
* ''Sign here''
== Article editing ==
Here are some quick ideas about overall article editing, not specific to a given
=== Drag-and-drop moving of fragments, instead of having to click on the menu and the "move up/down" multiple times ===
: Drag-and-drop is a relatively familiar UX feature, and we could add an affordance for it to make it more discoverable at the same time as more usable.
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 03:22, 31 July 2026 (UTC)
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 07:52, 31 July 2026 (UTC)
* [[User:Waldyrious|Waldyrious]] ([[User talk:Waldyrious|talk]]) 08:49, 1 August 2026 (UTC)
* [[User:Nux|Nux]] ([[User talk:Nux|talk]]) 11:42, 1 August 2026 (UTC) and also selecting and copying with ctrl+c/ctrl+v like in OOo/LibreOffice Calc
* [[User:Dungodung|Dungodung]] ([[User talk:Dungodung|talk]]) 15:30, 5 August 2026 (UTC)
* [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Fix the long article dual-column scroll problem where you can't see what you're editing ===
: This is particularly an issue on longer articles and smaller screens, but was mentioned as very irritating by some of you!
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 07:49, 31 July 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:03, 7 August 2026 (UTC)
* ''Sign here''
=== Support multiple sections, rather than just the lede ===
: Right now (despite some functions outputting <nowiki><h2></nowiki>s and the like), all articles are limited to just editing the lede section. We have mostly-built support for thematic sections, but this needs some polish. This would let you 'chunk up' articles, potentially editing only a section at a time for ease of use and / or collapsing those sections away to focus. We could also use this to allow external links limited to only the "external links" section (and references).
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 07:12, 3 August 2026 (UTC)
* Will be useful once users manage to write more than one section. [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
=== Prompt editors with function calls based on statements in the Wikidata item ===
: Add a feature that checks the subject's Wikidata item for statements of the kind it knows about (e.g. "born 1850-01-20 in France") and match them to fragments, prompting you to add this. We'd need to work out how to link between fragment functions and Wikidata claims, and how to know whether the claims were already in the article, so this is quite complex to design and build, but would probably help a great deal.
* {{neutral|Comment}} e.g. {{P|569}}:{{P|1535}}={{Q|138748413}} w/ qual. {{P|528}}=[[Z37683]] [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 00:57, 7 August 2026 (UTC)
* It would be nice for statements already present in Wikidata to be converted to form the sentences in the Abstract Wikipedia, instead of adding statements already present in Wikidata again in the A.W., as in [https://abstract.wikipedia.org/view/kcg/Q7251 Alan Turing]. [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:02, 7 August 2026 (UTC)
* More simply, i think it would be nice to have functions suggested depending on the kind of item (suggested functions for towns, for people...). We could also have templates that include multiple functions (e.g. introductory paragraph for town) that fetch the relevant statements (the user can then check them). (If it exists already it's hard to find). [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Prompt editors with media used on Wikipedia articles for the subject ===
: A more specialised option compared to fetching media suggestions alongside everything else from the Wikidata item would be to check for the main/first image on any existing Wikipedia articles and suggesting that if it's not already set.
*
* ''Sign here''
=== Fill in the parameters at copy/paste ===
: Fill in the parameters at copy/paste if the number and types of parameters match. That is especialy usefull when copying a new function from one language to an other. Currenltly every parameter has to be filled manually.
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 22:25, 5 August 2026 (UTC) (as proposer) I just created {{Z|Z38911}} and it took me very long to fill all 30! parameters correctly~
*:My apologies for making it so complicated! [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 23:04, 11 August 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:21, 7 August 2026 (UTC)
* —[[User:UndueMarmot|<span style="color:#705ccb;">Undue</span><span style="color:#cfdfa3;background-color:#705ccb;">Marmot</span>]] <small>([[User talk:UndueMarmot|talk]])</small> 13:11, 11 August 2026 (UTC)
* [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 18:06, 11 August 2026 (UTC)
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 23:04, 11 August 2026 (UTC)
* ''Sign here''
=== Example: Thing to fix (copy me!) ===
: What it would involve, and why it would be valuable.
* This could be a useful shortcut if the Wikidata statements don't get called automatically. [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:20, 7 August 2026 (UTC)
* ''Sign here''
== Any other ideas you might have ==
The sections above aren't everything. What else is something you'd like fixed?
=== Make it more obvious in the search whether there's an existing abstract article or not ===
: Right now we just add "– AW" to the end of search results when there's an existing article; if we make it clearer whether the link is a "read this" or "create this" link, folks won't be surprised when they click it.
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 15:58, 1 August 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:15, 7 August 2026 (UTC)
* For me it seemed it was necessary to search the QID to find and article, this could be clearer. Or the search by label should be supported.[[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Auto-linking new Abstract Wikipedia articles to their Wikidata counterparts ===
: Right now people need to manually say that ''e.g.'' Q90 is the same as Q90, which takes time and isn't obvious. If we did this automatically as articles were created, the workflow would be easier to understand.
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 15:56, 1 August 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:14, 7 August 2026 (UTC)
* —[[User:UndueMarmot|<span style="color:#705ccb;">Undue</span><span style="color:#cfdfa3;background-color:#705ccb;">Marmot</span>]] <small>([[User talk:UndueMarmot|talk]])</small> 13:09, 11 August 2026 (UTC)
* [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Show labels of talk pages ===
: Show labels of Zid's talk pages on recent changes, watchlist and also on Categories like [[:Category:English natural language generation functions|this one]]. Idem for Qid's talk pages on Abstract Wikipedia
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 17:22, 1 August 2026 (UTC) (as proposer)
* ''Sign here''
=== Enlarge the field for labels ===
{{seealso|WF:Request for cleanup#Long names and descriptions}}
: Currently the field for labels can hold a maximum of 50 characters. See for example {{Z|Z32398}}. Frequently this is not enough and abbreviation have to be made. That makes the function names confusing and not consistent.
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 17:37, 1 August 2026 (UTC) (as proposer)
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 20:59, 3 August 2026 (UTC)
* [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 16:09, 5 August 2026 (UTC)
* ''Sign here''
=== Support wikitext in functions output ===
: Wikifunctions don't support wikitext. They can only output unparseable plain text or HTML. I know that the page [[:f:Wikifunctions:Embedded function calls]] says very clearly that wikitext will never be supported. But this is the number one thing that causes me not to be motivated to use functions, and I suspect that I'm not alone. So perhaps you could reconsider it.
* [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 16:01, 5 August 2026 (UTC)
** {{ping|Amire80|p=,}} {{ping|HenkvD}} What would you do with the produced Wikitext? Copy it into an existing page on one of the sister projects? [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 01:01, 7 August 2026 (UTC)
**:The same things that everyone does with templates and modules. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 02:50, 7 August 2026 (UTC)
**::We should write functions as Wikitext like <nowiki>'''[[Q1]]'''</nowiki> and table and templates and modules etcetera. that should be rendered into HTML or so, the same as string to HTML functions. [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 05:45, 7 August 2026 (UTC)
*:@[[User:Amire80|Amire80]]: As you may recall from the repeated times this has been discussed, this isn't in our gift to offer, regardless of how much you ask for it, sorry. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 15:34, 7 August 2026 (UTC)
*::Look, it's not just me; more than a year has passed since enabling the embedding of Wikifunctions into Wikipedia and Wiktionary articles, and practically no one uses it. I'm just trying to explain the likely reason.
*::If you are going to respond that this survey is not about embedding Wikifunctions into other wikis, but about Abstract Wikipedia, it doesn't change much: this makes Abstract Wikipedia so different from other Wikipedias that contributing to it is unreasonably hard for almost everyone.
*::It's your call if you want to fix it. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 11:24, 8 August 2026 (UTC)
*:::@[[User:Amire80|Amire80]]:
*:::<blockquote>It's your call if you want to fix it.</blockquote>
*:::No. It is not, and never has been, in the Abstract Wikipedia team's power to "give" this feature to you. You and I have directly discussed this before, repeatedly. Wikifunctions producing wikitext that would be woven into existing pages was precisely and directly vetoed for us in 2020.
*:::You stating that it's actually possible, or starting votes about this, or complaining at me, Denny, or whomever in the team hasn't changed this fact. At some point even I will run out of good faith assumptions, when you repeatedly make statements that have been refuted. If you think the lack of wikitext is the red line over which you won't work with the project, that's understandable if sad, but I don't understand your comments. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 19:10, 11 August 2026 (UTC)
*::::Thank you for the clarification, James. I think the “woven into existing pages” qualification deserves closer scrutiny. It seems plausible (to me) that an entire Abstract Wikipedia article could be delivered as HTML, wikitext, rich text, plain text or any other format, so long as it is not actually delivered into the unparsed wikitext of a page. Is that a misinterpretation of the “veto” (which I haven’t actually seen)?
*::::The focus today is on whole articles, but that has never been my priority. As far as functions are concerned, wikitext is just plain text, so I don’t see any issues with individual functions returning wikitext, apart from the “why doesn’t it parse” confusion. Should we consider a new type for “unparsable” wikitext that, unlike strings, would require a display function before functions returning that type could be embedded? [[User:GrounderUK|GrounderUK]] ([[User talk:GrounderUK|talk]]) 20:21, 11 August 2026 (UTC)
*:::::@[[User:GrounderUK|GrounderUK]]: I don't understand your suggestion. Any Function can today return a Z6/String with wikitext-like characters in it, but the veto is that results will never be parsed as such into pages. Your proposed new non-parsed wikitext Type would need a display Function, as you say. Writing a display Function to turn wikitext into HTML would be extremely challenging to write, and an unbelievable expense of time. Parsoid, which this would mimic without being able to be called or share anything, is after ~15 years of work and millions of dollars of staff time now ~100k lines of pretty densely-written PHP (plus more than that again of test cases). Even if this were built, it would still never work for the things people are actually asking for when they say "wikitext" — templates, references, categories, ''etc.'' — as they are page-level integration concerns. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 18:27, 12 August 2026 (UTC)
*::::Although you have discussed it with Amir, I would also appreciate an explainer somewhere of who, where, why, and exactly what was vetoed. Without that it's impossible for me to know what is "actually possible". I was not around for discussions in 2020 - if it's public, I'd be interested in a link. [[Z10919|My first function]] on WF was to make Wikitext, as I assumed that was how we would eventually deliver Wikipedia content. [[Wikifunctions:Embedded function calls]] does give me some understanding of why this direction was chosen, and I'm broadly okay with contributing under whatever restrictions are current. But this whole page is about improvement. So let's allow space for Amir to raise this, especially if it sheds light for others of us, and possibly leads to improvement. Possibly even without further development from the AW dev team. Along with @[[User:GrounderUK|GrounderUK]]'s suggestions above, I think we have under-explored making functions that output string-wikitext. For example, the grammatical tables for Wiktionary could be written like this. Rather than "embedding" (~transclude), we could copy-paste (~subst) into pages (on any Wiki, not just Parsoid etc). This would have the advantage that it could be further edited by the receiving community. It would have the disadvantage that it would not be live-updated, so it might work better for grammar tables than for live population lists. But even live updating data ''could'' be incorporated by putting smaller #function calls inside the tables (depending whether you plan to implement the 5-10 call hard cap you mentioned at [https://phabricator.wikimedia.org/T431175 T431175]). I don't know if any of this would improve the uptake of WF content being used directly in non-AW wikis. It might. For now it's not my focus, but I think some of these options are in the WF contributors hands, and may only require little support from the AW team. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 02:03, 12 August 2026 (UTC)
*:::::@[[User:99of9|99of9]]: The veto was made in the very early system design conversations in 2020 by SRE and Security, and what we would now call the MediaWiki group.
*:::::My concern is that this page was meant to be about actionable ideas, and diverting a huge amount of effort into this conversation when Amir was part of those conversations then is disrespectful of your time. I'd of course be happy to discuss, at length, but it feels like this is a detailed enough area that it should be its own page/set of conversations that can be discussed, agreed/concluded, and summarised at length? [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 18:31, 12 August 2026 (UTC)
*::::::I think that’s fair. The problem in this specific context is that “Support wikitext in functions output” can have multiple interpretations. I’m happy to expand on my previous comments here or elsewhere, but I did attempt to keep them as brief as possible.
*::::::Just to clarify one point: a new wikitext type would need '''not''' to have a display function, so that wikitext functions would be unavailable as embedded functions, unlike a current string function whose string is intended to be wikitext. Or it might be formatted as a copyable text block… whatever the community concludes, and subject to the current “staff” discretion, when it comes to connecting an eventual display function. [[User:GrounderUK|GrounderUK]] ([[User talk:GrounderUK|talk]]) 19:09, 12 August 2026 (UTC)
*::::::@[[User:Jdforrester (WMF)|Jdforrester (WMF)]],
*::::::It is possible that my memory of the last six years is horribly broken, which is not totally inconceivable because I am diagnosed with a few neuropsychological conditions, at least some of which are lifelong. However, if it's not horribly broken then:
*::::::* I didn't know about the 2020 SRE "veto" until you mentioned it on this page on August 11.
*::::::* {{tq|Amir was part of those conversations then}} - I was not part of those conversations. Like, ''at all''. If I was, then my memory of them has been damaged somehow. For that matter, I don't recall being part of any conversations about Wikifunctions in 2020, except a very informal 1:1 chat with Denny very early in the project, and my public and mostly supportive responses on Meta.
*::::::* I first learned about the fact that Wikifunctions output will not be parsed as wikitext in the middle of 2024. If I knew about it in 2020, I wouldn't express any support for this project back then, as I did on the page [[:m:Abstract Wikipedia/Archive 1]], and I'd probably say that it shouldn't be done at all because no support for parsed wikitext means that not a lot of people will want to use it.
*::::::* {{tq|You and I have directly discussed this before, repeatedly}} - the only two times I can recall in which I spoke to you directly about this in any way are both public: [https://www.youtube.com/watch?v=XOeZ8sHimN0&t=4439s here] and [https://www.wikifunctions.org/wiki/Wikifunctions_talk:Embedded_function_calls#c-Amire80-20250424102200-Wikitext_output_section here]. In neither of those cases I learned from you about the "veto", or about ''why'' is wikitext parsing prohibited, or what is this prohibition good for, etc. (I am still really curious about the answers to these questions.)
*::::::* {{tq|You stating that it's actually possible}} - I'm pretty sure that I never said that adding wikitext parsing support to Wikifunctions is "actually possible". I don't know enough about parsing to claim if it's possible or not. If you think that I did claim this anywhere, please show me where, and I'll try to understand why did I say it then. What I did speak about is that it is ''desirable''.
*::::::* I cannot recall {{tq|repeatedly making statements that have been refuted}}. If you have examples of this, please give them before throwing accusations of bad faith around. If you don't have them, then please do not do this, it is very rude.
*::::::The only thing that I should clarify is that when I said "It's your call if you want to fix it", I didn't necessarily mean you personally. I meant anyone who wants Wikifunctions to have some users and has the power to do it. You say: {{tq|If you think the lack of wikitext is the red line over which you won't work with the project, that's understandable if sad}} - well, I think that it's not just my red line, but that it's almost everyone's red line. Again: It is a cold hard fact that sixteen months after the deployment of that feature, practically no one embeds Wikifunctions into wiki articles. The likely root cause of this is the lack of support for wikitext parsing, although I'd love to hear other theories.
*::::::If you cannot do it, then don't do it, but it likely means that the number of people who actually use Wikifunctions will remain negligible for the foreseeable future, and probably forever. I'll be happy to be proven wrong about this someday. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 00:08, 13 August 2026 (UTC)
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 22:11, 5 August 2026 (UTC) Without wikitext the Abstract Wikipedia is not a real Wikipedia. Using wikitext code for bold, italic etc. Maybe also for Wikilinks.
*:It should be for everything, not just bold, italic, and links. Wikitext is much more than that: magic words, article structure, etc. I'm not saying that it's good; there are lots of problems with wikitext, but it doesn't matter, because wikitext is the way in which practically all the content in all the wikis is stored, so you are right when you say that without wikitext the Abstract Wikipedia is not a real Wikipedia. Theoretically, the format shouldn't matter, because sharing knowledge shouldn't depend on the markup language, but practically, it matters a lot. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 15:05, 7 August 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 17:05, 7 August 2026 (UTC)
* —[[User:UndueMarmot|<span style="color:#705ccb;">Undue</span><span style="color:#cfdfa3;background-color:#705ccb;">Marmot</span>]] <small>([[User talk:UndueMarmot|talk]])</small> 13:10, 11 August 2026 (UTC)
* ''Sign here''
=== Completely change the UI of compositions ===
: I don't get compositions. A few people get them, but a lot of people don't. I mostly don't. When I try to read existing compositions, their deeply-nested hierarchy immediately confuses me, and I'm almost always afraid of editing anything. And I barely know how to start a new composition. The "clipboard" feature, which was added a few months ago, makes it a little bit less frustrating. But only a little bit; it doesn't solve the big issue. Creating and editing compositions is the only way to edit abstract articles, and it's very commonly needed on Wikifunctions, too, so if a lot of people have a hard time understanding how to do it, neither project will acquire a lot of editors. If you ask me, I'd do away with them completely and just use Python or JavaScript (or Lua!) code.
* [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 16:01, 5 August 2026 (UTC)
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 22:18, 5 August 2026 (UTC) I don't propose to get rid of compositions, but make the default output more readable by automatically start a new function on a new line, and indent automatically. Also in read mode.
* Same. It's frustrating to have to click my mouse 10 times through a bunch of functions just to change an input value [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 03:38, 6 August 2026 (UTC)
* From my no-code perspective, the ideal interface for me would be would be to see the generated text, then in the edit mode click on a sentence and see in the function, or set the cursor somewhere and be able to add a function there. (Maybe off topic, I do not know what a composition is). [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 18:04, 11 August 2026 (UTC)
* [[User:Arianit|Arianit]] ([[User talk:Arianit|talk]]) 13:21, 14 August 2026 (UTC)
* ''Sign here''
=== Allow choice of implementation to be forced ===
: Where a function has multiple implementations, it would be helpful to be able to force the orchestrator to select a particular implementation for a particular run (or a particular session or a particular user). This would often be very helpful for debugging, or when an implementation appears to have a bug. I am not too sure how that could work - I propose that each user should be able to mark any implementation as always to be selected in their case (or perhaps as never to be selected). Perhaps only in the current session.
:It would even be useful to have a mode in a given session where the orchestrator always selects the first (or last) implementation for all functions - then one would at least know which implementation was going to be called!
* [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 16:35, 5 August 2026 (UTC)
*:@[[User:Strobilomyces|Strobilomyces]]: The orchestrator will (currently) only ever chose the first connected implementation (for a language we support). Maybe we could make it clearer? For debugging, the idea is that you can do that from the implementation page whether or not it's connected, such as on [[Z15788]]. We could highlight that, perhaps? Can you give an example outside of debugging where you might want to allow multiple implementations to be connected but choose different implementations at run-time? I cannot suggest what we could do without understanding better the need, sorry! [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 17:30, 5 August 2026 (UTC)
*::Clarification: "First connected implementation" means the first one listed in the JSON version of the function (which is sometimes promoted or demoted by Wikilambda bot), rather than the first one displayed in the UI list, or the first one that was ever connected. Highlighting this implementation in the UI would be nice. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 04:15, 6 August 2026 (UTC)
*:::Yup, good point; we could definitely improve the UX here to indicate which is the "winning" implementation. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 14:34, 6 August 2026 (UTC)
*::@[[User:Jdforrester (WMF)|Jdforrester (WMF)]] The ability to test a given implementation directly is very useful. But functions often call other functions and it makes debugging difficult if it is not possible to tell which implementation will be executed or has been executed at the lower level. If it currently always the same version, then that is good. I would like to know how to tell which version will be or has been executed. How do I see the JSON version of the subfunction? Do I have to use the API? [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 13:27, 6 August 2026 (UTC)
*:::I find it by looking at the history and comparing diffs. Here's a diff showing that Wikilambda bot promoted the JS implementation to the top: https://www.wikifunctions.org/w/index.php?title=Z13521&diff=289160&oldid=232341 . --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 13:46, 6 August 2026 (UTC)
*:::@[[User:Strobilomyces|Strobilomyces]]: Yeah, you're right that one issue that comes up some times is our collapsing the meta-data responses from sub-calls into the top-level one, and so details like what Implementation was used are missed. More pressingly, it can be hard to see what sub-call caused an error (''e.g.'' "no Lexeme found"). [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 15:33, 7 August 2026 (UTC)
*::A particular case where the preferred implementation should not be used is when testing a recursive implementation. [[User:GrounderUK|GrounderUK]] ([[User talk:GrounderUK|talk]]) 18:04, 6 August 2026 (UTC)
*:You can run {{Z|Z35874}} to get the identifier of the currently preferred implementation for a specified function. You could also have [https://www.wikifunctions.org/view/en/Z37465?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37465%22%2C%22Z37465K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z35874%22%2C%22Z35874K1%22%3A%22Z10000%22%7D%2C%22Z37465K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z35874%22%2C%22Z35874K1%22%3A%22Z10000%22%7D%7D a hyperlink to the implementation].
*:When browsing, if you click on any of a function’s test cases, the implementations that are connected to the function are listed in the correct order in the Implementations box. This is also true when adding a new test case to a function.
*:Or we could [https://www.wikifunctions.org/view/en/Z801?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z801%22%2C%22Z801K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z33470%22%2C%22Z33470K1%22%3A%22view+function%E2%80%99s+JSON%22%2C%22Z33470K2%22%3A%22a%22%2C%22Z33470K3%22%3A%7B%22Z1K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z883%22%2C%22Z883K1%22%3A%22Z6%22%2C%22Z883K2%22%3A%22Z1%22%7D%2C%22K1%22%3A%5B%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z882%22%2C%22Z882K1%22%3A%22Z6%22%2C%22Z882K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z881%22%2C%22Z881K1%22%3A%22Z6%22%7D%7D%2C%7B%22Z1K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z882%22%2C%22Z882K1%22%3A%22Z6%22%2C%22Z882K2%22%3A%22Z1%22%7D%2C%22K1%22%3A%22href%22%2C%22K2%22%3A%5B%22Z6%22%2C%22https%3A%2F%2Fwww.wikifunctions.org%2Fwiki%2F%22%2C%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z28231%22%2C%22Z28231K1%22%3A%22Z801%22%7D%2C%22%3Faction%3Draw%22%5D%7D%5D%7D%7D%7D turn this into a function], I suppose, or [https://www.wikifunctions.org/view/en/Z801?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z801%22%2C%22Z801K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z811%22%2C%22Z811K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z803%22%2C%22Z803K1%22%3A%7B%22Z1K1%22%3A%22Z39%22%2C%22Z39K1%22%3A%22K1%22%7D%2C%22Z803K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z804%22%2C%22Z804K1%22%3A%5B%22Z39%22%2C%7B%22Z1K1%22%3A%22Z39%22%2C%22Z39K1%22%3A%22Z8K4%22%7D%5D%2C%22Z804K2%22%3A%22Z10000%22%7D%7D%7D%7D just this]. [[User:GrounderUK|GrounderUK]] ([[User talk:GrounderUK|talk]]) 17:51, 6 August 2026 (UTC)
*::Ah, OK. I thought that the implementation to be used was selected each time that a function was executed; if it is only selected occasionally for all executions, that is better. It would indeed be good to have a flagged indication of the "winning" first implementation, especially if it is not always the first listed on the function. So at present, if you make an alternative implementation or have a non-winning one, you can only test it independently; you cannot test it being called by another function. [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 16:28, 7 August 2026 (UTC)
*:::correct. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 22:13, 7 August 2026 (UTC)
* ''Sign here''
=== Allow Wikifunctions functions to be called from Python and Javascript ===
: As indicated in an earlier suggestion, it is not convenient to write complicated code in the form of compositions. I think far more code would be contributed if it could be done in Python or Javascript.
* [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 16:44, 5 August 2026 (UTC)
* This is extremely important to me. It's much easier and more readable for someone to write a couple lines of code rather than calling 10 functions. [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 06:49, 7 August 2026 (UTC)
* ''Sign here''
=== Allow clearing cache in WF/AW ===
: Add a way to clear the cache for a function given a certain input(s). For example, if a function takes a QID and a language, I might want to clear the cache for all outputs that take French in and all outputs that take Q90 in.
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 00:48, 13 August 2026 (UTC)
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 09:34, 13 August 2026 (UTC) I sometime use direct URL links where I have to fill in the correct Qid or Zid.
* ''Sign here''
=== Example: Thing to fix (copy me!) ===
: What it would involve, and why it would be valuable.
* ''Sign here''
== Thank you! ==
It was great to speak to and hear from so many of you.
b6ptbfzpt9dov0dord1ywptjoa2ltl2
299528
299405
2026-08-15T05:46:43Z
EatingCarBatteries
61191
/* Allow clearing cache in WF/AW */
299528
wikitext
text/x-wiki
{{seealso|WF:Feature petitions}}
Thank you to so many of you who came in-person and online to the workshop at Wikimania last week around creating Abstract Wikipedia articles.
__NEWSECTIONLINK__
Based on your comments there and things you ran into or mentioned, we've pulled together a quick ideas list of possible improvements (alongside our work on faster and better NLG support, working with communities to consider piloting Abstract Wikipedia on their wiki, and other major parts of the annual plan).
Please indicate which items you think we should work on soonest by signing your name (<nowiki>~~~~</nowiki>) below them. We'll probably work on many of these, but the count of "votes" and arguments will help guide us in which ones we prioritise.
== Individual fragment editing ==
These are some ideas about how we might make adding and editing individual fragments easier.
=== Only auto-match the Wikidata item to the subject of the article on the first item in a Function call, not all of them ===
: This should avoid the confusing step of suggested items saying "Cairo is the Cairo of Cairo", but instead would need you to specify the item references for the others. The heuristic of only matching the first item might be enough as a starting point for many calls. We probably still want to match all dates and languages, though.
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 07:50, 31 July 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 00:56, 7 August 2026 (UTC)
* [[User:Jens Ohlig|Jens Ohlig]] ([[User talk:Jens Ohlig|talk]]) 19:37, 9 August 2026 (UTC)
* ''Sign here''
=== Split out some of the '…' menu on each item so you can quickly switch to a manual item reference ===
: A big stumbling block for folks was switching from an auto-matched (argument key) item or a function call to a specific item reference. This would allow you to quickly switch to that, without having to notice and go through the menu of all the other options.
* ''Sign here''
=== Re-word the labels for the abstract argument keys to be more clear about what they are ===
: We label the keys as 'wikidata item reference', 'language', and 'date'; we should make it clearer that these are 'this article's subject', 'view language', and 'view date' respectively. This would help avoid confusion about what these keys are for, and when you don't want to use them.
* [[User:Waldyrious|Waldyrious]] ([[User talk:Waldyrious|talk]]) 08:48, 1 August 2026 (UTC)
*:{{Done}} As a first step; how does that work for you? [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 15:45, 5 August 2026 (UTC)
=== Add short description fields to Functions' arguments, to help people can understand what the inputs mean when they use them ===
: For Functions, we have labels, aliases, and short descriptions, but Functions' inputs just have a single label each, which can make it hard for people to know what to put where, especially if they have unusual or unfamiliar words. Add a short description field, maybe shown via a secondary accessor like a "[[File:Codex icon info color-notice.svg|20x20px]]" rather than all the time.
* ''Better documentation of existing functions may also help. The existing one seem outdated or too complicated. We could have pages like "useful functions for towns". Descriptions should also help searching and finding the right function.'' [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 18:04, 11 August 2026 (UTC)
* [[User:Nux|Nux]] ([[User talk:Nux|talk]]) 11:38, 1 August 2026 (UTC) (i) icons with more info might help, like e.g. what the author means by "Hypernym" [https://abstract.wikipedia.org/w/index.php?title=Abstract_Wikipedia:Useful_functions_for_article_composition&oldid=13847].
*:@[[User:Nux|Nux]]: Can you give some more detail for where that kind of interface shows up for you? Do you mean giving more context for labels of functions' inputs? [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 15:46, 5 August 2026 (UTC)
*::@[[User:Jdforrester (WMF)|Jdforrester (WMF)]] Yes, argument description. Like a description for function [https://www.wikifunctions.org/w/index.php?title=Z37921&action=edit&uselang=en]. Like in JavaDoc. [[User:Nux|Nux]] ([[User talk:Nux|talk]]) 19:58, 5 August 2026 (UTC)
*:::Aha, right. Is it OK if I split this out into its own section? That's a very different change from what this section was written up as, based on what I heard in Paris, and should have its own discussion. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 20:06, 5 August 2026 (UTC)
*::::Sure. [[User:Nux|Nux]] ([[User talk:Nux|talk]]) 20:12, 5 August 2026 (UTC)
*:As function writers we can probably do a better job of using the full length of the label we are already allowed (e.g. to explain what hypernym means in that context). --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 03:15, 7 August 2026 (UTC)
* ''Sign here''
=== Example: Thing to fix (copy me!) ===
: What it would involve, and why it would be valuable.
* ''Sign here''
== New/better kinds of fragment ==
Here are some ideas for different kinds of fragments that you could use in abstract articles.
=== Add support for pulling structured data from Commons files ''e.g.'' captions ===
: Right now you can put in image files themselves, but you can't fetch any data about them. This is particularly unhelpful as the Wikidata items still use the File: name rather than the MID; we'd need to add the ability to fetch meta-data from Commons to the back-end services, like we do from Wikidata.
* {{neutral|Comment}} The suggestion of [[phab:T428224|accepting Commons filenames]] as well as MIDs would mean that media values and their qualifiers could be pulled from a Wikidata Item, but most of the metadata isn't there, it's on Commons. I'm not sure which parts from Commons would be useful, maybe the author/licence, maybe the structured data ('depicts' etc.). Does anyone know of a Scribunto module on a sister project which uses metadata from Commons? [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 20:45, 9 August 2026 (UTC)
* It would be simpler to have a function to generate the caption ? [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Add support for video/audio file inclusions ===
: You can only specify image files, not audio or video files which are more complex. If demand is high we could add this sooner rather than later, though it may be complex to align with the existing workflows.
* ''Sign here''
=== Add support for galleries of media file inclusions ===
: You can create multiple media file transclusions, but it's limited to a small number and you have to do all the work of creating the styles around it. We could give a first-level media file output, if this is strongly wanted.
* ''Sign here''
=== Add support for map inclusions ===
: We don't yet support maps, which might be wanted if folks are making articles about places a lot. Full support would be quite complicated.
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 03:24, 31 July 2026 (UTC)
=== Add support for chart inclusions ===
: We don't yet support charts, which might be wanted if folks are making articles about numerical things a lot. Full support would be very complicated.
* ''Sign here''
=== Abstract source mock-ups and multilingual reviews ===
:We are approaching Abstract Wikipedia from the bottom up, with very simple examples. This may be the "Wiki Way", but for software it is very unconventional, and I think it is uncertain whether it can eventually work for more advanced text. The project will have failed unless natural text similar in complexity to current Wikipedia articles can be generated. I think nobody (except possibly [[user:mahir256|Mahir Morshed]]) understands what the abstract source for more complicated sentences would look like.
:Mahir Morshed has created a multilingual text generation system called Ninai/Udiron at [[toolforge:elemthala]] (see his introduction at https://www.wikifunctions.org/wiki/Wikifunctions:Status_updates/2024-10-17 and his session at Wikimania). This is linked to Abstract Wikipedia, and extremely relevant to it (since it is the only real current proposal for the abstract souce that I know), but it should be noted that Ninai is only a proposal, not Abstract Wikipedia policy. The list of constructors defines the abstract source as it is at present. Also more information on how this abstract content can be constructed can be found at https://www.wikidata.org/wiki/User:Mahir256/language-generation, with various links and references.
:It is not clear to me whether the abstract source, consisting of functions of Wikidata items backed up by lexemes, can even work at all for a wide variety of languages. Rendering a text needs much information which is special to the target language, for instance there can be genders, grammatical cases, polite forms of address, etc. Example: The Eiffel Tower (Q243) usually needs a definite article when used in English, whereas Blackpool Tower (Q880905) does not. Where should this information for the English renderer be held? It cannot be in the abstract source, since the answer is special for English; some editors of the abstract source will speak languages which do not use articles. Well, I think that this type of item needs an English lexeme with a flag to indicate the article usage, and that would be a solution. Another example relates to the grammatical tenses, voices and moods of verbs. How will that be managed? I suppose that a verb tense indication must be given as a parameter in the abstract source, but how will the values of this parameter be related to all the possible tense/voice/mood verb forms in all the languages? There are an enormous number of such diverse features; how can we be sure that there is enough information in the abstract source to do the rendering in all cases?
:I think that there is an urgent need to create examples of complex text (such as real Wikipedia articles) in the proposed abstract source. Then testers who comprehend the abstract source format and also know a relevant language should interpret the source text and confirm whether they understand it and whether they have enough information to reconstruct the text in their own language (not by software but with their own mental processes). If so, that would give much-needed confidence that the Abstract Wikipedia scheme can actually work, and I think it would advance the project by making clearer the next needed steps.
* [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 20:41, 5 August 2026 (UTC)
* I do not know if this is a priority but would clearly be interesting to test. I am curious to know if abstract Wikipedia can express something more subtle or complex than a wikidata statements. But it is a strategic question: is the goal to put wikidata statements into sentences (with relatively poor language) to build automatic placeholders articles and call for additional human contribution, or is the goal to generate a full "Wikipedia article" with a rich language ? [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== More showcase/example items ===
: More articles to give an idea of what's possible or good practice. The impressive [[abstract:Q408|Australia]] article is great, but I'm thinking about something-like the query for cats in the Wikidata query service. Ideally with an option to copy everything as the foundation for a new article on a similar topic.
* [[User:Jens Ohlig|Jens Ohlig]] ([[User talk:Jens Ohlig|talk]]) 19:37, 9 August 2026 (UTC)
* [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Example: Thing to fix (copy me!) ===
: What it would involve, and why it would be valuable.
* ''Sign here''
== Article editing ==
Here are some quick ideas about overall article editing, not specific to a given
=== Drag-and-drop moving of fragments, instead of having to click on the menu and the "move up/down" multiple times ===
: Drag-and-drop is a relatively familiar UX feature, and we could add an affordance for it to make it more discoverable at the same time as more usable.
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 03:22, 31 July 2026 (UTC)
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 07:52, 31 July 2026 (UTC)
* [[User:Waldyrious|Waldyrious]] ([[User talk:Waldyrious|talk]]) 08:49, 1 August 2026 (UTC)
* [[User:Nux|Nux]] ([[User talk:Nux|talk]]) 11:42, 1 August 2026 (UTC) and also selecting and copying with ctrl+c/ctrl+v like in OOo/LibreOffice Calc
* [[User:Dungodung|Dungodung]] ([[User talk:Dungodung|talk]]) 15:30, 5 August 2026 (UTC)
* [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Fix the long article dual-column scroll problem where you can't see what you're editing ===
: This is particularly an issue on longer articles and smaller screens, but was mentioned as very irritating by some of you!
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 07:49, 31 July 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:03, 7 August 2026 (UTC)
* ''Sign here''
=== Support multiple sections, rather than just the lede ===
: Right now (despite some functions outputting <nowiki><h2></nowiki>s and the like), all articles are limited to just editing the lede section. We have mostly-built support for thematic sections, but this needs some polish. This would let you 'chunk up' articles, potentially editing only a section at a time for ease of use and / or collapsing those sections away to focus. We could also use this to allow external links limited to only the "external links" section (and references).
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 07:12, 3 August 2026 (UTC)
* Will be useful once users manage to write more than one section. [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
=== Prompt editors with function calls based on statements in the Wikidata item ===
: Add a feature that checks the subject's Wikidata item for statements of the kind it knows about (e.g. "born 1850-01-20 in France") and match them to fragments, prompting you to add this. We'd need to work out how to link between fragment functions and Wikidata claims, and how to know whether the claims were already in the article, so this is quite complex to design and build, but would probably help a great deal.
* {{neutral|Comment}} e.g. {{P|569}}:{{P|1535}}={{Q|138748413}} w/ qual. {{P|528}}=[[Z37683]] [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 00:57, 7 August 2026 (UTC)
* It would be nice for statements already present in Wikidata to be converted to form the sentences in the Abstract Wikipedia, instead of adding statements already present in Wikidata again in the A.W., as in [https://abstract.wikipedia.org/view/kcg/Q7251 Alan Turing]. [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:02, 7 August 2026 (UTC)
* More simply, i think it would be nice to have functions suggested depending on the kind of item (suggested functions for towns, for people...). We could also have templates that include multiple functions (e.g. introductory paragraph for town) that fetch the relevant statements (the user can then check them). (If it exists already it's hard to find). [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Prompt editors with media used on Wikipedia articles for the subject ===
: A more specialised option compared to fetching media suggestions alongside everything else from the Wikidata item would be to check for the main/first image on any existing Wikipedia articles and suggesting that if it's not already set.
*
* ''Sign here''
=== Fill in the parameters at copy/paste ===
: Fill in the parameters at copy/paste if the number and types of parameters match. That is especialy usefull when copying a new function from one language to an other. Currenltly every parameter has to be filled manually.
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 22:25, 5 August 2026 (UTC) (as proposer) I just created {{Z|Z38911}} and it took me very long to fill all 30! parameters correctly~
*:My apologies for making it so complicated! [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 23:04, 11 August 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:21, 7 August 2026 (UTC)
* —[[User:UndueMarmot|<span style="color:#705ccb;">Undue</span><span style="color:#cfdfa3;background-color:#705ccb;">Marmot</span>]] <small>([[User talk:UndueMarmot|talk]])</small> 13:11, 11 August 2026 (UTC)
* [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 18:06, 11 August 2026 (UTC)
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 23:04, 11 August 2026 (UTC)
* ''Sign here''
=== Example: Thing to fix (copy me!) ===
: What it would involve, and why it would be valuable.
* This could be a useful shortcut if the Wikidata statements don't get called automatically. [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:20, 7 August 2026 (UTC)
* ''Sign here''
== Any other ideas you might have ==
The sections above aren't everything. What else is something you'd like fixed?
=== Make it more obvious in the search whether there's an existing abstract article or not ===
: Right now we just add "– AW" to the end of search results when there's an existing article; if we make it clearer whether the link is a "read this" or "create this" link, folks won't be surprised when they click it.
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 15:58, 1 August 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:15, 7 August 2026 (UTC)
* For me it seemed it was necessary to search the QID to find and article, this could be clearer. Or the search by label should be supported.[[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Auto-linking new Abstract Wikipedia articles to their Wikidata counterparts ===
: Right now people need to manually say that ''e.g.'' Q90 is the same as Q90, which takes time and isn't obvious. If we did this automatically as articles were created, the workflow would be easier to understand.
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 15:56, 1 August 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:14, 7 August 2026 (UTC)
* —[[User:UndueMarmot|<span style="color:#705ccb;">Undue</span><span style="color:#cfdfa3;background-color:#705ccb;">Marmot</span>]] <small>([[User talk:UndueMarmot|talk]])</small> 13:09, 11 August 2026 (UTC)
* [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Show labels of talk pages ===
: Show labels of Zid's talk pages on recent changes, watchlist and also on Categories like [[:Category:English natural language generation functions|this one]]. Idem for Qid's talk pages on Abstract Wikipedia
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 17:22, 1 August 2026 (UTC) (as proposer)
* ''Sign here''
=== Enlarge the field for labels ===
{{seealso|WF:Request for cleanup#Long names and descriptions}}
: Currently the field for labels can hold a maximum of 50 characters. See for example {{Z|Z32398}}. Frequently this is not enough and abbreviation have to be made. That makes the function names confusing and not consistent.
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 17:37, 1 August 2026 (UTC) (as proposer)
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 20:59, 3 August 2026 (UTC)
* [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 16:09, 5 August 2026 (UTC)
* ''Sign here''
=== Support wikitext in functions output ===
: Wikifunctions don't support wikitext. They can only output unparseable plain text or HTML. I know that the page [[:f:Wikifunctions:Embedded function calls]] says very clearly that wikitext will never be supported. But this is the number one thing that causes me not to be motivated to use functions, and I suspect that I'm not alone. So perhaps you could reconsider it.
* [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 16:01, 5 August 2026 (UTC)
** {{ping|Amire80|p=,}} {{ping|HenkvD}} What would you do with the produced Wikitext? Copy it into an existing page on one of the sister projects? [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 01:01, 7 August 2026 (UTC)
**:The same things that everyone does with templates and modules. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 02:50, 7 August 2026 (UTC)
**::We should write functions as Wikitext like <nowiki>'''[[Q1]]'''</nowiki> and table and templates and modules etcetera. that should be rendered into HTML or so, the same as string to HTML functions. [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 05:45, 7 August 2026 (UTC)
*:@[[User:Amire80|Amire80]]: As you may recall from the repeated times this has been discussed, this isn't in our gift to offer, regardless of how much you ask for it, sorry. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 15:34, 7 August 2026 (UTC)
*::Look, it's not just me; more than a year has passed since enabling the embedding of Wikifunctions into Wikipedia and Wiktionary articles, and practically no one uses it. I'm just trying to explain the likely reason.
*::If you are going to respond that this survey is not about embedding Wikifunctions into other wikis, but about Abstract Wikipedia, it doesn't change much: this makes Abstract Wikipedia so different from other Wikipedias that contributing to it is unreasonably hard for almost everyone.
*::It's your call if you want to fix it. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 11:24, 8 August 2026 (UTC)
*:::@[[User:Amire80|Amire80]]:
*:::<blockquote>It's your call if you want to fix it.</blockquote>
*:::No. It is not, and never has been, in the Abstract Wikipedia team's power to "give" this feature to you. You and I have directly discussed this before, repeatedly. Wikifunctions producing wikitext that would be woven into existing pages was precisely and directly vetoed for us in 2020.
*:::You stating that it's actually possible, or starting votes about this, or complaining at me, Denny, or whomever in the team hasn't changed this fact. At some point even I will run out of good faith assumptions, when you repeatedly make statements that have been refuted. If you think the lack of wikitext is the red line over which you won't work with the project, that's understandable if sad, but I don't understand your comments. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 19:10, 11 August 2026 (UTC)
*::::Thank you for the clarification, James. I think the “woven into existing pages” qualification deserves closer scrutiny. It seems plausible (to me) that an entire Abstract Wikipedia article could be delivered as HTML, wikitext, rich text, plain text or any other format, so long as it is not actually delivered into the unparsed wikitext of a page. Is that a misinterpretation of the “veto” (which I haven’t actually seen)?
*::::The focus today is on whole articles, but that has never been my priority. As far as functions are concerned, wikitext is just plain text, so I don’t see any issues with individual functions returning wikitext, apart from the “why doesn’t it parse” confusion. Should we consider a new type for “unparsable” wikitext that, unlike strings, would require a display function before functions returning that type could be embedded? [[User:GrounderUK|GrounderUK]] ([[User talk:GrounderUK|talk]]) 20:21, 11 August 2026 (UTC)
*:::::@[[User:GrounderUK|GrounderUK]]: I don't understand your suggestion. Any Function can today return a Z6/String with wikitext-like characters in it, but the veto is that results will never be parsed as such into pages. Your proposed new non-parsed wikitext Type would need a display Function, as you say. Writing a display Function to turn wikitext into HTML would be extremely challenging to write, and an unbelievable expense of time. Parsoid, which this would mimic without being able to be called or share anything, is after ~15 years of work and millions of dollars of staff time now ~100k lines of pretty densely-written PHP (plus more than that again of test cases). Even if this were built, it would still never work for the things people are actually asking for when they say "wikitext" — templates, references, categories, ''etc.'' — as they are page-level integration concerns. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 18:27, 12 August 2026 (UTC)
*::::Although you have discussed it with Amir, I would also appreciate an explainer somewhere of who, where, why, and exactly what was vetoed. Without that it's impossible for me to know what is "actually possible". I was not around for discussions in 2020 - if it's public, I'd be interested in a link. [[Z10919|My first function]] on WF was to make Wikitext, as I assumed that was how we would eventually deliver Wikipedia content. [[Wikifunctions:Embedded function calls]] does give me some understanding of why this direction was chosen, and I'm broadly okay with contributing under whatever restrictions are current. But this whole page is about improvement. So let's allow space for Amir to raise this, especially if it sheds light for others of us, and possibly leads to improvement. Possibly even without further development from the AW dev team. Along with @[[User:GrounderUK|GrounderUK]]'s suggestions above, I think we have under-explored making functions that output string-wikitext. For example, the grammatical tables for Wiktionary could be written like this. Rather than "embedding" (~transclude), we could copy-paste (~subst) into pages (on any Wiki, not just Parsoid etc). This would have the advantage that it could be further edited by the receiving community. It would have the disadvantage that it would not be live-updated, so it might work better for grammar tables than for live population lists. But even live updating data ''could'' be incorporated by putting smaller #function calls inside the tables (depending whether you plan to implement the 5-10 call hard cap you mentioned at [https://phabricator.wikimedia.org/T431175 T431175]). I don't know if any of this would improve the uptake of WF content being used directly in non-AW wikis. It might. For now it's not my focus, but I think some of these options are in the WF contributors hands, and may only require little support from the AW team. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 02:03, 12 August 2026 (UTC)
*:::::@[[User:99of9|99of9]]: The veto was made in the very early system design conversations in 2020 by SRE and Security, and what we would now call the MediaWiki group.
*:::::My concern is that this page was meant to be about actionable ideas, and diverting a huge amount of effort into this conversation when Amir was part of those conversations then is disrespectful of your time. I'd of course be happy to discuss, at length, but it feels like this is a detailed enough area that it should be its own page/set of conversations that can be discussed, agreed/concluded, and summarised at length? [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 18:31, 12 August 2026 (UTC)
*::::::I think that’s fair. The problem in this specific context is that “Support wikitext in functions output” can have multiple interpretations. I’m happy to expand on my previous comments here or elsewhere, but I did attempt to keep them as brief as possible.
*::::::Just to clarify one point: a new wikitext type would need '''not''' to have a display function, so that wikitext functions would be unavailable as embedded functions, unlike a current string function whose string is intended to be wikitext. Or it might be formatted as a copyable text block… whatever the community concludes, and subject to the current “staff” discretion, when it comes to connecting an eventual display function. [[User:GrounderUK|GrounderUK]] ([[User talk:GrounderUK|talk]]) 19:09, 12 August 2026 (UTC)
*::::::@[[User:Jdforrester (WMF)|Jdforrester (WMF)]],
*::::::It is possible that my memory of the last six years is horribly broken, which is not totally inconceivable because I am diagnosed with a few neuropsychological conditions, at least some of which are lifelong. However, if it's not horribly broken then:
*::::::* I didn't know about the 2020 SRE "veto" until you mentioned it on this page on August 11.
*::::::* {{tq|Amir was part of those conversations then}} - I was not part of those conversations. Like, ''at all''. If I was, then my memory of them has been damaged somehow. For that matter, I don't recall being part of any conversations about Wikifunctions in 2020, except a very informal 1:1 chat with Denny very early in the project, and my public and mostly supportive responses on Meta.
*::::::* I first learned about the fact that Wikifunctions output will not be parsed as wikitext in the middle of 2024. If I knew about it in 2020, I wouldn't express any support for this project back then, as I did on the page [[:m:Abstract Wikipedia/Archive 1]], and I'd probably say that it shouldn't be done at all because no support for parsed wikitext means that not a lot of people will want to use it.
*::::::* {{tq|You and I have directly discussed this before, repeatedly}} - the only two times I can recall in which I spoke to you directly about this in any way are both public: [https://www.youtube.com/watch?v=XOeZ8sHimN0&t=4439s here] and [https://www.wikifunctions.org/wiki/Wikifunctions_talk:Embedded_function_calls#c-Amire80-20250424102200-Wikitext_output_section here]. In neither of those cases I learned from you about the "veto", or about ''why'' is wikitext parsing prohibited, or what is this prohibition good for, etc. (I am still really curious about the answers to these questions.)
*::::::* {{tq|You stating that it's actually possible}} - I'm pretty sure that I never said that adding wikitext parsing support to Wikifunctions is "actually possible". I don't know enough about parsing to claim if it's possible or not. If you think that I did claim this anywhere, please show me where, and I'll try to understand why did I say it then. What I did speak about is that it is ''desirable''.
*::::::* I cannot recall {{tq|repeatedly making statements that have been refuted}}. If you have examples of this, please give them before throwing accusations of bad faith around. If you don't have them, then please do not do this, it is very rude.
*::::::The only thing that I should clarify is that when I said "It's your call if you want to fix it", I didn't necessarily mean you personally. I meant anyone who wants Wikifunctions to have some users and has the power to do it. You say: {{tq|If you think the lack of wikitext is the red line over which you won't work with the project, that's understandable if sad}} - well, I think that it's not just my red line, but that it's almost everyone's red line. Again: It is a cold hard fact that sixteen months after the deployment of that feature, practically no one embeds Wikifunctions into wiki articles. The likely root cause of this is the lack of support for wikitext parsing, although I'd love to hear other theories.
*::::::If you cannot do it, then don't do it, but it likely means that the number of people who actually use Wikifunctions will remain negligible for the foreseeable future, and probably forever. I'll be happy to be proven wrong about this someday. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 00:08, 13 August 2026 (UTC)
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 22:11, 5 August 2026 (UTC) Without wikitext the Abstract Wikipedia is not a real Wikipedia. Using wikitext code for bold, italic etc. Maybe also for Wikilinks.
*:It should be for everything, not just bold, italic, and links. Wikitext is much more than that: magic words, article structure, etc. I'm not saying that it's good; there are lots of problems with wikitext, but it doesn't matter, because wikitext is the way in which practically all the content in all the wikis is stored, so you are right when you say that without wikitext the Abstract Wikipedia is not a real Wikipedia. Theoretically, the format shouldn't matter, because sharing knowledge shouldn't depend on the markup language, but practically, it matters a lot. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 15:05, 7 August 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 17:05, 7 August 2026 (UTC)
* —[[User:UndueMarmot|<span style="color:#705ccb;">Undue</span><span style="color:#cfdfa3;background-color:#705ccb;">Marmot</span>]] <small>([[User talk:UndueMarmot|talk]])</small> 13:10, 11 August 2026 (UTC)
* ''Sign here''
=== Completely change the UI of compositions ===
: I don't get compositions. A few people get them, but a lot of people don't. I mostly don't. When I try to read existing compositions, their deeply-nested hierarchy immediately confuses me, and I'm almost always afraid of editing anything. And I barely know how to start a new composition. The "clipboard" feature, which was added a few months ago, makes it a little bit less frustrating. But only a little bit; it doesn't solve the big issue. Creating and editing compositions is the only way to edit abstract articles, and it's very commonly needed on Wikifunctions, too, so if a lot of people have a hard time understanding how to do it, neither project will acquire a lot of editors. If you ask me, I'd do away with them completely and just use Python or JavaScript (or Lua!) code.
* [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 16:01, 5 August 2026 (UTC)
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 22:18, 5 August 2026 (UTC) I don't propose to get rid of compositions, but make the default output more readable by automatically start a new function on a new line, and indent automatically. Also in read mode.
* Same. It's frustrating to have to click my mouse 10 times through a bunch of functions just to change an input value [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 03:38, 6 August 2026 (UTC)
* From my no-code perspective, the ideal interface for me would be would be to see the generated text, then in the edit mode click on a sentence and see in the function, or set the cursor somewhere and be able to add a function there. (Maybe off topic, I do not know what a composition is). [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 18:04, 11 August 2026 (UTC)
* [[User:Arianit|Arianit]] ([[User talk:Arianit|talk]]) 13:21, 14 August 2026 (UTC)
* ''Sign here''
=== Allow choice of implementation to be forced ===
: Where a function has multiple implementations, it would be helpful to be able to force the orchestrator to select a particular implementation for a particular run (or a particular session or a particular user). This would often be very helpful for debugging, or when an implementation appears to have a bug. I am not too sure how that could work - I propose that each user should be able to mark any implementation as always to be selected in their case (or perhaps as never to be selected). Perhaps only in the current session.
:It would even be useful to have a mode in a given session where the orchestrator always selects the first (or last) implementation for all functions - then one would at least know which implementation was going to be called!
* [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 16:35, 5 August 2026 (UTC)
*:@[[User:Strobilomyces|Strobilomyces]]: The orchestrator will (currently) only ever chose the first connected implementation (for a language we support). Maybe we could make it clearer? For debugging, the idea is that you can do that from the implementation page whether or not it's connected, such as on [[Z15788]]. We could highlight that, perhaps? Can you give an example outside of debugging where you might want to allow multiple implementations to be connected but choose different implementations at run-time? I cannot suggest what we could do without understanding better the need, sorry! [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 17:30, 5 August 2026 (UTC)
*::Clarification: "First connected implementation" means the first one listed in the JSON version of the function (which is sometimes promoted or demoted by Wikilambda bot), rather than the first one displayed in the UI list, or the first one that was ever connected. Highlighting this implementation in the UI would be nice. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 04:15, 6 August 2026 (UTC)
*:::Yup, good point; we could definitely improve the UX here to indicate which is the "winning" implementation. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 14:34, 6 August 2026 (UTC)
*::@[[User:Jdforrester (WMF)|Jdforrester (WMF)]] The ability to test a given implementation directly is very useful. But functions often call other functions and it makes debugging difficult if it is not possible to tell which implementation will be executed or has been executed at the lower level. If it currently always the same version, then that is good. I would like to know how to tell which version will be or has been executed. How do I see the JSON version of the subfunction? Do I have to use the API? [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 13:27, 6 August 2026 (UTC)
*:::I find it by looking at the history and comparing diffs. Here's a diff showing that Wikilambda bot promoted the JS implementation to the top: https://www.wikifunctions.org/w/index.php?title=Z13521&diff=289160&oldid=232341 . --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 13:46, 6 August 2026 (UTC)
*:::@[[User:Strobilomyces|Strobilomyces]]: Yeah, you're right that one issue that comes up some times is our collapsing the meta-data responses from sub-calls into the top-level one, and so details like what Implementation was used are missed. More pressingly, it can be hard to see what sub-call caused an error (''e.g.'' "no Lexeme found"). [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 15:33, 7 August 2026 (UTC)
*::A particular case where the preferred implementation should not be used is when testing a recursive implementation. [[User:GrounderUK|GrounderUK]] ([[User talk:GrounderUK|talk]]) 18:04, 6 August 2026 (UTC)
*:You can run {{Z|Z35874}} to get the identifier of the currently preferred implementation for a specified function. You could also have [https://www.wikifunctions.org/view/en/Z37465?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37465%22%2C%22Z37465K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z35874%22%2C%22Z35874K1%22%3A%22Z10000%22%7D%2C%22Z37465K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z35874%22%2C%22Z35874K1%22%3A%22Z10000%22%7D%7D a hyperlink to the implementation].
*:When browsing, if you click on any of a function’s test cases, the implementations that are connected to the function are listed in the correct order in the Implementations box. This is also true when adding a new test case to a function.
*:Or we could [https://www.wikifunctions.org/view/en/Z801?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z801%22%2C%22Z801K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z33470%22%2C%22Z33470K1%22%3A%22view+function%E2%80%99s+JSON%22%2C%22Z33470K2%22%3A%22a%22%2C%22Z33470K3%22%3A%7B%22Z1K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z883%22%2C%22Z883K1%22%3A%22Z6%22%2C%22Z883K2%22%3A%22Z1%22%7D%2C%22K1%22%3A%5B%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z882%22%2C%22Z882K1%22%3A%22Z6%22%2C%22Z882K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z881%22%2C%22Z881K1%22%3A%22Z6%22%7D%7D%2C%7B%22Z1K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z882%22%2C%22Z882K1%22%3A%22Z6%22%2C%22Z882K2%22%3A%22Z1%22%7D%2C%22K1%22%3A%22href%22%2C%22K2%22%3A%5B%22Z6%22%2C%22https%3A%2F%2Fwww.wikifunctions.org%2Fwiki%2F%22%2C%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z28231%22%2C%22Z28231K1%22%3A%22Z801%22%7D%2C%22%3Faction%3Draw%22%5D%7D%5D%7D%7D%7D turn this into a function], I suppose, or [https://www.wikifunctions.org/view/en/Z801?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z801%22%2C%22Z801K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z811%22%2C%22Z811K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z803%22%2C%22Z803K1%22%3A%7B%22Z1K1%22%3A%22Z39%22%2C%22Z39K1%22%3A%22K1%22%7D%2C%22Z803K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z804%22%2C%22Z804K1%22%3A%5B%22Z39%22%2C%7B%22Z1K1%22%3A%22Z39%22%2C%22Z39K1%22%3A%22Z8K4%22%7D%5D%2C%22Z804K2%22%3A%22Z10000%22%7D%7D%7D%7D just this]. [[User:GrounderUK|GrounderUK]] ([[User talk:GrounderUK|talk]]) 17:51, 6 August 2026 (UTC)
*::Ah, OK. I thought that the implementation to be used was selected each time that a function was executed; if it is only selected occasionally for all executions, that is better. It would indeed be good to have a flagged indication of the "winning" first implementation, especially if it is not always the first listed on the function. So at present, if you make an alternative implementation or have a non-winning one, you can only test it independently; you cannot test it being called by another function. [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 16:28, 7 August 2026 (UTC)
*:::correct. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 22:13, 7 August 2026 (UTC)
* ''Sign here''
=== Allow Wikifunctions functions to be called from Python and Javascript ===
: As indicated in an earlier suggestion, it is not convenient to write complicated code in the form of compositions. I think far more code would be contributed if it could be done in Python or Javascript.
* [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 16:44, 5 August 2026 (UTC)
* This is extremely important to me. It's much easier and more readable for someone to write a couple lines of code rather than calling 10 functions. [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 06:49, 7 August 2026 (UTC)
* ''Sign here''
=== Allow clearing cache in WF/AW ===
: Add a way to clear the cache for a function given a certain input(s). For example, if a function takes a QID and a language, I might want to clear the cache for all outputs that take the French language or Q90 in.
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 00:48, 13 August 2026 (UTC)
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 09:34, 13 August 2026 (UTC) I sometime use direct URL links where I have to fill in the correct Qid or Zid.
* ''Sign here''
=== Example: Thing to fix (copy me!) ===
: What it would involve, and why it would be valuable.
* ''Sign here''
== Thank you! ==
It was great to speak to and hear from so many of you.
5ng66o4502ph8ucbcer0q739ej1j4b7
299572
299528
2026-08-15T08:26:22Z
Carnildo
54460
/* Allow clearing cache in WF/AW */
299572
wikitext
text/x-wiki
{{seealso|WF:Feature petitions}}
Thank you to so many of you who came in-person and online to the workshop at Wikimania last week around creating Abstract Wikipedia articles.
__NEWSECTIONLINK__
Based on your comments there and things you ran into or mentioned, we've pulled together a quick ideas list of possible improvements (alongside our work on faster and better NLG support, working with communities to consider piloting Abstract Wikipedia on their wiki, and other major parts of the annual plan).
Please indicate which items you think we should work on soonest by signing your name (<nowiki>~~~~</nowiki>) below them. We'll probably work on many of these, but the count of "votes" and arguments will help guide us in which ones we prioritise.
== Individual fragment editing ==
These are some ideas about how we might make adding and editing individual fragments easier.
=== Only auto-match the Wikidata item to the subject of the article on the first item in a Function call, not all of them ===
: This should avoid the confusing step of suggested items saying "Cairo is the Cairo of Cairo", but instead would need you to specify the item references for the others. The heuristic of only matching the first item might be enough as a starting point for many calls. We probably still want to match all dates and languages, though.
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 07:50, 31 July 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 00:56, 7 August 2026 (UTC)
* [[User:Jens Ohlig|Jens Ohlig]] ([[User talk:Jens Ohlig|talk]]) 19:37, 9 August 2026 (UTC)
* ''Sign here''
=== Split out some of the '…' menu on each item so you can quickly switch to a manual item reference ===
: A big stumbling block for folks was switching from an auto-matched (argument key) item or a function call to a specific item reference. This would allow you to quickly switch to that, without having to notice and go through the menu of all the other options.
* ''Sign here''
=== Re-word the labels for the abstract argument keys to be more clear about what they are ===
: We label the keys as 'wikidata item reference', 'language', and 'date'; we should make it clearer that these are 'this article's subject', 'view language', and 'view date' respectively. This would help avoid confusion about what these keys are for, and when you don't want to use them.
* [[User:Waldyrious|Waldyrious]] ([[User talk:Waldyrious|talk]]) 08:48, 1 August 2026 (UTC)
*:{{Done}} As a first step; how does that work for you? [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 15:45, 5 August 2026 (UTC)
=== Add short description fields to Functions' arguments, to help people can understand what the inputs mean when they use them ===
: For Functions, we have labels, aliases, and short descriptions, but Functions' inputs just have a single label each, which can make it hard for people to know what to put where, especially if they have unusual or unfamiliar words. Add a short description field, maybe shown via a secondary accessor like a "[[File:Codex icon info color-notice.svg|20x20px]]" rather than all the time.
* ''Better documentation of existing functions may also help. The existing one seem outdated or too complicated. We could have pages like "useful functions for towns". Descriptions should also help searching and finding the right function.'' [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 18:04, 11 August 2026 (UTC)
* [[User:Nux|Nux]] ([[User talk:Nux|talk]]) 11:38, 1 August 2026 (UTC) (i) icons with more info might help, like e.g. what the author means by "Hypernym" [https://abstract.wikipedia.org/w/index.php?title=Abstract_Wikipedia:Useful_functions_for_article_composition&oldid=13847].
*:@[[User:Nux|Nux]]: Can you give some more detail for where that kind of interface shows up for you? Do you mean giving more context for labels of functions' inputs? [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 15:46, 5 August 2026 (UTC)
*::@[[User:Jdforrester (WMF)|Jdforrester (WMF)]] Yes, argument description. Like a description for function [https://www.wikifunctions.org/w/index.php?title=Z37921&action=edit&uselang=en]. Like in JavaDoc. [[User:Nux|Nux]] ([[User talk:Nux|talk]]) 19:58, 5 August 2026 (UTC)
*:::Aha, right. Is it OK if I split this out into its own section? That's a very different change from what this section was written up as, based on what I heard in Paris, and should have its own discussion. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 20:06, 5 August 2026 (UTC)
*::::Sure. [[User:Nux|Nux]] ([[User talk:Nux|talk]]) 20:12, 5 August 2026 (UTC)
*:As function writers we can probably do a better job of using the full length of the label we are already allowed (e.g. to explain what hypernym means in that context). --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 03:15, 7 August 2026 (UTC)
* ''Sign here''
=== Example: Thing to fix (copy me!) ===
: What it would involve, and why it would be valuable.
* ''Sign here''
== New/better kinds of fragment ==
Here are some ideas for different kinds of fragments that you could use in abstract articles.
=== Add support for pulling structured data from Commons files ''e.g.'' captions ===
: Right now you can put in image files themselves, but you can't fetch any data about them. This is particularly unhelpful as the Wikidata items still use the File: name rather than the MID; we'd need to add the ability to fetch meta-data from Commons to the back-end services, like we do from Wikidata.
* {{neutral|Comment}} The suggestion of [[phab:T428224|accepting Commons filenames]] as well as MIDs would mean that media values and their qualifiers could be pulled from a Wikidata Item, but most of the metadata isn't there, it's on Commons. I'm not sure which parts from Commons would be useful, maybe the author/licence, maybe the structured data ('depicts' etc.). Does anyone know of a Scribunto module on a sister project which uses metadata from Commons? [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 20:45, 9 August 2026 (UTC)
* It would be simpler to have a function to generate the caption ? [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Add support for video/audio file inclusions ===
: You can only specify image files, not audio or video files which are more complex. If demand is high we could add this sooner rather than later, though it may be complex to align with the existing workflows.
* ''Sign here''
=== Add support for galleries of media file inclusions ===
: You can create multiple media file transclusions, but it's limited to a small number and you have to do all the work of creating the styles around it. We could give a first-level media file output, if this is strongly wanted.
* ''Sign here''
=== Add support for map inclusions ===
: We don't yet support maps, which might be wanted if folks are making articles about places a lot. Full support would be quite complicated.
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 03:24, 31 July 2026 (UTC)
=== Add support for chart inclusions ===
: We don't yet support charts, which might be wanted if folks are making articles about numerical things a lot. Full support would be very complicated.
* ''Sign here''
=== Abstract source mock-ups and multilingual reviews ===
:We are approaching Abstract Wikipedia from the bottom up, with very simple examples. This may be the "Wiki Way", but for software it is very unconventional, and I think it is uncertain whether it can eventually work for more advanced text. The project will have failed unless natural text similar in complexity to current Wikipedia articles can be generated. I think nobody (except possibly [[user:mahir256|Mahir Morshed]]) understands what the abstract source for more complicated sentences would look like.
:Mahir Morshed has created a multilingual text generation system called Ninai/Udiron at [[toolforge:elemthala]] (see his introduction at https://www.wikifunctions.org/wiki/Wikifunctions:Status_updates/2024-10-17 and his session at Wikimania). This is linked to Abstract Wikipedia, and extremely relevant to it (since it is the only real current proposal for the abstract souce that I know), but it should be noted that Ninai is only a proposal, not Abstract Wikipedia policy. The list of constructors defines the abstract source as it is at present. Also more information on how this abstract content can be constructed can be found at https://www.wikidata.org/wiki/User:Mahir256/language-generation, with various links and references.
:It is not clear to me whether the abstract source, consisting of functions of Wikidata items backed up by lexemes, can even work at all for a wide variety of languages. Rendering a text needs much information which is special to the target language, for instance there can be genders, grammatical cases, polite forms of address, etc. Example: The Eiffel Tower (Q243) usually needs a definite article when used in English, whereas Blackpool Tower (Q880905) does not. Where should this information for the English renderer be held? It cannot be in the abstract source, since the answer is special for English; some editors of the abstract source will speak languages which do not use articles. Well, I think that this type of item needs an English lexeme with a flag to indicate the article usage, and that would be a solution. Another example relates to the grammatical tenses, voices and moods of verbs. How will that be managed? I suppose that a verb tense indication must be given as a parameter in the abstract source, but how will the values of this parameter be related to all the possible tense/voice/mood verb forms in all the languages? There are an enormous number of such diverse features; how can we be sure that there is enough information in the abstract source to do the rendering in all cases?
:I think that there is an urgent need to create examples of complex text (such as real Wikipedia articles) in the proposed abstract source. Then testers who comprehend the abstract source format and also know a relevant language should interpret the source text and confirm whether they understand it and whether they have enough information to reconstruct the text in their own language (not by software but with their own mental processes). If so, that would give much-needed confidence that the Abstract Wikipedia scheme can actually work, and I think it would advance the project by making clearer the next needed steps.
* [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 20:41, 5 August 2026 (UTC)
* I do not know if this is a priority but would clearly be interesting to test. I am curious to know if abstract Wikipedia can express something more subtle or complex than a wikidata statements. But it is a strategic question: is the goal to put wikidata statements into sentences (with relatively poor language) to build automatic placeholders articles and call for additional human contribution, or is the goal to generate a full "Wikipedia article" with a rich language ? [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== More showcase/example items ===
: More articles to give an idea of what's possible or good practice. The impressive [[abstract:Q408|Australia]] article is great, but I'm thinking about something-like the query for cats in the Wikidata query service. Ideally with an option to copy everything as the foundation for a new article on a similar topic.
* [[User:Jens Ohlig|Jens Ohlig]] ([[User talk:Jens Ohlig|talk]]) 19:37, 9 August 2026 (UTC)
* [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Example: Thing to fix (copy me!) ===
: What it would involve, and why it would be valuable.
* ''Sign here''
== Article editing ==
Here are some quick ideas about overall article editing, not specific to a given
=== Drag-and-drop moving of fragments, instead of having to click on the menu and the "move up/down" multiple times ===
: Drag-and-drop is a relatively familiar UX feature, and we could add an affordance for it to make it more discoverable at the same time as more usable.
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 03:22, 31 July 2026 (UTC)
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 07:52, 31 July 2026 (UTC)
* [[User:Waldyrious|Waldyrious]] ([[User talk:Waldyrious|talk]]) 08:49, 1 August 2026 (UTC)
* [[User:Nux|Nux]] ([[User talk:Nux|talk]]) 11:42, 1 August 2026 (UTC) and also selecting and copying with ctrl+c/ctrl+v like in OOo/LibreOffice Calc
* [[User:Dungodung|Dungodung]] ([[User talk:Dungodung|talk]]) 15:30, 5 August 2026 (UTC)
* [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Fix the long article dual-column scroll problem where you can't see what you're editing ===
: This is particularly an issue on longer articles and smaller screens, but was mentioned as very irritating by some of you!
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 07:49, 31 July 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:03, 7 August 2026 (UTC)
* ''Sign here''
=== Support multiple sections, rather than just the lede ===
: Right now (despite some functions outputting <nowiki><h2></nowiki>s and the like), all articles are limited to just editing the lede section. We have mostly-built support for thematic sections, but this needs some polish. This would let you 'chunk up' articles, potentially editing only a section at a time for ease of use and / or collapsing those sections away to focus. We could also use this to allow external links limited to only the "external links" section (and references).
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 07:12, 3 August 2026 (UTC)
* Will be useful once users manage to write more than one section. [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
=== Prompt editors with function calls based on statements in the Wikidata item ===
: Add a feature that checks the subject's Wikidata item for statements of the kind it knows about (e.g. "born 1850-01-20 in France") and match them to fragments, prompting you to add this. We'd need to work out how to link between fragment functions and Wikidata claims, and how to know whether the claims were already in the article, so this is quite complex to design and build, but would probably help a great deal.
* {{neutral|Comment}} e.g. {{P|569}}:{{P|1535}}={{Q|138748413}} w/ qual. {{P|528}}=[[Z37683]] [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 00:57, 7 August 2026 (UTC)
* It would be nice for statements already present in Wikidata to be converted to form the sentences in the Abstract Wikipedia, instead of adding statements already present in Wikidata again in the A.W., as in [https://abstract.wikipedia.org/view/kcg/Q7251 Alan Turing]. [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:02, 7 August 2026 (UTC)
* More simply, i think it would be nice to have functions suggested depending on the kind of item (suggested functions for towns, for people...). We could also have templates that include multiple functions (e.g. introductory paragraph for town) that fetch the relevant statements (the user can then check them). (If it exists already it's hard to find). [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Prompt editors with media used on Wikipedia articles for the subject ===
: A more specialised option compared to fetching media suggestions alongside everything else from the Wikidata item would be to check for the main/first image on any existing Wikipedia articles and suggesting that if it's not already set.
*
* ''Sign here''
=== Fill in the parameters at copy/paste ===
: Fill in the parameters at copy/paste if the number and types of parameters match. That is especialy usefull when copying a new function from one language to an other. Currenltly every parameter has to be filled manually.
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 22:25, 5 August 2026 (UTC) (as proposer) I just created {{Z|Z38911}} and it took me very long to fill all 30! parameters correctly~
*:My apologies for making it so complicated! [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 23:04, 11 August 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:21, 7 August 2026 (UTC)
* —[[User:UndueMarmot|<span style="color:#705ccb;">Undue</span><span style="color:#cfdfa3;background-color:#705ccb;">Marmot</span>]] <small>([[User talk:UndueMarmot|talk]])</small> 13:11, 11 August 2026 (UTC)
* [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 18:06, 11 August 2026 (UTC)
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 23:04, 11 August 2026 (UTC)
* ''Sign here''
=== Example: Thing to fix (copy me!) ===
: What it would involve, and why it would be valuable.
* This could be a useful shortcut if the Wikidata statements don't get called automatically. [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:20, 7 August 2026 (UTC)
* ''Sign here''
== Any other ideas you might have ==
The sections above aren't everything. What else is something you'd like fixed?
=== Make it more obvious in the search whether there's an existing abstract article or not ===
: Right now we just add "– AW" to the end of search results when there's an existing article; if we make it clearer whether the link is a "read this" or "create this" link, folks won't be surprised when they click it.
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 15:58, 1 August 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:15, 7 August 2026 (UTC)
* For me it seemed it was necessary to search the QID to find and article, this could be clearer. Or the search by label should be supported.[[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Auto-linking new Abstract Wikipedia articles to their Wikidata counterparts ===
: Right now people need to manually say that ''e.g.'' Q90 is the same as Q90, which takes time and isn't obvious. If we did this automatically as articles were created, the workflow would be easier to understand.
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 15:56, 1 August 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 01:14, 7 August 2026 (UTC)
* —[[User:UndueMarmot|<span style="color:#705ccb;">Undue</span><span style="color:#cfdfa3;background-color:#705ccb;">Marmot</span>]] <small>([[User talk:UndueMarmot|talk]])</small> 13:09, 11 August 2026 (UTC)
* [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 17:51, 11 August 2026 (UTC)
* ''Sign here''
=== Show labels of talk pages ===
: Show labels of Zid's talk pages on recent changes, watchlist and also on Categories like [[:Category:English natural language generation functions|this one]]. Idem for Qid's talk pages on Abstract Wikipedia
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 17:22, 1 August 2026 (UTC) (as proposer)
* ''Sign here''
=== Enlarge the field for labels ===
{{seealso|WF:Request for cleanup#Long names and descriptions}}
: Currently the field for labels can hold a maximum of 50 characters. See for example {{Z|Z32398}}. Frequently this is not enough and abbreviation have to be made. That makes the function names confusing and not consistent.
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 17:37, 1 August 2026 (UTC) (as proposer)
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 20:59, 3 August 2026 (UTC)
* [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 16:09, 5 August 2026 (UTC)
* ''Sign here''
=== Support wikitext in functions output ===
: Wikifunctions don't support wikitext. They can only output unparseable plain text or HTML. I know that the page [[:f:Wikifunctions:Embedded function calls]] says very clearly that wikitext will never be supported. But this is the number one thing that causes me not to be motivated to use functions, and I suspect that I'm not alone. So perhaps you could reconsider it.
* [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 16:01, 5 August 2026 (UTC)
** {{ping|Amire80|p=,}} {{ping|HenkvD}} What would you do with the produced Wikitext? Copy it into an existing page on one of the sister projects? [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 01:01, 7 August 2026 (UTC)
**:The same things that everyone does with templates and modules. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 02:50, 7 August 2026 (UTC)
**::We should write functions as Wikitext like <nowiki>'''[[Q1]]'''</nowiki> and table and templates and modules etcetera. that should be rendered into HTML or so, the same as string to HTML functions. [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 05:45, 7 August 2026 (UTC)
*:@[[User:Amire80|Amire80]]: As you may recall from the repeated times this has been discussed, this isn't in our gift to offer, regardless of how much you ask for it, sorry. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 15:34, 7 August 2026 (UTC)
*::Look, it's not just me; more than a year has passed since enabling the embedding of Wikifunctions into Wikipedia and Wiktionary articles, and practically no one uses it. I'm just trying to explain the likely reason.
*::If you are going to respond that this survey is not about embedding Wikifunctions into other wikis, but about Abstract Wikipedia, it doesn't change much: this makes Abstract Wikipedia so different from other Wikipedias that contributing to it is unreasonably hard for almost everyone.
*::It's your call if you want to fix it. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 11:24, 8 August 2026 (UTC)
*:::@[[User:Amire80|Amire80]]:
*:::<blockquote>It's your call if you want to fix it.</blockquote>
*:::No. It is not, and never has been, in the Abstract Wikipedia team's power to "give" this feature to you. You and I have directly discussed this before, repeatedly. Wikifunctions producing wikitext that would be woven into existing pages was precisely and directly vetoed for us in 2020.
*:::You stating that it's actually possible, or starting votes about this, or complaining at me, Denny, or whomever in the team hasn't changed this fact. At some point even I will run out of good faith assumptions, when you repeatedly make statements that have been refuted. If you think the lack of wikitext is the red line over which you won't work with the project, that's understandable if sad, but I don't understand your comments. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 19:10, 11 August 2026 (UTC)
*::::Thank you for the clarification, James. I think the “woven into existing pages” qualification deserves closer scrutiny. It seems plausible (to me) that an entire Abstract Wikipedia article could be delivered as HTML, wikitext, rich text, plain text or any other format, so long as it is not actually delivered into the unparsed wikitext of a page. Is that a misinterpretation of the “veto” (which I haven’t actually seen)?
*::::The focus today is on whole articles, but that has never been my priority. As far as functions are concerned, wikitext is just plain text, so I don’t see any issues with individual functions returning wikitext, apart from the “why doesn’t it parse” confusion. Should we consider a new type for “unparsable” wikitext that, unlike strings, would require a display function before functions returning that type could be embedded? [[User:GrounderUK|GrounderUK]] ([[User talk:GrounderUK|talk]]) 20:21, 11 August 2026 (UTC)
*:::::@[[User:GrounderUK|GrounderUK]]: I don't understand your suggestion. Any Function can today return a Z6/String with wikitext-like characters in it, but the veto is that results will never be parsed as such into pages. Your proposed new non-parsed wikitext Type would need a display Function, as you say. Writing a display Function to turn wikitext into HTML would be extremely challenging to write, and an unbelievable expense of time. Parsoid, which this would mimic without being able to be called or share anything, is after ~15 years of work and millions of dollars of staff time now ~100k lines of pretty densely-written PHP (plus more than that again of test cases). Even if this were built, it would still never work for the things people are actually asking for when they say "wikitext" — templates, references, categories, ''etc.'' — as they are page-level integration concerns. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 18:27, 12 August 2026 (UTC)
*::::Although you have discussed it with Amir, I would also appreciate an explainer somewhere of who, where, why, and exactly what was vetoed. Without that it's impossible for me to know what is "actually possible". I was not around for discussions in 2020 - if it's public, I'd be interested in a link. [[Z10919|My first function]] on WF was to make Wikitext, as I assumed that was how we would eventually deliver Wikipedia content. [[Wikifunctions:Embedded function calls]] does give me some understanding of why this direction was chosen, and I'm broadly okay with contributing under whatever restrictions are current. But this whole page is about improvement. So let's allow space for Amir to raise this, especially if it sheds light for others of us, and possibly leads to improvement. Possibly even without further development from the AW dev team. Along with @[[User:GrounderUK|GrounderUK]]'s suggestions above, I think we have under-explored making functions that output string-wikitext. For example, the grammatical tables for Wiktionary could be written like this. Rather than "embedding" (~transclude), we could copy-paste (~subst) into pages (on any Wiki, not just Parsoid etc). This would have the advantage that it could be further edited by the receiving community. It would have the disadvantage that it would not be live-updated, so it might work better for grammar tables than for live population lists. But even live updating data ''could'' be incorporated by putting smaller #function calls inside the tables (depending whether you plan to implement the 5-10 call hard cap you mentioned at [https://phabricator.wikimedia.org/T431175 T431175]). I don't know if any of this would improve the uptake of WF content being used directly in non-AW wikis. It might. For now it's not my focus, but I think some of these options are in the WF contributors hands, and may only require little support from the AW team. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 02:03, 12 August 2026 (UTC)
*:::::@[[User:99of9|99of9]]: The veto was made in the very early system design conversations in 2020 by SRE and Security, and what we would now call the MediaWiki group.
*:::::My concern is that this page was meant to be about actionable ideas, and diverting a huge amount of effort into this conversation when Amir was part of those conversations then is disrespectful of your time. I'd of course be happy to discuss, at length, but it feels like this is a detailed enough area that it should be its own page/set of conversations that can be discussed, agreed/concluded, and summarised at length? [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 18:31, 12 August 2026 (UTC)
*::::::I think that’s fair. The problem in this specific context is that “Support wikitext in functions output” can have multiple interpretations. I’m happy to expand on my previous comments here or elsewhere, but I did attempt to keep them as brief as possible.
*::::::Just to clarify one point: a new wikitext type would need '''not''' to have a display function, so that wikitext functions would be unavailable as embedded functions, unlike a current string function whose string is intended to be wikitext. Or it might be formatted as a copyable text block… whatever the community concludes, and subject to the current “staff” discretion, when it comes to connecting an eventual display function. [[User:GrounderUK|GrounderUK]] ([[User talk:GrounderUK|talk]]) 19:09, 12 August 2026 (UTC)
*::::::@[[User:Jdforrester (WMF)|Jdforrester (WMF)]],
*::::::It is possible that my memory of the last six years is horribly broken, which is not totally inconceivable because I am diagnosed with a few neuropsychological conditions, at least some of which are lifelong. However, if it's not horribly broken then:
*::::::* I didn't know about the 2020 SRE "veto" until you mentioned it on this page on August 11.
*::::::* {{tq|Amir was part of those conversations then}} - I was not part of those conversations. Like, ''at all''. If I was, then my memory of them has been damaged somehow. For that matter, I don't recall being part of any conversations about Wikifunctions in 2020, except a very informal 1:1 chat with Denny very early in the project, and my public and mostly supportive responses on Meta.
*::::::* I first learned about the fact that Wikifunctions output will not be parsed as wikitext in the middle of 2024. If I knew about it in 2020, I wouldn't express any support for this project back then, as I did on the page [[:m:Abstract Wikipedia/Archive 1]], and I'd probably say that it shouldn't be done at all because no support for parsed wikitext means that not a lot of people will want to use it.
*::::::* {{tq|You and I have directly discussed this before, repeatedly}} - the only two times I can recall in which I spoke to you directly about this in any way are both public: [https://www.youtube.com/watch?v=XOeZ8sHimN0&t=4439s here] and [https://www.wikifunctions.org/wiki/Wikifunctions_talk:Embedded_function_calls#c-Amire80-20250424102200-Wikitext_output_section here]. In neither of those cases I learned from you about the "veto", or about ''why'' is wikitext parsing prohibited, or what is this prohibition good for, etc. (I am still really curious about the answers to these questions.)
*::::::* {{tq|You stating that it's actually possible}} - I'm pretty sure that I never said that adding wikitext parsing support to Wikifunctions is "actually possible". I don't know enough about parsing to claim if it's possible or not. If you think that I did claim this anywhere, please show me where, and I'll try to understand why did I say it then. What I did speak about is that it is ''desirable''.
*::::::* I cannot recall {{tq|repeatedly making statements that have been refuted}}. If you have examples of this, please give them before throwing accusations of bad faith around. If you don't have them, then please do not do this, it is very rude.
*::::::The only thing that I should clarify is that when I said "It's your call if you want to fix it", I didn't necessarily mean you personally. I meant anyone who wants Wikifunctions to have some users and has the power to do it. You say: {{tq|If you think the lack of wikitext is the red line over which you won't work with the project, that's understandable if sad}} - well, I think that it's not just my red line, but that it's almost everyone's red line. Again: It is a cold hard fact that sixteen months after the deployment of that feature, practically no one embeds Wikifunctions into wiki articles. The likely root cause of this is the lack of support for wikitext parsing, although I'd love to hear other theories.
*::::::If you cannot do it, then don't do it, but it likely means that the number of people who actually use Wikifunctions will remain negligible for the foreseeable future, and probably forever. I'll be happy to be proven wrong about this someday. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 00:08, 13 August 2026 (UTC)
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 22:11, 5 August 2026 (UTC) Without wikitext the Abstract Wikipedia is not a real Wikipedia. Using wikitext code for bold, italic etc. Maybe also for Wikilinks.
*:It should be for everything, not just bold, italic, and links. Wikitext is much more than that: magic words, article structure, etc. I'm not saying that it's good; there are lots of problems with wikitext, but it doesn't matter, because wikitext is the way in which practically all the content in all the wikis is stored, so you are right when you say that without wikitext the Abstract Wikipedia is not a real Wikipedia. Theoretically, the format shouldn't matter, because sharing knowledge shouldn't depend on the markup language, but practically, it matters a lot. [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 15:05, 7 August 2026 (UTC)
* [[User:Kambai Akau|Kambai Akau]] ([[User talk:Kambai Akau|talk]]) 17:05, 7 August 2026 (UTC)
* —[[User:UndueMarmot|<span style="color:#705ccb;">Undue</span><span style="color:#cfdfa3;background-color:#705ccb;">Marmot</span>]] <small>([[User talk:UndueMarmot|talk]])</small> 13:10, 11 August 2026 (UTC)
* ''Sign here''
=== Completely change the UI of compositions ===
: I don't get compositions. A few people get them, but a lot of people don't. I mostly don't. When I try to read existing compositions, their deeply-nested hierarchy immediately confuses me, and I'm almost always afraid of editing anything. And I barely know how to start a new composition. The "clipboard" feature, which was added a few months ago, makes it a little bit less frustrating. But only a little bit; it doesn't solve the big issue. Creating and editing compositions is the only way to edit abstract articles, and it's very commonly needed on Wikifunctions, too, so if a lot of people have a hard time understanding how to do it, neither project will acquire a lot of editors. If you ask me, I'd do away with them completely and just use Python or JavaScript (or Lua!) code.
* [[User:Amire80|Amir E. Aharoni]] ([[User talk:Amire80|talk]]) 16:01, 5 August 2026 (UTC)
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 22:18, 5 August 2026 (UTC) I don't propose to get rid of compositions, but make the default output more readable by automatically start a new function on a new line, and indent automatically. Also in read mode.
* Same. It's frustrating to have to click my mouse 10 times through a bunch of functions just to change an input value [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 03:38, 6 August 2026 (UTC)
* From my no-code perspective, the ideal interface for me would be would be to see the generated text, then in the edit mode click on a sentence and see in the function, or set the cursor somewhere and be able to add a function there. (Maybe off topic, I do not know what a composition is). [[User:Jeanne Noiraud|Jeanne Noiraud]] ([[User talk:Jeanne Noiraud|talk]]) 18:04, 11 August 2026 (UTC)
* [[User:Arianit|Arianit]] ([[User talk:Arianit|talk]]) 13:21, 14 August 2026 (UTC)
* ''Sign here''
=== Allow choice of implementation to be forced ===
: Where a function has multiple implementations, it would be helpful to be able to force the orchestrator to select a particular implementation for a particular run (or a particular session or a particular user). This would often be very helpful for debugging, or when an implementation appears to have a bug. I am not too sure how that could work - I propose that each user should be able to mark any implementation as always to be selected in their case (or perhaps as never to be selected). Perhaps only in the current session.
:It would even be useful to have a mode in a given session where the orchestrator always selects the first (or last) implementation for all functions - then one would at least know which implementation was going to be called!
* [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 16:35, 5 August 2026 (UTC)
*:@[[User:Strobilomyces|Strobilomyces]]: The orchestrator will (currently) only ever chose the first connected implementation (for a language we support). Maybe we could make it clearer? For debugging, the idea is that you can do that from the implementation page whether or not it's connected, such as on [[Z15788]]. We could highlight that, perhaps? Can you give an example outside of debugging where you might want to allow multiple implementations to be connected but choose different implementations at run-time? I cannot suggest what we could do without understanding better the need, sorry! [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 17:30, 5 August 2026 (UTC)
*::Clarification: "First connected implementation" means the first one listed in the JSON version of the function (which is sometimes promoted or demoted by Wikilambda bot), rather than the first one displayed in the UI list, or the first one that was ever connected. Highlighting this implementation in the UI would be nice. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 04:15, 6 August 2026 (UTC)
*:::Yup, good point; we could definitely improve the UX here to indicate which is the "winning" implementation. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 14:34, 6 August 2026 (UTC)
*::@[[User:Jdforrester (WMF)|Jdforrester (WMF)]] The ability to test a given implementation directly is very useful. But functions often call other functions and it makes debugging difficult if it is not possible to tell which implementation will be executed or has been executed at the lower level. If it currently always the same version, then that is good. I would like to know how to tell which version will be or has been executed. How do I see the JSON version of the subfunction? Do I have to use the API? [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 13:27, 6 August 2026 (UTC)
*:::I find it by looking at the history and comparing diffs. Here's a diff showing that Wikilambda bot promoted the JS implementation to the top: https://www.wikifunctions.org/w/index.php?title=Z13521&diff=289160&oldid=232341 . --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 13:46, 6 August 2026 (UTC)
*:::@[[User:Strobilomyces|Strobilomyces]]: Yeah, you're right that one issue that comes up some times is our collapsing the meta-data responses from sub-calls into the top-level one, and so details like what Implementation was used are missed. More pressingly, it can be hard to see what sub-call caused an error (''e.g.'' "no Lexeme found"). [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 15:33, 7 August 2026 (UTC)
*::A particular case where the preferred implementation should not be used is when testing a recursive implementation. [[User:GrounderUK|GrounderUK]] ([[User talk:GrounderUK|talk]]) 18:04, 6 August 2026 (UTC)
*:You can run {{Z|Z35874}} to get the identifier of the currently preferred implementation for a specified function. You could also have [https://www.wikifunctions.org/view/en/Z37465?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z37465%22%2C%22Z37465K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z35874%22%2C%22Z35874K1%22%3A%22Z10000%22%7D%2C%22Z37465K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z35874%22%2C%22Z35874K1%22%3A%22Z10000%22%7D%7D a hyperlink to the implementation].
*:When browsing, if you click on any of a function’s test cases, the implementations that are connected to the function are listed in the correct order in the Implementations box. This is also true when adding a new test case to a function.
*:Or we could [https://www.wikifunctions.org/view/en/Z801?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z801%22%2C%22Z801K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z33470%22%2C%22Z33470K1%22%3A%22view+function%E2%80%99s+JSON%22%2C%22Z33470K2%22%3A%22a%22%2C%22Z33470K3%22%3A%7B%22Z1K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z883%22%2C%22Z883K1%22%3A%22Z6%22%2C%22Z883K2%22%3A%22Z1%22%7D%2C%22K1%22%3A%5B%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z882%22%2C%22Z882K1%22%3A%22Z6%22%2C%22Z882K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z881%22%2C%22Z881K1%22%3A%22Z6%22%7D%7D%2C%7B%22Z1K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z882%22%2C%22Z882K1%22%3A%22Z6%22%2C%22Z882K2%22%3A%22Z1%22%7D%2C%22K1%22%3A%22href%22%2C%22K2%22%3A%5B%22Z6%22%2C%22https%3A%2F%2Fwww.wikifunctions.org%2Fwiki%2F%22%2C%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z28231%22%2C%22Z28231K1%22%3A%22Z801%22%7D%2C%22%3Faction%3Draw%22%5D%7D%5D%7D%7D%7D turn this into a function], I suppose, or [https://www.wikifunctions.org/view/en/Z801?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z801%22%2C%22Z801K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z811%22%2C%22Z811K1%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z803%22%2C%22Z803K1%22%3A%7B%22Z1K1%22%3A%22Z39%22%2C%22Z39K1%22%3A%22K1%22%7D%2C%22Z803K2%22%3A%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z804%22%2C%22Z804K1%22%3A%5B%22Z39%22%2C%7B%22Z1K1%22%3A%22Z39%22%2C%22Z39K1%22%3A%22Z8K4%22%7D%5D%2C%22Z804K2%22%3A%22Z10000%22%7D%7D%7D%7D just this]. [[User:GrounderUK|GrounderUK]] ([[User talk:GrounderUK|talk]]) 17:51, 6 August 2026 (UTC)
*::Ah, OK. I thought that the implementation to be used was selected each time that a function was executed; if it is only selected occasionally for all executions, that is better. It would indeed be good to have a flagged indication of the "winning" first implementation, especially if it is not always the first listed on the function. So at present, if you make an alternative implementation or have a non-winning one, you can only test it independently; you cannot test it being called by another function. [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 16:28, 7 August 2026 (UTC)
*:::correct. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 22:13, 7 August 2026 (UTC)
* ''Sign here''
=== Allow Wikifunctions functions to be called from Python and Javascript ===
: As indicated in an earlier suggestion, it is not convenient to write complicated code in the form of compositions. I think far more code would be contributed if it could be done in Python or Javascript.
* [[User:Strobilomyces|Strobilomyces]] ([[User talk:Strobilomyces|talk]]) 16:44, 5 August 2026 (UTC)
* This is extremely important to me. It's much easier and more readable for someone to write a couple lines of code rather than calling 10 functions. [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 06:49, 7 August 2026 (UTC)
* ''Sign here''
=== Allow clearing cache in WF/AW ===
: Add a way to clear the cache for a function given a certain input(s). For example, if a function takes a QID and a language, I might want to clear the cache for all outputs that take the French language or Q90 in.
* [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 00:48, 13 August 2026 (UTC)
* [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 09:34, 13 August 2026 (UTC) I sometime use direct URL links where I have to fill in the correct Qid or Zid.
* [[User:Carnildo|Carnildo]] ([[User talk:Carnildo|talk]]) 08:25, 15 August 2026 (UTC) This would really, really help when writing test cases. As it stands, if a test case fails for the wrong reasons (such as a missing lexeme link on Wikidata), I need to wait for the cached failure to expire before I can continue writing it.
* ''Sign here''
=== Example: Thing to fix (copy me!) ===
: What it would involve, and why it would be valuable.
* ''Sign here''
== Thank you! ==
It was great to speak to and hear from so many of you.
hg2qb11i4nxrvgxjtjwcnlv07npf09k
Z39191
0
89777
299608
298429
2026-08-15T11:31:22Z
99of9
1622
299608
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39191"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39191K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39191K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39191K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39191K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z39193",
"Z39206",
"Z39207",
"Z39208"
],
"Z8K4": [
"Z14",
"Z39192"
],
"Z8K5": "Z39191"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence from Wikidata"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"shares border with-sentence (HTML)"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
apiu45e09gbjrkc5qjbhca6mhmp5ykj
299610
299608
2026-08-15T11:36:29Z
99of9
1622
299610
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39191"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39191K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39191K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39191K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39191K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z39193",
"Z39206",
"Z39207",
"Z39208"
],
"Z8K4": [
"Z14",
"Z39192"
],
"Z8K5": "Z39191"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence from Wikidata"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"shares border with-sentence (HTML)",
"auto-borders sentence",
"auto-sentence for borders"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
9fuyprcrlnztqad5q6p3dz2od4le18j
299616
299610
2026-08-15T11:44:19Z
99of9
1622
Added Z39483 to the approved list of implementations
299616
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39191"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39191K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39191K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39191K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39191K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z39193",
"Z39206",
"Z39207",
"Z39208"
],
"Z8K4": [
"Z14",
"Z39192",
"Z39483"
],
"Z8K5": "Z39191"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence from Wikidata"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"shares border with-sentence (HTML)",
"auto-borders sentence",
"auto-sentence for borders"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
9wcu0tcpc65977mn3ejvv6nixveljec
299617
299616
2026-08-15T11:45:29Z
99of9
1622
299617
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39191"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39191K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39191K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39191K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39191K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z39193",
"Z39206",
"Z39207",
"Z39208"
],
"Z8K4": [
"Z14",
"Z39192",
"Z39483"
],
"Z8K5": "Z39191"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence from Wikidata"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"shares border with-sentence (HTML)",
"auto-borders sentence",
"auto-sentence for borders"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "to choose the list of neighbours manually, use Z39481"
}
]
}
}
a4jpcu93iebqumqls36vb9a6773tat0
299618
299617
2026-08-15T11:45:41Z
WikiLambda system
3
Updated the implementation list (see [[Help:Wikifunctions/Implementation_ordering_and_choosing|About implementation selection]])
299618
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39191"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39191K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39191K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39191K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39191K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z39193",
"Z39206",
"Z39207",
"Z39208"
],
"Z8K4": [
"Z14",
"Z39483",
"Z39192"
],
"Z8K5": "Z39191"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence from Wikidata"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"shares border with-sentence (HTML)",
"auto-borders sentence",
"auto-sentence for borders"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "to choose the list of neighbours manually, use Z39481"
}
]
}
}
t1k3naxz4ureafijl6e9wi6l255jhgu
Z39192
0
89778
299527
298304
2026-08-15T05:18:10Z
99of9
1622
switch HTML casting function to prepare for links
299527
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39192"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39191",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z37464",
"Z37464K1": {
"Z1K1": "Z7",
"Z7K1": "Z38425",
"Z38425K1": {
"Z1K1": "Z18",
"Z18K1": "Z39191K1"
},
"Z38425K2": {
"Z1K1": "Z18",
"Z18K1": "Z39191K2"
},
"Z38425K3": {
"Z1K1": "Z18",
"Z18K1": "Z39191K3"
},
"Z38425K4": {
"Z1K1": "Z18",
"Z18K1": "Z39191K4"
}
},
"Z37464K2": {
"Z1K1": "Z6",
"Z6K1": "Z38424"
},
"Z37464K3": [
"Z6091"
],
"Z37464K4": [
"Z6091"
],
"Z37464K5": {
"Z1K1": "Z18",
"Z18K1": "Z39191K4"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence (HTML), comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
26iabnotv710xhvuundpvllyiaah6ps
299530
299527
2026-08-15T05:57:20Z
99of9
1622
299530
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39192"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39191",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z37464",
"Z37464K1": {
"Z1K1": "Z7",
"Z7K1": "Z38425",
"Z38425K1": {
"Z1K1": "Z18",
"Z18K1": "Z39191K1"
},
"Z38425K2": {
"Z1K1": "Z18",
"Z18K1": "Z39191K2"
},
"Z38425K3": {
"Z1K1": "Z18",
"Z18K1": "Z39191K3"
},
"Z38425K4": {
"Z1K1": "Z18",
"Z18K1": "Z39191K4"
}
},
"Z37464K2": {
"Z1K1": "Z6",
"Z6K1": "Z38424"
},
"Z37464K3": {
"Z1K1": "Z7",
"Z7K1": "Z22978",
"Z22978K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z39191K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P47"
}
]
},
"Z22978K2": {
"Z1K1": "Z6092",
"Z6092K1": "P47"
}
},
"Z37464K4": {
"Z1K1": "Z7",
"Z7K1": "Z22978",
"Z22978K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z39191K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P47"
}
]
},
"Z22978K2": {
"Z1K1": "Z6092",
"Z6092K1": "P47"
}
},
"Z37464K5": {
"Z1K1": "Z18",
"Z18K1": "Z39191K4"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence (HTML), comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
crqsfxy6fecsn9gpejemaolflnzfqv8
299609
299530
2026-08-15T11:35:44Z
99of9
1622
fix for new signature
299609
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39192"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39191",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z37464",
"Z37464K1": {
"Z1K1": "Z7",
"Z7K1": "Z38425",
"Z38425K1": {
"Z1K1": "Z18",
"Z18K1": "Z39191K1"
},
"Z38425K2": {
"Z1K1": "Z7",
"Z7K1": "Z22978",
"Z22978K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z39191K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P47"
}
]
},
"Z22978K2": {
"Z1K1": "Z6092",
"Z6092K1": "P47"
}
},
"Z38425K3": {
"Z1K1": "Z18",
"Z18K1": "Z39191K2"
},
"Z38425K4": {
"Z1K1": "Z18",
"Z18K1": "Z39191K3"
},
"Z38425K5": {
"Z1K1": "Z18",
"Z18K1": "Z39191K4"
}
},
"Z37464K2": {
"Z1K1": "Z6",
"Z6K1": "Z38424"
},
"Z37464K3": {
"Z1K1": "Z7",
"Z7K1": "Z22978",
"Z22978K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z39191K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P47"
}
]
},
"Z22978K2": {
"Z1K1": "Z6092",
"Z6092K1": "P47"
}
},
"Z37464K4": {
"Z1K1": "Z7",
"Z7K1": "Z22978",
"Z22978K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z39191K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P47"
}
]
},
"Z22978K2": {
"Z1K1": "Z6092",
"Z6092K1": "P47"
}
},
"Z37464K5": {
"Z1K1": "Z18",
"Z18K1": "Z39191K4"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence (HTML), comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
0qnapvc027wgiikq6errjdiec0aw4xd
Z39193
0
89779
299532
298455
2026-08-15T05:59:00Z
99of9
1622
links
299532
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39193"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39191",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39191",
"Z39191K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q582"
},
"Z39191K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39191K3": {
"Z1K1": "Z6091",
"Z6091K1": "Q192613"
},
"Z39191K4": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z877",
"Z877K2": {
"Z1K1": "Z89",
"Z89K1": "Villeurbanne shares borders with \u003Ca href=\"https://abstract.wikipedia.org/wiki/Q1291\"\u003EBron\u003C/a\u003E, \u003Ca href=\"https://abstract.wikipedia.org/wiki/Q244717\"\u003ECaluire-et-Cuire\u003C/a\u003E, \u003Ca href=\"https://abstract.wikipedia.org/wiki/Q456\"\u003ELyon\u003C/a\u003E and \u003Ca href=\"https://abstract.wikipedia.org/wiki/Q13596\"\u003EVaulx-en-Velin\u003C/a\u003E."
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Villeurbanne shares borders, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
8tzznnq1af2ts8xpy2nwcy1m8h8096p
Z39206
0
89793
299531
298354
2026-08-15T05:58:17Z
99of9
1622
link
299531
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39206"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39191",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39191",
"Z39191K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q1013"
},
"Z39191K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39191K3": {
"Z1K1": "Z6091",
"Z6091K1": "Q192613"
},
"Z39191K4": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z877",
"Z877K2": {
"Z1K1": "Z89",
"Z89K1": "Lesotho shares a border with \u003Ca href=\"https://abstract.wikipedia.org/wiki/Q258\"\u003ESouth Africa\u003C/a\u003E."
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "[en] Lesotho shares a border with South Africa."
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Test case for a single border"
}
]
}
}
bdchxp3p7u9cplf1sjdsvrlftt768lp
Z39207
0
89794
299533
298356
2026-08-15T05:59:49Z
99of9
1622
299533
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39207"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39191",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39191",
"Z39191K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q812"
},
"Z39191K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39191K3": {
"Z1K1": "Z6091",
"Z6091K1": "Q192613"
},
"Z39191K4": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z877",
"Z877K2": {
"Z1K1": "Z89",
"Z89K1": "Florida shares borders with \u003Ca href=\"https://abstract.wikipedia.org/wiki/Q1428\"\u003EGeorgia\u003C/a\u003E and \u003Ca href=\"https://abstract.wikipedia.org/wiki/Q173\"\u003EAlabama\u003C/a\u003E."
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "[en] Florida shares a border with..."
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Test case for two borders"
}
]
}
}
3he14cy9idemcllo8j8tfmy9yv104v8
Z39208
0
89795
299534
298357
2026-08-15T06:00:25Z
99of9
1622
299534
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39208"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39191",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39191",
"Z39191K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q298"
},
"Z39191K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39191K3": {
"Z1K1": "Z6091",
"Z6091K1": "Q192613"
},
"Z39191K4": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z877",
"Z877K2": {
"Z1K1": "Z89",
"Z89K1": "Chile shares borders with \u003Ca href=\"https://abstract.wikipedia.org/wiki/Q414\"\u003EArgentina\u003C/a\u003E, \u003Ca href=\"https://abstract.wikipedia.org/wiki/Q750\"\u003EBolivia\u003C/a\u003E and \u003Ca href=\"https://abstract.wikipedia.org/wiki/Q419\"\u003EPeru\u003C/a\u003E."
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "[en] Chile shares borders with ...[3]"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Test case for list of borders"
}
]
}
}
l6jh8xxacg97dj0d8ad83u4f7wamciz
Wikifunctions:Status updates/2026-08-13
4
89940
299423
299229
2026-08-14T17:45:47Z
Lucas Werkmeister
53
/* Recent Changes in the software */ fix missing full stop
299423
wikitext
text/x-wiki
<languages/>
{{Wikifunctions updates
| prevlabel = <translate><!--T:1--> Previous update</translate>
| prev = 2026-08-05
| nextlabel = <translate><!--T:2--> Next update</translate>
| next =
}}
<translate>
=== Shoutout to User:99of9 === <!--T:3-->
<!--T:30-->
[[<tvar name="1">User:99of9</tvar>|User:99of9]], also known as Toby Hudson, has been a remarkable contributor to Wikifunctions and Abstract Wikipedia. Not just through his editing work, but also through his outreach work at events such as WikiCon Australia and his consistent calm and supportive engagement in several channels around our projects. Thank you, Toby!
<!--T:4-->
In the last few weeks, [[<tvar name="1">User:SephyPHC</tvar>|an Igbo contributor]] was asking in [[<tvar name="2">Special:MyLanguage/Wikifunctions:Report a technical problem#Discuss with others</tvar>|our chat channel]] for help on how to make Abstract Wikipedia work for their language. Our documentation still has some room for improvement on this topic. But Toby stepped forward to this opportunity and was supportive, friendly, and helped the contributor to go through all the steps from understanding the system to creating tests to writing functions and labels to connecting the functions in the relevant configurations and seeing the results.
<!--T:5-->
Honestly, one could probably just go through the chat logs and use this conversation in order to create a tutorial right away.
<!--T:6-->
Thank you, Toby! This is amazing to see. Thank you for being a pillar of this nascent Wikimedia community!
=== Document for communities to express interest in Abstract Wikipedia === <!--T:7-->
<!--T:31-->
If your language community, or one you know, is interested in exploring Abstract Wikipedia, we have created an [[<tvar name="1">:abstract:Special:MyLanguage/Abstract Wikipedia:For interested communities</tvar>|initial page]] outlining what to expect, what participation might involve, and how to express interest. We look forward to hearing from you!
=== Quotes from Wikimania === <!--T:8-->
<!--T:9-->
I promise, this is the last larger piece about [[<tvar name="1">:wikimania:Special:MyLanguage/2026:Wikimania</tvar>|this year’s Wikimania]] from our side!
<!--T:10-->
But I wanted to highlight a few quotes from the opening session, and one more highlight.
<!--T:11-->
Here are a few quotes from Wikimedia CEO [[<tvar name="1">:en:Bernadette Meehan</tvar>|Bernadette Meehan]]’s speech at the opening session.</translate>
<blockquote><translate><!--T:12-->
“We should ensure that AI serves ''our'' mission – not the other way around. We have a responsibility to protect what makes Wikimedia unique: human-centered knowledge, community governance, neutrality, transparency, and verifiability. … ''We'' should help shape the AI ecosystem that values trusted knowledge, responsible human contribution, and expands access to knowledge for everyone around the world. AI does not define Wikimedia, but Wikimedia can help define how AI serves humanity.
<!--T:13-->
“Wikimedia’s future will be shaped not only by our longest-established and most mature communities, but also by the places where millions of new users are coming online every single day: in Asia, in India, in the Middle East, in Africa, in Latin America. All around the world in established and emerging communities we need to ask ourselves: how do we make Wikimedia relevant to new generations? How do we bring Wikimedia and our content to people? In the new places, where they are searching for knowledge? How do we create more ways for people to participate in our projects?”</translate></blockquote>
<translate><!--T:14--> Another speech at the opening session was given by [[<tvar name="1">:en:Mariya Gabriel</tvar>|Mariya Gabriel]], Assistant Director-General for Communication and Information at UNESCO:</translate>
<blockquote><translate><!--T:15-->
“Knowledge is only truly universal when everyone has the opportunity not only to access it, but also to shape it. Yet today’s digital world does not reflect the full richness of humanity. Too many voices remain unheard, too many communities remain underrepresented, too many languages are still absent from our digital spaces. And when a language disappears from the Internet we lose far more than words. We lose memory, culture, identity, and unique ways of understanding our world. In the age of artificial intelligence, this challenge has become even more urgent. AI systems learn from the knowledge we make available. If that knowledge only reflects only a handful of languages, cultures, or perspectives, the technology of tomorrow will reproduce the inequalities of today.
<!--T:16-->
“This is why UNESCO has made multilingualism a strategic priority. We believe that every community should be able to access, create, and share knowledge in its own language.”
<!--T:17-->
“Hundreds of language editions show that knowledge becomes richer when more communities participate. Every new contributor, every new language, every new perspective strengthens our shared understanding of the world.”</translate></blockquote>
<translate><!--T:18-->
And the last highlight from Wikimania I want to share was meeting a contributor from Nigeria, [[<tvar name="1">User:Friday musa</tvar>|Friday musa]], who said that he spoke '''fourteen languages'''! [[<tvar name="2">:en:Tyap</tvar>|Tyap]], [[<tvar name="3">:en:Jju language</tvar>|Jju]], [[<tvar name="4">:en:Berom language</tvar>|Berom]], [[<tvar name="5">:en:Hyam language</tvar>|Hyam]], [[<tvar name="6">:en:Idoma language</tvar>|Idoma]], [[<tvar name="7">:en:Ngas language</tvar>|Ngas]], [[<tvar name="8">:en:Gwari language</tvar>|Gwari]], [[<tvar name="9">:en:Hausa language</tvar>|Hausa]], [[<tvar name="10">:en:Yoruba language</tvar>|Yoruba]], [[<tvar name="11">:en:Igbo language</tvar>|Igbo]], as well as [[<tvar name="12">:en:Kambari languages</tvar>|Kambari]] and [[<tvar name="13">:en:Adara language</tvar>|Adara]], and, fortunately for me, [[<tvar name="14">:en:French language</tvar>|French]] and [[<tvar name="15">:en:English language</tvar>|English]]. Wow!
<!--T:19-->
And that’s it about Wikimania 2026. Thanks to all the organizers, volunteers and staff, who made this event happen!
=== Recent Changes in the software === <!--T:20-->
<!--T:32-->
As part of our work to guide people creating effective NLG Functions, we added a system to show warnings when something doesn't fail, but comes close (<tvar name="1">[[:phab:T427112|T427112]]</tvar>). For now these warnings are only shown on Wikifunctions (not in embedded context or in Abstract Wikipedia), and they're initially limited to cases where a function uses lots of CPU or memory. We're planning to expand this to more cases like Functions making many sub-calls or fetching Wikidata items that partially fail. When you encounter these warnings, we'd love to hear how well they communicate the issues involved.
<!--T:21-->
We also shortened the length of time that Commons file data is cached, which will mean that old thumb titles (which break swiftly) won't be used for more than a day after the Commons file is renamed; thank you [[<tvar name="1">User:99of9</tvar>|User:99of9]] for reporting (<tvar name="2">[[:phab:T433448|T433448]]</tvar>).
<!--T:22-->
We've landed an upgrade to the back-end code runner version of JavaScript, from an old build of QuickJS to a more modern one of QuickJS-NG that should run slightly faster (<tvar name="1">[[:phab:T353155|T353155]]</tvar> and <tvar name="2">[[:phab:T432522|T432522]]</tvar>). We've also sped up the Python runner boot times by ~50%, which should mean fewer times when the system is over-loaded by too many runs.
<!--T:23-->
Additionally, we fixed a bug where the messages for seeing Wikifunctions edits in RecentChanges only worked in JavaScript mode; thank you [[<tvar name="1">User:Taylor 49</tvar>|User:Taylor 49]] for finding, and [[<tvar name="2">User:Amire80</tvar>|User:Amire80]] for reporting (<tvar name="3">[[:phab:T433309|T433309]]</tvar>). And finally, based on issues some of you encountered when using certain languages, we did an audit of mismatches between the languages inside Wikifunctions and in the Language team's "ULS" system. As a first part, we're adding 20 new languages (Z2054–Z2073), and adjusting the main language code for Z1782 from cbk-zam to cbk (with cbk-zam as a fallback value). Expect more soon!
=== News in Types: Wikifunctions object reference in the works === <!--T:24-->
<!--T:33-->
We have started implementing the [[<tvar name="1">Wikifunctions:Type proposals/Wikifunctions object reference</tvar>|Wikifunctions object reference]]. Because this might become a foundational type, we will [<tvar name="2">https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/merge_requests/400</tvar> add it through function-schemata] instead of the usual type creation way. We are currently thinking of adding it as Z96 – a reference that is really a string.
<!--T:25-->
We invite you all to create new and discuss the existing [[<tvar name="1">Wikifunctions:Type proposals</tvar>|Type proposals]] so we can keep on creating new Types. Thanks to all the community members contributing to the discussion and writing proposals, making it possible to extend Wikifunctions to new domains!
=== Wikifunctions has reached more than 5,000 Functions === <!--T:26-->
<!--T:34-->
I know, I know, following [[<tvar name="1">User:Lydia Pintscher (WMDE)</tvar>|Lydia]]’s law of celebrating arbitrary milestones, we shouldn’t celebrate milestones like these without using them as an opportunity to pause and reflect on the growth that led us to that number. But the newsletter this week was already so long.
<!--T:27-->
But we want to take the opportunity to invite you to share some reflections, until next week Tuesday, August 18. You can send them to me or [[<tvar name="1">User:Sannita (WMF)</tvar>|Luca]] via chat, or leave them on our [[<tvar name="2">User talk:DVrandecic (WMF)</tvar>|talk]] [[<tvar name="3">User talk:Sannita (WMF)</tvar>|pages]]. Based on my counting, the 5,000th Function was <tvar name="4">{{Z|Z38968}}</tvar>.
=== Fresh Functions weekly: 124 new Functions === <!--T:28-->
<!--T:35-->
This week we had 124 new functions. That is really amazing! Here is an incomplete list of functions with implementations and passing tests to get a taste of what functions have been created. Thanks everybody for contributing!</translate>
* {{Z|Z38556}}
* {{Z|Z38557}}
* {{Z|Z38563}}
* {{Z|Z38569}}
* {{Z|Z38573}}
* {{Z|Z38577}}
* {{Z|Z38581}}
* {{Z|Z38586}}
* {{Z|Z38590}}
* {{Z|Z38595}}
* {{Z|Z38598}}
* {{Z|Z38600}}
* {{Z|Z38604}}
* {{Z|Z38610}}
* {{Z|Z38614}}
* {{Z|Z38619}}
* {{Z|Z38620}}
* {{Z|Z38625}}
* {{Z|Z38635}}
* {{Z|Z38638}}
* {{Z|Z38641}}
* {{Z|Z38644}}
* {{Z|Z38645}}
* {{Z|Z38652}}
* {{Z|Z38657}}
* {{Z|Z38660}}
* {{Z|Z38664}}
* {{Z|Z38668}}
* {{Z|Z38672}}
* {{Z|Z38676}}
* {{Z|Z38680}}
* {{Z|Z38684}}
* {{Z|Z38691}}
* {{Z|Z38696}}
* {{Z|Z38700}}
* {{Z|Z38702}}
* {{Z|Z38705}}
* {{Z|Z38709}}
* {{Z|Z38710}}
* {{Z|Z38714}}
* {{Z|Z38723}}
* {{Z|Z38726}}
* {{Z|Z38729}}
* {{Z|Z38734}}
* {{Z|Z38735}}
* {{Z|Z38739}}
* {{Z|Z38745}}
* {{Z|Z38748}}
* {{Z|Z38752}}
* {{Z|Z38757}}
* {{Z|Z38761}}
* {{Z|Z38765}}
* {{Z|Z38771}}
* {{Z|Z38772}}
* {{Z|Z38775}}
* {{Z|Z38778}}
* {{Z|Z38782}}
* {{Z|Z38788}}
* {{Z|Z38795}}
* {{Z|Z38799}}
* {{Z|Z38804}}
* {{Z|Z38808}}
* {{Z|Z38814}}
* {{Z|Z38829}}
* {{Z|Z38833}}
* {{Z|Z38839}}
* {{Z|Z38844}}
* {{Z|Z38857}}
* {{Z|Z38860}}
* {{Z|Z38864}}
* {{Z|Z38869}}
* {{Z|Z38870}}
* {{Z|Z38873}}
* {{Z|Z38876}}
* {{Z|Z38881}}
* {{Z|Z38886}}
* {{Z|Z38888}}
* {{Z|Z38892}}
* {{Z|Z38893}}
* {{Z|Z38899}}
* {{Z|Z38908}}
* {{Z|Z38916}}
* {{Z|Z38923}}
* {{Z|Z38926}}
* {{Z|Z38929}}
* {{Z|Z38933}}
* {{Z|Z38942}}
* {{Z|Z38945}}
* {{Z|Z38948}}
* {{Z|Z38949}}
* {{Z|Z38953}}
* {{Z|Z38956}}
* {{Z|Z38959}}
* {{Z|Z38964}}
* {{Z|Z38968}}
* {{Z|Z38973}}
* {{Z|Z38975}}
* {{Z|Z38980}}
* {{Z|Z38985}}
* {{Z|Z38987}}
* {{Z|Z38994}}
* {{Z|Z39000}}
* {{Z|Z39011}}
* {{Z|Z39018}}
* {{Z|Z39024}}
* {{Z|Z39027}}
* {{Z|Z39036}}
* {{Z|Z39043}}
* {{Z|Z39047}}
* {{Z|Z39050}}
* {{Z|Z39053}}
* {{Z|Z39073}}
* {{Z|Z39080}}
<translate><!--T:29--> A [<tvar name="1">https://www.wikifunctions.org/wiki/Special:ListObjectsByType?type=Z8&orderby=latest</tvar> complete list of all functions sorted by when they were created] is available.</translate>
[[Category:Status updates{{#translation:}}|2026-08-13]]
ig769khj67hprg3ylu4s1tkztxqmoqu
Wikifunctions:Status updates/2026-08-13/de
4
90072
299552
299246
2026-08-15T08:03:11Z
Ameisenigel
44
Created page with "=== Dokument für Communitys zur Bekundung ihres Interesses an der Abstrakten Wikipedia ==="
299552
wikitext
text/x-wiki
<languages/>
{{Wikifunctions updates
| prevlabel = Vorheriges Update
| prev = 2026-08-05
| nextlabel = Nächstes Update
| next =
}}
<span id="Shoutout_to_User:99of9"></span>
=== Lob an Benutzer:99of9 ===
[[User:99of9|Benutzer:99of9]], auch bekannt als Toby Hudson, hat herausragende Beiträge zu Wikifunctions und zur Abstrakten Wikipedia geleistet. Dies gilt nicht nur für seine Arbeit an den Inhalten, sondern auch für sein Engagement bei Veranstaltungen wie der WikiCon Australien sowie für sein stets ruhiges und unterstützendes Auftreten in verschiedenen Kanälen rund um unsere Projekte. Danke, Toby!
In den letzten Wochen bat [[User:SephyPHC|ein Igbo-Beitragender]] in [[Special:MyLanguage/Wikifunctions:Report a technical problem#Discuss with others|unserem Chat-Kanal]] um Hilfe dabei, die Abstrakte Wikipedia für seine Sprache nutzbar zu machen. Unsere Dokumentation bietet in diesem Punkt noch Verbesserungspotenzial. Doch Toby nahm sich der Sache an: Er war hilfsbereit und freundlich und unterstützte den Beitragenden bei allen Schritten, vom Verständnis des Systems über das Erstellen von Tests, das Schreiben von Funktionen und Bezeichnungen bis hin zur Verknüpfung der Funktionen in den entsprechenden Konfigurationen und der Betrachtung der Ergebnisse.
Ehrlich gesagt könnte man wahrscheinlich einfach die Chat-Protokolle durchgehen und dieses Gespräch nutzen, um direkt ein Tutorial zu erstellen.
Danke, Toby! Es ist großartig, das zu sehen. Danke, dass du eine Stütze dieser noch jungen Wikimedia-Community bist!
<span id="Document_for_communities_to_express_interest_in_Abstract_Wikipedia"></span>
=== Dokument für Communitys zur Bekundung ihres Interesses an der Abstrakten Wikipedia ===
<div lang="en" dir="ltr" class="mw-content-ltr">
If your language community, or one you know, is interested in exploring Abstract Wikipedia, we have created an [[:abstract:Special:MyLanguage/Abstract Wikipedia:For interested communities|initial page]] outlining what to expect, what participation might involve, and how to express interest. We look forward to hearing from you!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Quotes from Wikimania ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
I promise, this is the last larger piece about [[:wikimania:Special:MyLanguage/2026:Wikimania|this year’s Wikimania]] from our side!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
But I wanted to highlight a few quotes from the opening session, and one more highlight.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Here are a few quotes from Wikimedia CEO [[:en:Bernadette Meehan|Bernadette Meehan]]’s speech at the opening session.
</div>
<blockquote><div lang="en" dir="ltr" class="mw-content-ltr">
“We should ensure that AI serves ''our'' mission – not the other way around. We have a responsibility to protect what makes Wikimedia unique: human-centered knowledge, community governance, neutrality, transparency, and verifiability. … ''We'' should help shape the AI ecosystem that values trusted knowledge, responsible human contribution, and expands access to knowledge for everyone around the world. AI does not define Wikimedia, but Wikimedia can help define how AI serves humanity.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
“Wikimedia’s future will be shaped not only by our longest-established and most mature communities, but also by the places where millions of new users are coming online every single day: in Asia, in India, in the Middle East, in Africa, in Latin America. All around the world in established and emerging communities we need to ask ourselves: how do we make Wikimedia relevant to new generations? How do we bring Wikimedia and our content to people? In the new places, where they are searching for knowledge? How do we create more ways for people to participate in our projects?”
</div></blockquote>
<span lang="en" dir="ltr" class="mw-content-ltr">Another speech at the opening session was given by [[:en:Mariya Gabriel|Mariya Gabriel]], Assistant Director-General for Communication and Information at UNESCO:</span>
<blockquote><div lang="en" dir="ltr" class="mw-content-ltr">
“Knowledge is only truly universal when everyone has the opportunity not only to access it, but also to shape it. Yet today’s digital world does not reflect the full richness of humanity. Too many voices remain unheard, too many communities remain underrepresented, too many languages are still absent from our digital spaces. And when a language disappears from the Internet we lose far more than words. We lose memory, culture, identity, and unique ways of understanding our world. In the age of artificial intelligence, this challenge has become even more urgent. AI systems learn from the knowledge we make available. If that knowledge only reflects only a handful of languages, cultures, or perspectives, the technology of tomorrow will reproduce the inequalities of today.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
“This is why UNESCO has made multilingualism a strategic priority. We believe that every community should be able to access, create, and share knowledge in its own language.”
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
“Hundreds of language editions show that knowledge becomes richer when more communities participate. Every new contributor, every new language, every new perspective strengthens our shared understanding of the world.”
</div></blockquote>
<div lang="en" dir="ltr" class="mw-content-ltr">
And the last highlight from Wikimania I want to share was meeting a contributor from Nigeria, [[User:Friday musa|Friday musa]], who said that he spoke '''fourteen languages'''! [[:en:Tyap|Tyap]], [[:en:Jju language|Jju]], [[:en:Berom language|Berom]], [[:en:Hyam language|Hyam]], [[:en:Idoma language|Idoma]], [[:en:Ngas language|Ngas]], [[:en:Gwari language|Gwari]], [[:en:Hausa language|Hausa]], [[:en:Yoruba language|Yoruba]], [[:en:Igbo language|Igbo]], as well as [[:en:Kambari languages|Kambari]] and [[:en:Adara language|Adara]], and, fortunately for me, [[:en:French language|French]] and [[:en:English language|English]]. Wow!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
And that’s it about Wikimania 2026. Thanks to all the organizers, volunteers and staff, who made this event happen!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Recent Changes in the software ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
As part of our work to guide people creating effective NLG Functions, we added a system to show warnings when something doesn't fail, but comes close ([[:phab:T427112|T427112]]). For now these warnings are only shown on Wikifunctions (not in embedded context or in Abstract Wikipedia), and they're initially limited to cases where a function uses lots of CPU or memory. We're planning to expand this to more cases like Functions making many sub-calls or fetching Wikidata items that partially fail. When you encounter these warnings, we'd love to hear how well they communicate the issues involved.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We also shortened the length of time that Commons file data is cached, which will mean that old thumb titles (which break swiftly) won't be used for more than a day after the Commons file is renamed; thank you [[User:99of9|User:99of9]] for reporting ([[:phab:T433448|T433448]]).
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We've landed an upgrade to the back-end code runner version of JavaScript, from an old build of QuickJS to a more modern one of QuickJS-NG that should run slightly faster ([[:phab:T353155|T353155]] and [[:phab:T432522|T432522]]). We've also sped up the Python runner boot times by ~50%, which should mean fewer times when the system is over-loaded by too many runs
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Additionally, we fixed a bug where the messages for seeing Wikifunctions edits in RecentChanges only worked in JavaScript mode; thank you [[User:Taylor 49|User:Taylor 49]] for finding, and [[User:Amire80|User:Amire80]] for reporting ([[:phab:T433309|T433309]]). And finally, based on issues some of you encountered when using certain languages, we did an audit of mismatches between the languages inside Wikifunctions and in the Language team's "ULS" system. As a first part, we're adding 20 new languages (Z2054–Z2073), and adjusting the main language code for Z1782 from cbk-zam to cbk (with cbk-zam as a fallback value). Expect more soon!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== News in Types: Wikifunctions object reference in the works ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We have started implementing the [[Wikifunctions:Type proposals/Wikifunctions object reference|Wikifunctions object reference]]. Because this might become a foundational type, we will [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/merge_requests/400 add it through function-schemata] instead of the usual type creation way. We are currently thinking of adding it as Z96 – a reference that is really a string.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We invite you all to create new and discuss the existing [[Wikifunctions:Type proposals|Type proposals]] so we can keep on creating new Types. Thanks to all the community members contributing to the discussion and writing proposals, making it possible to extend Wikifunctions to new domains!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Wikifunctions has reached more than 5,000 Functions ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
I know, I know, following [[User:Lydia Pintscher (WMDE)|Lydia]]’s law of celebrating arbitrary milestones, we shouldn’t celebrate milestones like these without using them as an opportunity to pause and reflect on the growth that led us to that number. But the newsletter this week was already so long.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
But we want to take the opportunity to invite you to share some reflections, until next week Tuesday, August 18. You can send them to me or [[User:Sannita (WMF)|Luca]] via chat, or leave them on our [[User talk:DVrandecic (WMF)|talk]] [[User talk:Sannita (WMF)|pages]]. Based on my counting, the 5,000th Function was {{Z|Z38968}}.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Fresh Functions weekly: 124 new Functions ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This week we had 124 new functions. That is really amazing! Here is an incomplete list of functions with implementations and passing tests to get a taste of what functions have been created. Thanks everybody for contributing!
</div>
* {{Z|Z38556}}
* {{Z|Z38557}}
* {{Z|Z38563}}
* {{Z|Z38569}}
* {{Z|Z38573}}
* {{Z|Z38577}}
* {{Z|Z38581}}
* {{Z|Z38586}}
* {{Z|Z38590}}
* {{Z|Z38595}}
* {{Z|Z38598}}
* {{Z|Z38600}}
* {{Z|Z38604}}
* {{Z|Z38610}}
* {{Z|Z38614}}
* {{Z|Z38619}}
* {{Z|Z38620}}
* {{Z|Z38625}}
* {{Z|Z38635}}
* {{Z|Z38638}}
* {{Z|Z38641}}
* {{Z|Z38644}}
* {{Z|Z38645}}
* {{Z|Z38652}}
* {{Z|Z38657}}
* {{Z|Z38660}}
* {{Z|Z38664}}
* {{Z|Z38668}}
* {{Z|Z38672}}
* {{Z|Z38676}}
* {{Z|Z38680}}
* {{Z|Z38684}}
* {{Z|Z38691}}
* {{Z|Z38696}}
* {{Z|Z38700}}
* {{Z|Z38702}}
* {{Z|Z38705}}
* {{Z|Z38709}}
* {{Z|Z38710}}
* {{Z|Z38714}}
* {{Z|Z38723}}
* {{Z|Z38726}}
* {{Z|Z38729}}
* {{Z|Z38734}}
* {{Z|Z38735}}
* {{Z|Z38739}}
* {{Z|Z38745}}
* {{Z|Z38748}}
* {{Z|Z38752}}
* {{Z|Z38757}}
* {{Z|Z38761}}
* {{Z|Z38765}}
* {{Z|Z38771}}
* {{Z|Z38772}}
* {{Z|Z38775}}
* {{Z|Z38778}}
* {{Z|Z38782}}
* {{Z|Z38788}}
* {{Z|Z38795}}
* {{Z|Z38799}}
* {{Z|Z38804}}
* {{Z|Z38808}}
* {{Z|Z38814}}
* {{Z|Z38829}}
* {{Z|Z38833}}
* {{Z|Z38839}}
* {{Z|Z38844}}
* {{Z|Z38857}}
* {{Z|Z38860}}
* {{Z|Z38864}}
* {{Z|Z38869}}
* {{Z|Z38870}}
* {{Z|Z38873}}
* {{Z|Z38876}}
* {{Z|Z38881}}
* {{Z|Z38886}}
* {{Z|Z38888}}
* {{Z|Z38892}}
* {{Z|Z38893}}
* {{Z|Z38899}}
* {{Z|Z38908}}
* {{Z|Z38916}}
* {{Z|Z38923}}
* {{Z|Z38926}}
* {{Z|Z38929}}
* {{Z|Z38933}}
* {{Z|Z38942}}
* {{Z|Z38945}}
* {{Z|Z38948}}
* {{Z|Z38949}}
* {{Z|Z38953}}
* {{Z|Z38956}}
* {{Z|Z38959}}
* {{Z|Z38964}}
* {{Z|Z38968}}
* {{Z|Z38973}}
* {{Z|Z38975}}
* {{Z|Z38980}}
* {{Z|Z38985}}
* {{Z|Z38987}}
* {{Z|Z38994}}
* {{Z|Z39000}}
* {{Z|Z39011}}
* {{Z|Z39018}}
* {{Z|Z39024}}
* {{Z|Z39027}}
* {{Z|Z39036}}
* {{Z|Z39043}}
* {{Z|Z39047}}
* {{Z|Z39050}}
* {{Z|Z39053}}
* {{Z|Z39073}}
* {{Z|Z39080}}
<span lang="en" dir="ltr" class="mw-content-ltr">A [https://www.wikifunctions.org/wiki/Special:ListObjectsByType?type=Z8&orderby=latest complete list of all functions sorted by when they were created] is available.</span>
[[Category:Status updates{{#translation:}}|2026-08-13]]
p1t19f37nflkw7jzviywjmapnqkgu9l
299554
299552
2026-08-15T08:05:19Z
Ameisenigel
44
Created page with "Wenn deine Sprachcommunity oder eine, die du kennst, daran interessiert ist, die Abstrakte Wikipedia zu erkunden, haben wir eine [[$1|erste Seite]] erstellt, die erläutert, was dich erwartet, wie eine Beteiligung aussehen könnte und wie du dein Interesse bekunden kannst. Wir freuen uns darauf, von dir zu hören!"
299554
wikitext
text/x-wiki
<languages/>
{{Wikifunctions updates
| prevlabel = Vorheriges Update
| prev = 2026-08-05
| nextlabel = Nächstes Update
| next =
}}
<span id="Shoutout_to_User:99of9"></span>
=== Lob an Benutzer:99of9 ===
[[User:99of9|Benutzer:99of9]], auch bekannt als Toby Hudson, hat herausragende Beiträge zu Wikifunctions und zur Abstrakten Wikipedia geleistet. Dies gilt nicht nur für seine Arbeit an den Inhalten, sondern auch für sein Engagement bei Veranstaltungen wie der WikiCon Australien sowie für sein stets ruhiges und unterstützendes Auftreten in verschiedenen Kanälen rund um unsere Projekte. Danke, Toby!
In den letzten Wochen bat [[User:SephyPHC|ein Igbo-Beitragender]] in [[Special:MyLanguage/Wikifunctions:Report a technical problem#Discuss with others|unserem Chat-Kanal]] um Hilfe dabei, die Abstrakte Wikipedia für seine Sprache nutzbar zu machen. Unsere Dokumentation bietet in diesem Punkt noch Verbesserungspotenzial. Doch Toby nahm sich der Sache an: Er war hilfsbereit und freundlich und unterstützte den Beitragenden bei allen Schritten, vom Verständnis des Systems über das Erstellen von Tests, das Schreiben von Funktionen und Bezeichnungen bis hin zur Verknüpfung der Funktionen in den entsprechenden Konfigurationen und der Betrachtung der Ergebnisse.
Ehrlich gesagt könnte man wahrscheinlich einfach die Chat-Protokolle durchgehen und dieses Gespräch nutzen, um direkt ein Tutorial zu erstellen.
Danke, Toby! Es ist großartig, das zu sehen. Danke, dass du eine Stütze dieser noch jungen Wikimedia-Community bist!
<span id="Document_for_communities_to_express_interest_in_Abstract_Wikipedia"></span>
=== Dokument für Communitys zur Bekundung ihres Interesses an der Abstrakten Wikipedia ===
Wenn deine Sprachcommunity oder eine, die du kennst, daran interessiert ist, die Abstrakte Wikipedia zu erkunden, haben wir eine [[:abstract:Special:MyLanguage/Abstract Wikipedia:For interested communities|erste Seite]] erstellt, die erläutert, was dich erwartet, wie eine Beteiligung aussehen könnte und wie du dein Interesse bekunden kannst. Wir freuen uns darauf, von dir zu hören!
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Quotes from Wikimania ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
I promise, this is the last larger piece about [[:wikimania:Special:MyLanguage/2026:Wikimania|this year’s Wikimania]] from our side!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
But I wanted to highlight a few quotes from the opening session, and one more highlight.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Here are a few quotes from Wikimedia CEO [[:en:Bernadette Meehan|Bernadette Meehan]]’s speech at the opening session.
</div>
<blockquote><div lang="en" dir="ltr" class="mw-content-ltr">
“We should ensure that AI serves ''our'' mission – not the other way around. We have a responsibility to protect what makes Wikimedia unique: human-centered knowledge, community governance, neutrality, transparency, and verifiability. … ''We'' should help shape the AI ecosystem that values trusted knowledge, responsible human contribution, and expands access to knowledge for everyone around the world. AI does not define Wikimedia, but Wikimedia can help define how AI serves humanity.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
“Wikimedia’s future will be shaped not only by our longest-established and most mature communities, but also by the places where millions of new users are coming online every single day: in Asia, in India, in the Middle East, in Africa, in Latin America. All around the world in established and emerging communities we need to ask ourselves: how do we make Wikimedia relevant to new generations? How do we bring Wikimedia and our content to people? In the new places, where they are searching for knowledge? How do we create more ways for people to participate in our projects?”
</div></blockquote>
<span lang="en" dir="ltr" class="mw-content-ltr">Another speech at the opening session was given by [[:en:Mariya Gabriel|Mariya Gabriel]], Assistant Director-General for Communication and Information at UNESCO:</span>
<blockquote><div lang="en" dir="ltr" class="mw-content-ltr">
“Knowledge is only truly universal when everyone has the opportunity not only to access it, but also to shape it. Yet today’s digital world does not reflect the full richness of humanity. Too many voices remain unheard, too many communities remain underrepresented, too many languages are still absent from our digital spaces. And when a language disappears from the Internet we lose far more than words. We lose memory, culture, identity, and unique ways of understanding our world. In the age of artificial intelligence, this challenge has become even more urgent. AI systems learn from the knowledge we make available. If that knowledge only reflects only a handful of languages, cultures, or perspectives, the technology of tomorrow will reproduce the inequalities of today.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
“This is why UNESCO has made multilingualism a strategic priority. We believe that every community should be able to access, create, and share knowledge in its own language.”
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
“Hundreds of language editions show that knowledge becomes richer when more communities participate. Every new contributor, every new language, every new perspective strengthens our shared understanding of the world.”
</div></blockquote>
<div lang="en" dir="ltr" class="mw-content-ltr">
And the last highlight from Wikimania I want to share was meeting a contributor from Nigeria, [[User:Friday musa|Friday musa]], who said that he spoke '''fourteen languages'''! [[:en:Tyap|Tyap]], [[:en:Jju language|Jju]], [[:en:Berom language|Berom]], [[:en:Hyam language|Hyam]], [[:en:Idoma language|Idoma]], [[:en:Ngas language|Ngas]], [[:en:Gwari language|Gwari]], [[:en:Hausa language|Hausa]], [[:en:Yoruba language|Yoruba]], [[:en:Igbo language|Igbo]], as well as [[:en:Kambari languages|Kambari]] and [[:en:Adara language|Adara]], and, fortunately for me, [[:en:French language|French]] and [[:en:English language|English]]. Wow!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
And that’s it about Wikimania 2026. Thanks to all the organizers, volunteers and staff, who made this event happen!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Recent Changes in the software ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
As part of our work to guide people creating effective NLG Functions, we added a system to show warnings when something doesn't fail, but comes close ([[:phab:T427112|T427112]]). For now these warnings are only shown on Wikifunctions (not in embedded context or in Abstract Wikipedia), and they're initially limited to cases where a function uses lots of CPU or memory. We're planning to expand this to more cases like Functions making many sub-calls or fetching Wikidata items that partially fail. When you encounter these warnings, we'd love to hear how well they communicate the issues involved.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We also shortened the length of time that Commons file data is cached, which will mean that old thumb titles (which break swiftly) won't be used for more than a day after the Commons file is renamed; thank you [[User:99of9|User:99of9]] for reporting ([[:phab:T433448|T433448]]).
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We've landed an upgrade to the back-end code runner version of JavaScript, from an old build of QuickJS to a more modern one of QuickJS-NG that should run slightly faster ([[:phab:T353155|T353155]] and [[:phab:T432522|T432522]]). We've also sped up the Python runner boot times by ~50%, which should mean fewer times when the system is over-loaded by too many runs
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Additionally, we fixed a bug where the messages for seeing Wikifunctions edits in RecentChanges only worked in JavaScript mode; thank you [[User:Taylor 49|User:Taylor 49]] for finding, and [[User:Amire80|User:Amire80]] for reporting ([[:phab:T433309|T433309]]). And finally, based on issues some of you encountered when using certain languages, we did an audit of mismatches between the languages inside Wikifunctions and in the Language team's "ULS" system. As a first part, we're adding 20 new languages (Z2054–Z2073), and adjusting the main language code for Z1782 from cbk-zam to cbk (with cbk-zam as a fallback value). Expect more soon!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== News in Types: Wikifunctions object reference in the works ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We have started implementing the [[Wikifunctions:Type proposals/Wikifunctions object reference|Wikifunctions object reference]]. Because this might become a foundational type, we will [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/merge_requests/400 add it through function-schemata] instead of the usual type creation way. We are currently thinking of adding it as Z96 – a reference that is really a string.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We invite you all to create new and discuss the existing [[Wikifunctions:Type proposals|Type proposals]] so we can keep on creating new Types. Thanks to all the community members contributing to the discussion and writing proposals, making it possible to extend Wikifunctions to new domains!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Wikifunctions has reached more than 5,000 Functions ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
I know, I know, following [[User:Lydia Pintscher (WMDE)|Lydia]]’s law of celebrating arbitrary milestones, we shouldn’t celebrate milestones like these without using them as an opportunity to pause and reflect on the growth that led us to that number. But the newsletter this week was already so long.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
But we want to take the opportunity to invite you to share some reflections, until next week Tuesday, August 18. You can send them to me or [[User:Sannita (WMF)|Luca]] via chat, or leave them on our [[User talk:DVrandecic (WMF)|talk]] [[User talk:Sannita (WMF)|pages]]. Based on my counting, the 5,000th Function was {{Z|Z38968}}.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Fresh Functions weekly: 124 new Functions ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This week we had 124 new functions. That is really amazing! Here is an incomplete list of functions with implementations and passing tests to get a taste of what functions have been created. Thanks everybody for contributing!
</div>
* {{Z|Z38556}}
* {{Z|Z38557}}
* {{Z|Z38563}}
* {{Z|Z38569}}
* {{Z|Z38573}}
* {{Z|Z38577}}
* {{Z|Z38581}}
* {{Z|Z38586}}
* {{Z|Z38590}}
* {{Z|Z38595}}
* {{Z|Z38598}}
* {{Z|Z38600}}
* {{Z|Z38604}}
* {{Z|Z38610}}
* {{Z|Z38614}}
* {{Z|Z38619}}
* {{Z|Z38620}}
* {{Z|Z38625}}
* {{Z|Z38635}}
* {{Z|Z38638}}
* {{Z|Z38641}}
* {{Z|Z38644}}
* {{Z|Z38645}}
* {{Z|Z38652}}
* {{Z|Z38657}}
* {{Z|Z38660}}
* {{Z|Z38664}}
* {{Z|Z38668}}
* {{Z|Z38672}}
* {{Z|Z38676}}
* {{Z|Z38680}}
* {{Z|Z38684}}
* {{Z|Z38691}}
* {{Z|Z38696}}
* {{Z|Z38700}}
* {{Z|Z38702}}
* {{Z|Z38705}}
* {{Z|Z38709}}
* {{Z|Z38710}}
* {{Z|Z38714}}
* {{Z|Z38723}}
* {{Z|Z38726}}
* {{Z|Z38729}}
* {{Z|Z38734}}
* {{Z|Z38735}}
* {{Z|Z38739}}
* {{Z|Z38745}}
* {{Z|Z38748}}
* {{Z|Z38752}}
* {{Z|Z38757}}
* {{Z|Z38761}}
* {{Z|Z38765}}
* {{Z|Z38771}}
* {{Z|Z38772}}
* {{Z|Z38775}}
* {{Z|Z38778}}
* {{Z|Z38782}}
* {{Z|Z38788}}
* {{Z|Z38795}}
* {{Z|Z38799}}
* {{Z|Z38804}}
* {{Z|Z38808}}
* {{Z|Z38814}}
* {{Z|Z38829}}
* {{Z|Z38833}}
* {{Z|Z38839}}
* {{Z|Z38844}}
* {{Z|Z38857}}
* {{Z|Z38860}}
* {{Z|Z38864}}
* {{Z|Z38869}}
* {{Z|Z38870}}
* {{Z|Z38873}}
* {{Z|Z38876}}
* {{Z|Z38881}}
* {{Z|Z38886}}
* {{Z|Z38888}}
* {{Z|Z38892}}
* {{Z|Z38893}}
* {{Z|Z38899}}
* {{Z|Z38908}}
* {{Z|Z38916}}
* {{Z|Z38923}}
* {{Z|Z38926}}
* {{Z|Z38929}}
* {{Z|Z38933}}
* {{Z|Z38942}}
* {{Z|Z38945}}
* {{Z|Z38948}}
* {{Z|Z38949}}
* {{Z|Z38953}}
* {{Z|Z38956}}
* {{Z|Z38959}}
* {{Z|Z38964}}
* {{Z|Z38968}}
* {{Z|Z38973}}
* {{Z|Z38975}}
* {{Z|Z38980}}
* {{Z|Z38985}}
* {{Z|Z38987}}
* {{Z|Z38994}}
* {{Z|Z39000}}
* {{Z|Z39011}}
* {{Z|Z39018}}
* {{Z|Z39024}}
* {{Z|Z39027}}
* {{Z|Z39036}}
* {{Z|Z39043}}
* {{Z|Z39047}}
* {{Z|Z39050}}
* {{Z|Z39053}}
* {{Z|Z39073}}
* {{Z|Z39080}}
<span lang="en" dir="ltr" class="mw-content-ltr">A [https://www.wikifunctions.org/wiki/Special:ListObjectsByType?type=Z8&orderby=latest complete list of all functions sorted by when they were created] is available.</span>
[[Category:Status updates{{#translation:}}|2026-08-13]]
s7xggns2qj8ykf58ikh9x6ohu3j9v2v
Z39422
0
90091
299366
299348
2026-08-14T12:16:23Z
Jsamwrites
938
Added Z39434 to the approved list of test cases
299366
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39422"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39422K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39422K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features list"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39422K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z39429",
"Z39434"
],
"Z8K4": [
"Z14",
"Z39423"
],
"Z8K5": "Z39422"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "lexical form of Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
f9bkpz3a76zhhvgcbz2xzj0o2z17v36
299371
299366
2026-08-14T12:17:57Z
Jsamwrites
938
Added Z39435 to the approved list of test cases
299371
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39422"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39422K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39422K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features list"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39422K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z39429",
"Z39434",
"Z39435"
],
"Z8K4": [
"Z14",
"Z39423"
],
"Z8K5": "Z39422"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "lexical form of Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
f4z2jo8xj9ey6v8m766w5nz6us2gp89
299387
299371
2026-08-14T12:24:34Z
Jsamwrites
938
Added Z39436 to the approved list of test cases
299387
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39422"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39422K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39422K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features list"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39422K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z39429",
"Z39434",
"Z39435",
"Z39436"
],
"Z8K4": [
"Z14",
"Z39423"
],
"Z8K5": "Z39422"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "lexical form of Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
dhk6yy5mnw4bynqj9g6ur82lqmqv2xu
299440
299387
2026-08-14T20:25:49Z
Jsamwrites
938
Added Z39445 to the approved list of test cases
299440
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39422"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39422K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39422K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features list"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39422K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z39429",
"Z39434",
"Z39435",
"Z39436",
"Z39445"
],
"Z8K4": [
"Z14",
"Z39423"
],
"Z8K5": "Z39422"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "lexical form of Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
9sf09sa6sw2wa9hmklrji4m1w4a2yfh
299454
299440
2026-08-14T20:52:17Z
Carnildo
54460
Add description
299454
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39422"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39422K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39422K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features list"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39422K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z39429",
"Z39434",
"Z39435",
"Z39436",
"Z39445"
],
"Z8K4": [
"Z14",
"Z39423"
],
"Z8K5": "Z39422"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "lexical form of Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Generate a given declension of a Wikidata item in a given language."
}
]
}
}
h1dab5m20nsc90dpydduoq4qg1awmxt
Z39423
0
90092
299426
299350
2026-08-14T18:40:26Z
Jsamwrites
938
Add case with 0 representations
299426
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39423"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39422",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z13676",
"Z13676K1": {
"Z1K1": "Z7",
"Z7K1": "Z12681",
"Z12681K1": {
"Z1K1": "Z7",
"Z7K1": "Z6830",
"Z6830K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z6830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P5137"
},
"Z6830K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z13676K2": {
"Z1K1": "Z13518",
"Z13518K1": "0"
}
},
"Z802K2": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z19279",
"Z19279K1": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z13676",
"Z13676K1": {
"Z1K1": "Z7",
"Z7K1": "Z12681",
"Z12681K1": {
"Z1K1": "Z7",
"Z7K1": "Z39104",
"Z39104K1": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z6830",
"Z6830K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z6830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P5137"
},
"Z6830K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z39104K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K2"
},
"Z39104K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z13676K2": {
"Z1K1": "Z13518",
"Z13518K1": "0"
}
},
"Z802K2": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z39104",
"Z39104K1": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z6830",
"Z6830K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z6830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P5137"
},
"Z6830K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z39104K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K2"
},
"Z39104K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z23753",
"Z23753K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z23753K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
}
}
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z23753",
"Z23753K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z23753K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "lexical form of Wikidata item, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
qnvdblshkiywd7idxfia8kuxn2wrhjk
299429
299426
2026-08-14T18:46:38Z
Jsamwrites
938
Correct type
299429
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39423"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39422",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z13676",
"Z13676K1": {
"Z1K1": "Z7",
"Z7K1": "Z12681",
"Z12681K1": {
"Z1K1": "Z7",
"Z7K1": "Z6830",
"Z6830K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z6830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P5137"
},
"Z6830K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z13676K2": {
"Z1K1": "Z13518",
"Z13518K1": "0"
}
},
"Z802K2": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z19279",
"Z19279K1": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z13676",
"Z13676K1": {
"Z1K1": "Z7",
"Z7K1": "Z12681",
"Z12681K1": {
"Z1K1": "Z7",
"Z7K1": "Z39104",
"Z39104K1": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z6830",
"Z6830K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z6830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P5137"
},
"Z6830K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z39104K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K2"
},
"Z39104K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z13676K2": {
"Z1K1": "Z13518",
"Z13518K1": "0"
}
},
"Z802K2": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z39104",
"Z39104K1": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z6830",
"Z6830K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z6830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P5137"
},
"Z6830K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z39104K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K2"
},
"Z39104K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z26107",
"Z26107K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
},
"Z26107K2": {
"Z1K1": "Z7",
"Z7K1": "Z23753",
"Z23753K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z23753K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
}
}
}
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z26107",
"Z26107K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
},
"Z26107K2": {
"Z1K1": "Z7",
"Z7K1": "Z23753",
"Z23753K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z23753K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "lexical form of Wikidata item, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
aoqr98buwxysef4t2m02z57nwfue0fk
299432
299429
2026-08-14T19:53:25Z
Jsamwrites
938
299432
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39423"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39422",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z13676",
"Z13676K1": {
"Z1K1": "Z7",
"Z7K1": "Z12681",
"Z12681K1": {
"Z1K1": "Z7",
"Z7K1": "Z6830",
"Z6830K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z6830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P5137"
},
"Z6830K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z13676K2": {
"Z1K1": "Z13518",
"Z13518K1": "0"
}
},
"Z802K2": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z19279",
"Z19279K1": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z13676",
"Z13676K1": {
"Z1K1": "Z7",
"Z7K1": "Z12681",
"Z12681K1": {
"Z1K1": "Z7",
"Z7K1": "Z39104",
"Z39104K1": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z6830",
"Z6830K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z6830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P5137"
},
"Z6830K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z39104K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K2"
},
"Z39104K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z13676K2": {
"Z1K1": "Z13518",
"Z13518K1": "0"
}
},
"Z802K2": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z39104",
"Z39104K1": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z6830",
"Z6830K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z6830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P5137"
},
"Z6830K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z39104K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K2"
},
"Z39104K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z31676",
"Z31676K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z31676K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
}
}
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z31676",
"Z31676K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z31676K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "lexical form of Wikidata item, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
3q8j8bm5zbz7q8awuzs27xu9oyrkroc
299439
299432
2026-08-14T20:25:30Z
Jsamwrites
938
299439
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39423"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39422",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z13676",
"Z13676K1": {
"Z1K1": "Z7",
"Z7K1": "Z12681",
"Z12681K1": {
"Z1K1": "Z7",
"Z7K1": "Z6830",
"Z6830K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z6830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P5137"
},
"Z6830K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z13676K2": {
"Z1K1": "Z13518",
"Z13518K1": "0"
}
},
"Z802K2": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z19279",
"Z19279K1": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z13676",
"Z13676K1": {
"Z1K1": "Z7",
"Z7K1": "Z12681",
"Z12681K1": {
"Z1K1": "Z7",
"Z7K1": "Z39104",
"Z39104K1": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z6830",
"Z6830K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z6830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P5137"
},
"Z6830K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z39104K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K2"
},
"Z39104K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z13676K2": {
"Z1K1": "Z13518",
"Z13518K1": "0"
}
},
"Z802K2": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z39104",
"Z39104K1": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z6830",
"Z6830K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z6830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P5137"
},
"Z6830K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z39104K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K2"
},
"Z39104K3": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z35828",
"Z35828K1": [
"Z11",
{
"Z1K1": "Z7",
"Z7K1": "Z31676",
"Z31676K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z31676K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
]
}
}
}
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z31676",
"Z31676K1": {
"Z1K1": "Z18",
"Z18K1": "Z39422K1"
},
"Z31676K2": {
"Z1K1": "Z18",
"Z18K1": "Z39422K3"
}
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "lexical form of Wikidata item, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
77q8nkesb3uew1e0ry4c9g64k9dh863
Z39425
0
90094
299363
299343
2026-08-14T12:16:12Z
Denny
81
Removed Z39426 and Z39427 from the approved list of test cases
299363
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39425"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39425K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39425K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "plural"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39425K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39425K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z39428"
],
"Z8K5": "Z39425"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "form from singular and plural and number"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given a string for the singular and one for the plural, chooses based on the third value which is a grammatical number"
}
]
}
}
tsz9r99ncwh52reaf92sqkiu49uidct
299365
299363
2026-08-14T12:16:13Z
Denny
81
Removed Z39428 from the approved list of implementations
299365
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39425"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39425K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39425K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "plural"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39425K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39425K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39425"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "form from singular and plural and number"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given a string for the singular and one for the plural, chooses based on the third value which is a grammatical number"
}
]
}
}
rozn9f2zdz53fnbqzshf349kv5nd0sc
299367
299365
2026-08-14T12:16:36Z
Denny
81
299367
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39425"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39425K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39425K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "plural"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39425K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39425K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z89"
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39425"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "form from singular and plural and number"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given a string for the singular and one for the plural, chooses based on the third value which is a grammatical number"
}
]
}
}
rzzmvrgnm06vkq8k2ez7n53vmsraxrf
299373
299367
2026-08-14T12:18:46Z
Denny
81
Added Z39426 and Z39427 to the approved list of test cases
299373
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39425"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39425K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39425K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "plural"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39425K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39425K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z89"
},
"Z8K3": [
"Z20",
"Z39426",
"Z39427"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39425"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "form from singular and plural and number"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given a string for the singular and one for the plural, chooses based on the third value which is a grammatical number"
}
]
}
}
0juon72u9qusxh5lxzr6r9v4x76a9qk
299375
299373
2026-08-14T12:20:47Z
Denny
81
Added Z39428 to the approved list of implementations
299375
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39425"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39425K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39425K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "plural"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39425K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39425K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z89"
},
"Z8K3": [
"Z20",
"Z39426",
"Z39427"
],
"Z8K4": [
"Z14",
"Z39428"
],
"Z8K5": "Z39425"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "form from singular and plural and number"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given a string for the singular and one for the plural, chooses based on the third value which is a grammatical number"
}
]
}
}
pyess2emzishcbd31mor87jicitcy42
299388
299375
2026-08-14T12:27:23Z
Denny
81
299388
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39425"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39425K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39425K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "plural"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39425K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39425K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z89"
},
"Z8K3": [
"Z20",
"Z39426",
"Z39427"
],
"Z8K4": [
"Z14",
"Z39428"
],
"Z8K5": "Z39425"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "fragment from singular and plural and number"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given a string for the singular and one for the plural, chooses based on the third value which is a grammatical number, and returns a listed HTML fragment"
}
]
}
}
kbtetgpue7uw8rhu2rz4ldt9dnuoaq1
Z39426
0
90095
299370
299340
2026-08-14T12:17:46Z
Denny
81
299370
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39426"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39425",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39425",
"Z39425K1": "child",
"Z39425K2": "children",
"Z39425K3": {
"Z1K1": "Z6091",
"Z6091K1": "Q110786"
},
"Z39425K4": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z18646",
"Z18646K2": [
"Z89",
{
"Z1K1": "Z89",
"Z89K1": "child"
}
],
"Z18646K3": "Z877"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "child, children, sg -\u003E child"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
rwwez45z0ufnxyhwffv1djp7x6hxuk3
Z39427
0
90096
299372
299341
2026-08-14T12:18:28Z
Denny
81
299372
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39427"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39425",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39425",
"Z39425K1": "Baum",
"Z39425K2": "Bäume",
"Z39425K3": {
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
},
"Z39425K4": "Z1430"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z18646",
"Z18646K2": [
"Z89",
{
"Z1K1": "Z89",
"Z89K1": "Bäume"
}
],
"Z18646K3": "Z877"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Baum, Bäume, pl -\u003E Bäume"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
n5e7clnhwel651fwnflsaziofi0linc
Z39428
0
90097
299374
299335
2026-08-14T12:20:37Z
Denny
81
299374
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39428"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39425",
"Z14K2": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z27868",
"Z27868K1": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z19316",
"Z19316K1": {
"Z1K1": "Z18",
"Z18K1": "Z39425K3"
},
"Z19316K2": {
"Z1K1": "Z6091",
"Z6091K1": "Q110786"
}
},
"Z802K2": {
"Z1K1": "Z18",
"Z18K1": "Z39425K1"
},
"Z802K3": {
"Z1K1": "Z18",
"Z18K1": "Z39425K2"
}
}
}
]
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "if sg return sg else pl"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
1l9zad52696x0ruv1j7zmgs4py700mi
Z39430
0
90099
299352
2026-08-14T12:00:58Z
Denny
81
299352
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39430"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39430K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39430K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39430K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39430"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English form from string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given the singular form, returns the regular plural or just the unchanged singular form, depending on what you ask"
}
]
}
}
dsxly8h92bhx4o5hopfgt7k08e5ppsu
299354
299352
2026-08-14T12:02:03Z
Denny
81
Added Z39431 to the approved list of test cases
299354
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39430"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39430K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39430K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39430K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20",
"Z39431"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39430"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English form from string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given the singular form, returns the regular plural or just the unchanged singular form, depending on what you ask"
}
]
}
}
ogpapollyviotwinoxenzvwgttyr6tl
299356
299354
2026-08-14T12:02:48Z
Denny
81
Added Z39432 to the approved list of test cases
299356
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39430"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39430K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39430K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39430K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20",
"Z39431",
"Z39432"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39430"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English form from string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given the singular form, returns the regular plural or just the unchanged singular form, depending on what you ask"
}
]
}
}
izpj8v1p41q504ccal6jxq5cz84lwac
299358
299356
2026-08-14T12:04:55Z
Denny
81
Added Z39433 to the approved list of implementations
299358
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39430"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39430K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39430K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39430K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20",
"Z39431",
"Z39432"
],
"Z8K4": [
"Z14",
"Z39433"
],
"Z8K5": "Z39430"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English form from string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given the singular form, returns the regular plural or just the unchanged singular form, depending on what you ask"
}
]
}
}
2wv1j0m047x0c95py5ob1nsxnvzpfx5
299376
299358
2026-08-14T12:21:15Z
Denny
81
Removed Z39431 and Z39432 from the approved list of test cases
299376
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39430"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39430K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39430K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39430K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z39433"
],
"Z8K5": "Z39430"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English form from string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given the singular form, returns the regular plural or just the unchanged singular form, depending on what you ask"
}
]
}
}
qn5e8jt1eebp976bl27jpjytpgfzrsm
299377
299376
2026-08-14T12:21:16Z
Denny
81
Removed Z39433 from the approved list of implementations
299377
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39430"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39430K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39430K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39430K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39430"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English form from string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given the singular form, returns the regular plural or just the unchanged singular form, depending on what you ask"
}
]
}
}
dsxly8h92bhx4o5hopfgt7k08e5ppsu
299379
299377
2026-08-14T12:21:32Z
Denny
81
299379
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39430"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39430K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39430K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39430K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z89"
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39430"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English form from string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given the singular form, returns the regular plural or just the unchanged singular form, depending on what you ask"
}
]
}
}
of7wc21w6redbl4ato3eoxe6c7j7qes
299384
299379
2026-08-14T12:22:34Z
Denny
81
Added Z39431 and Z39432 to the approved list of test cases
299384
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39430"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39430K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39430K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39430K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z89"
},
"Z8K3": [
"Z20",
"Z39431",
"Z39432"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39430"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English form from string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given the singular form, returns the regular plural or just the unchanged singular form, depending on what you ask"
}
]
}
}
jkzjfk99tiwt31ffr2gzhhcbgvt2ejz
299386
299384
2026-08-14T12:23:37Z
Denny
81
Added Z39433 to the approved list of implementations
299386
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39430"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39430K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39430K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39430K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z89"
},
"Z8K3": [
"Z20",
"Z39431",
"Z39432"
],
"Z8K4": [
"Z14",
"Z39433"
],
"Z8K5": "Z39430"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English form from string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given the singular form, returns the regular plural or just the unchanged singular form, depending on what you ask"
}
]
}
}
1rfw9dkp90yu7udz26ce0ombqoyqs40
299389
299386
2026-08-14T12:27:55Z
Denny
81
299389
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39430"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39430K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39430K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39430K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z89"
},
"Z8K3": [
"Z20",
"Z39431",
"Z39432"
],
"Z8K4": [
"Z14",
"Z39433"
],
"Z8K5": "Z39430"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English fragment from string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given the singular form, returns the regular plural or just the unchanged singular form, depending on what you ask"
}
]
}
}
qfiht0kga6txn6339ee2rvsxfh8qjsq
299392
299389
2026-08-14T12:32:21Z
Denny
81
299392
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39430"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39430K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "singular"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39430K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39430K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z89"
},
"Z8K3": [
"Z20",
"Z39431",
"Z39432"
],
"Z8K4": [
"Z14",
"Z39433"
],
"Z8K5": "Z39430"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English noun fragment from string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given the singular form, returns the regular plural or just the unchanged singular form, depending on what you ask"
}
]
}
}
bev04ptgar1yat3eqzurye8mgzsv9xw
Z39431
0
90100
299353
2026-08-14T12:01:51Z
Denny
81
299353
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39431"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39430",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39430",
"Z39430K1": "forest",
"Z39430K2": {
"Z1K1": "Z6091",
"Z6091K1": "Q110786"
},
"Z39430K3": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "forest"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "forest, sg -\u003E forest"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
n93kdjr1d6sgtq4ovte1a4xw211gzrv
299380
299353
2026-08-14T12:22:00Z
Denny
81
299380
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39431"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39430",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39430",
"Z39430K1": "forest",
"Z39430K2": {
"Z1K1": "Z6091",
"Z6091K1": "Q110786"
},
"Z39430K3": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z18646",
"Z18646K2": [
"Z89",
{
"Z1K1": "Z89",
"Z89K1": "forest"
}
],
"Z18646K3": "Z877"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "forest, sg -\u003E forest"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
7tpuvixupw4rlegg4m9bedkkagw8c93
Z39432
0
90101
299355
2026-08-14T12:02:36Z
Denny
81
299355
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39432"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39430",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39430",
"Z39430K1": "duty",
"Z39430K2": {
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
},
"Z39430K3": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "duties"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "duty, pl -\u003E duties"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
fp56t15ihspxv1p9q1dzjnjsx7fidno
299382
299355
2026-08-14T12:22:26Z
Denny
81
299382
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39432"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39430",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39430",
"Z39430K1": "duty",
"Z39430K2": {
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
},
"Z39430K3": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z18646",
"Z18646K2": [
"Z89",
{
"Z1K1": "Z89",
"Z89K1": "duties"
}
],
"Z18646K3": "Z877"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "duty, pl -\u003E duties"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
harsdmp3w8glhww2971duxj5sftlsqd
Z39433
0
90102
299357
2026-08-14T12:03:53Z
Denny
81
299357
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39433"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39430",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z19316",
"Z19316K1": {
"Z1K1": "Z18",
"Z18K1": "Z39430K2"
},
"Z19316K2": {
"Z1K1": "Z6091",
"Z6091K1": "Q110786"
}
},
"Z802K2": {
"Z1K1": "Z18",
"Z18K1": "Z39430K1"
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z11089",
"Z11089K1": {
"Z1K1": "Z18",
"Z18K1": "Z39430K1"
}
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "if sg then sg else English plural(sg)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
o1alvkxiagp3cv6185v74o7ezg4vgnz
299385
299357
2026-08-14T12:23:27Z
Denny
81
299385
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39433"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39430",
"Z14K2": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z27868",
"Z27868K1": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z19316",
"Z19316K1": {
"Z1K1": "Z18",
"Z18K1": "Z39430K2"
},
"Z19316K2": {
"Z1K1": "Z6091",
"Z6091K1": "Q110786"
}
},
"Z802K2": {
"Z1K1": "Z18",
"Z18K1": "Z39430K1"
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z11089",
"Z11089K1": {
"Z1K1": "Z18",
"Z18K1": "Z39430K1"
}
}
}
}
]
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "if sg then sg else English plural(sg)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
8lgpymjlnlo6m7xu3h7xlpwmgjjdfzb
Z39434
0
90103
299362
2026-08-14T12:14:38Z
Jsamwrites
938
Create test for Z39422
299362
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39434"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39422",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q7814"
},
"Z39422K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39422K3": {
"Z1K1": "Z6091",
"Z6091K1": "Q192613"
},
"Z39422K4": "Z1002"
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "Giotto is depicted by Five Famous Men of the Florentine Renaissance, Dante Alighieri presenting Giotto to Guido da Polenta and Via veritas."
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "plural,fr, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
ja6itr9bcygj3aux2iwc3d22mb4utln
299364
299362
2026-08-14T12:16:13Z
Jsamwrites
938
299364
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39434"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39422",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q146"
},
"Z39422K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
],
"Z39422K3": "Z1004"
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "chats"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "plural,fr, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
lvcynbvyqc8w0cobzysitg9s0s92z83
Z39435
0
90104
299368
2026-08-14T12:17:01Z
Jsamwrites
938
Create test for Z39422
299368
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39435"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39422",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q146"
},
"Z39422K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
],
"Z39422K3": "Z1002"
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "cats"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "plural,es, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
of3ns38r138wei4tpkidff28mf3ge3x
299369
299368
2026-08-14T12:17:42Z
Jsamwrites
938
299369
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39435"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39422",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q146"
},
"Z39422K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
],
"Z39422K3": "Z1003"
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "gatos"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "plural,es, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
6ht7ngf0eoi7isbdxtb91li5e5v66tv
Z39436
0
90105
299378
2026-08-14T12:21:19Z
Jsamwrites
938
Create test for Z39422
299378
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39436"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39422",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q146"
},
"Z39422K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
],
"Z39422K3": "Z1002"
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "cats"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Higgs boson plural,en, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
kccl4jho0eyihqln5mu9k9pihm44927
299381
299378
2026-08-14T12:22:02Z
Jsamwrites
938
299381
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39436"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39422",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q402"
},
"Z39422K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
],
"Z39422K3": "Z1002"
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "Higgs boson"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Higgs boson plural,en, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
gqde1i0keimuikpb20i8j338b3g03sk
299383
299381
2026-08-14T12:22:31Z
Jsamwrites
938
299383
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39436"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39422",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q402"
},
"Z39422K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
],
"Z39422K3": "Z1002"
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "Higgs bosons"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Higgs boson plural,en, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
p0zihq4k2u03h2aqqx0u4i4kftv6u8f
Z39437
0
90106
299393
2026-08-14T12:35:21Z
Denny
81
299393
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39437"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6095",
"Z17K2": "Z39437K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "lexeme reference"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39437K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39437K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z89"
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39437"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English noun fragment from Lexeme"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given an English noun Lexeme, this creates a function that can select the grammatical number and then returns a listed fragment"
}
]
}
}
03f6xv9zg8gnyky7zhzwmlcryic0gpd
299395
299393
2026-08-14T12:37:25Z
Denny
81
Added Z39438 to the approved list of test cases
299395
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39437"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6095",
"Z17K2": "Z39437K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "lexeme reference"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39437K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39437K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z89"
},
"Z8K3": [
"Z20",
"Z39438"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39437"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English noun fragment from Lexeme"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given an English noun Lexeme, this creates a function that can select the grammatical number and then returns a listed fragment"
}
]
}
}
az9f01op1xkosyqcqotbxhdt9wp1y6g
299397
299395
2026-08-14T12:38:18Z
Denny
81
Added Z39439 to the approved list of test cases
299397
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39437"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6095",
"Z17K2": "Z39437K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "lexeme reference"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39437K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39437K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z89"
},
"Z8K3": [
"Z20",
"Z39438",
"Z39439"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39437"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English noun fragment from Lexeme"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given an English noun Lexeme, this creates a function that can select the grammatical number and then returns a listed fragment"
}
]
}
}
d29c5j98e0wguy3dx14k6u3qpm1baa1
299399
299397
2026-08-14T12:43:19Z
Denny
81
Added Z39440 to the approved list of implementations
299399
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39437"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6095",
"Z17K2": "Z39437K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "lexeme reference"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39437K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical number"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39437K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z89"
},
"Z8K3": [
"Z20",
"Z39438",
"Z39439"
],
"Z8K4": [
"Z14",
"Z39440"
],
"Z8K5": "Z39437"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English noun fragment from Lexeme"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "given an English noun Lexeme, this creates a function that can select the grammatical number and then returns a listed fragment"
}
]
}
}
ar5bmp83u3ldw7ujco4to6x7ynwovl7
Z39438
0
90107
299394
2026-08-14T12:36:52Z
Denny
81
299394
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39438"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39437",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39437",
"Z39437K1": {
"Z1K1": "Z6095",
"Z6095K1": "L3755"
},
"Z39437K2": {
"Z1K1": "Z6091",
"Z6091K1": "Q110786"
},
"Z39437K3": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z18646",
"Z18646K2": [
"Z89",
{
"Z1K1": "Z89",
"Z89K1": "river"
}
],
"Z18646K3": "Z877"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "river, sg -\u003E river"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
kly6a34tbruifehuicfj80va2e90fmf
Z39439
0
90108
299396
2026-08-14T12:38:09Z
Denny
81
299396
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39439"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39437",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39437",
"Z39437K1": {
"Z1K1": "Z6095",
"Z6095K1": "L1409826"
},
"Z39437K2": {
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
},
"Z39437K3": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z18646",
"Z18646K2": [
"Z89",
{
"Z1K1": "Z89",
"Z89K1": "attorneys general"
}
],
"Z18646K3": "Z877"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "attorney general, pl -\u003E attorneys general"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
1zq71na4drx9q10j0i7wuoqkdnvplao
Z39440
0
90109
299398
2026-08-14T12:43:09Z
Denny
81
299398
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39440"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39437",
"Z14K2": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z19316",
"Z19316K1": {
"Z1K1": "Z18",
"Z18K1": "Z39437K2"
},
"Z19316K2": {
"Z1K1": "Z6091",
"Z6091K1": "Q110786"
}
},
"Z802K2": {
"Z1K1": "Z7",
"Z7K1": "Z27868",
"Z27868K1": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z19252",
"Z19252K1": {
"Z1K1": "Z7",
"Z7K1": "Z6825",
"Z6825K1": {
"Z1K1": "Z18",
"Z18K1": "Z39437K1"
}
}
}
}
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z36450",
"Z36450K1": {
"Z1K1": "Z7",
"Z7K1": "Z6825",
"Z6825K1": {
"Z1K1": "Z18",
"Z18K1": "Z39437K1"
}
},
"Z36450K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
]
},
"Z802K2": {
"Z1K1": "Z7",
"Z7K1": "Z27868",
"Z27868K1": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z19260",
"Z19260K1": {
"Z1K1": "Z7",
"Z7K1": "Z6825",
"Z6825K1": {
"Z1K1": "Z18",
"Z18K1": "Z39437K1"
}
}
}
}
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z27868",
"Z27868K1": {
"Z1K1": "Z7",
"Z7K1": "Z11089",
"Z11089K1": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z19252",
"Z19252K1": {
"Z1K1": "Z7",
"Z7K1": "Z6825",
"Z6825K1": {
"Z1K1": "Z18",
"Z18K1": "Z39437K1"
}
}
}
}
}
}
}
}
]
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "with singular and plural functions, and English pl"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
9wtpu1v4ti64ua8yj8awi47al2synis
Z39441
0
90110
299407
2026-08-14T13:40:03Z
99of9
1622
299407
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39441"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z11248",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z11248",
"Z11248K1": "Abia"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "n'Abia"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "n'Abia"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
e1uyzpmskp0kub5y5vc0zmj1n74niqr
Talk:Z39441
1
90111
299409
2026-08-14T13:43:49Z
99of9
1622
/* n'Abia: keep the title case for proper noun? */ new section
299409
wikitext
text/x-wiki
== n'Abia: keep the title case for proper noun? ==
@[[User:Dolphyb|Dolphyb]] is this correct? Maybe we should remove the lowercase in the JS? --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 13:43, 14 August 2026 (UTC)
mlrwbmgwf9bs2p25eb6x7ngtes610by
299430
299409
2026-08-14T19:13:59Z
Dolphyb
121
/* n'Abia: keep the title case for proper noun? */ Reply
299430
wikitext
text/x-wiki
== n'Abia: keep the title case for proper noun? ==
@[[User:Dolphyb|Dolphyb]] is this correct? Maybe we should remove the lowercase in the JS? --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 13:43, 14 August 2026 (UTC)
:@[[User:99of9|99of9]] not really since '''n'Abia''' is starting test case title it should be '''N'abia''' but if it's found inside a sentence it should be '''n'abia''' 19:13, 14 August 2026 (UTC) [[User:Dolphyb|Dolphyb]] ([[User talk:Dolphyb|talk]]) 19:13, 14 August 2026 (UTC)
c69he0j7osvu86yhkbht092141dmbro
299431
299430
2026-08-14T19:35:00Z
Dolphyb
121
/* n'Abia: keep the title case for proper noun? */ Reply
299431
wikitext
text/x-wiki
== n'Abia: keep the title case for proper noun? ==
@[[User:Dolphyb|Dolphyb]] is this correct? Maybe we should remove the lowercase in the JS? --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 13:43, 14 August 2026 (UTC)
:@[[User:99of9|99of9]] not really since '''n'Abia''' is starting test case title it should be '''N'abia''' but if it's found inside a sentence it should be '''n'abia''' 19:13, 14 August 2026 (UTC) [[User:Dolphyb|Dolphyb]] ([[User talk:Dolphyb|talk]]) 19:13, 14 August 2026 (UTC)
::@[[User:99of9|99of9]] I will make some corrections to this later 19:35, 14 August 2026 (UTC) [[User:Dolphyb|Dolphyb]] ([[User talk:Dolphyb|talk]]) 19:35, 14 August 2026 (UTC)
glf5yx5034nmhcp4xw2krinmomvtcjt
Z39442
0
90112
299411
2026-08-14T14:29:42Z
AdrianoRutz
1485
299411
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z13518"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
hvms9ua0s082idvj9lch075wtjzvvme
299413
299411
2026-08-14T14:32:51Z
AdrianoRutz
1485
Added Z39443 to the approved list of implementations
299413
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z13518"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z39443"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
snq9zmt0pedf5x9c1drtq9oxeozgg6j
299433
299413
2026-08-14T19:58:44Z
AdrianoRutz
1485
Removed Z39443 from the approved list of implementations
299433
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z13518"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
hvms9ua0s082idvj9lch075wtjzvvme
299434
299433
2026-08-14T19:59:03Z
AdrianoRutz
1485
299434
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z20838"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
1xnlg4sau92wkavgpksry4ckquk4i7g
299435
299434
2026-08-14T19:59:09Z
AdrianoRutz
1485
Added Z39443 to the approved list of implementations
299435
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z20838"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z39443"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
1e0es1vu0goqwgum7djwq5qpvd6rqrf
299436
299435
2026-08-14T20:14:00Z
AdrianoRutz
1485
Removed Z39443 from the approved list of implementations
299436
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z20838"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
1xnlg4sau92wkavgpksry4ckquk4i7g
299437
299436
2026-08-14T20:14:13Z
AdrianoRutz
1485
299437
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z16683"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
0l7gxtsyhazwcmjvyhtho9g9du404e5
299438
299437
2026-08-14T20:14:48Z
AdrianoRutz
1485
Added Z39443 to the approved list of implementations
299438
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z16683"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z39443"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
aat8llg7mrrgya5cys71r50ze841hre
299441
299438
2026-08-14T20:26:22Z
AdrianoRutz
1485
Removed Z39443 from the approved list of implementations
299441
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z16683"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
0l7gxtsyhazwcmjvyhtho9g9du404e5
299442
299441
2026-08-14T20:26:35Z
AdrianoRutz
1485
299442
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z6"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
ikvdq2l5z91swok7kqyxldezzh58lp1
299443
299442
2026-08-14T20:26:43Z
AdrianoRutz
1485
Added Z39443 to the approved list of implementations
299443
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z6"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z39443"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
dz5ryd9kqr07zaf5dm39dr97nssgcny
299444
299443
2026-08-14T20:31:41Z
AdrianoRutz
1485
Removed Z39443 from the approved list of implementations
299444
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z6"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
ikvdq2l5z91swok7kqyxldezzh58lp1
299445
299444
2026-08-14T20:31:52Z
AdrianoRutz
1485
299445
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z20838"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
1xnlg4sau92wkavgpksry4ckquk4i7g
299446
299445
2026-08-14T20:32:01Z
AdrianoRutz
1485
Added Z39443 to the approved list of implementations
299446
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z20838"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z39443"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
1e0es1vu0goqwgum7djwq5qpvd6rqrf
299447
299446
2026-08-14T20:35:51Z
AdrianoRutz
1485
Removed Z39443 from the approved list of implementations
299447
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z20838"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
1xnlg4sau92wkavgpksry4ckquk4i7g
299448
299447
2026-08-14T20:36:02Z
AdrianoRutz
1485
299448
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z6"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
ikvdq2l5z91swok7kqyxldezzh58lp1
299449
299448
2026-08-14T20:36:16Z
AdrianoRutz
1485
Added Z39443 to the approved list of implementations
299449
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z6"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z39443"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
dz5ryd9kqr07zaf5dm39dr97nssgcny
299453
299449
2026-08-14T20:50:02Z
AdrianoRutz
1485
Removed Z39443 from the approved list of implementations
299453
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39442"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39442K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "formula"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z6"
}
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39442"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"parse chemical formula, stoichiometry from formula, chemical formula parser"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Parses a chemical formula string into a list of pairs containing element symbols and their stoichiometric integer counts."
}
]
}
}
ikvdq2l5z91swok7kqyxldezzh58lp1
Z39443
0
90113
299412
2026-08-14T14:32:26Z
AdrianoRutz
1485
299412
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39443"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39442",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "\ndef Z39442(Z39442K1: str) -\u003E list[tuple[str, int]]:\n \"\"\"Parses chemical formulas into element-count pairs for Wikifunctions Z39442.\n\n Handles standard formulas, nested parentheses/brackets, and multi-digit\n stoichiometric numbers.\n\n Examples:\n \"H2O\" -\u003E [(\"H\", 2), (\"O\", 1)]\n \"Ca(OH)2\" -\u003E [(\"Ca\", 1), (\"O\", 2), (\"H\", 2)]\n \"Fe2(SO4)3\" -\u003E [(\"Fe\", 2), (\"S\", 3), (\"O\", 12)]\n \"\"\"\n import re\n\tfrom collections import defaultdict\n token_pattern = re.compile(r\"([A-Z][a-z]?)|(\\d+)|([\\(\\)\\[\\]])\")\n tokens = [t for group in token_pattern.findall(Z39442K1) for t in group if t]\n\n stack = [defaultdict(int)]\n i = 0\n n = len(tokens)\n\n while i \u003C n:\n tok = tokens[i]\n\n if tok in \"([\":\n stack.append(defaultdict(int))\n i += 1\n elif tok in \")]\":\n top = stack.pop()\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n for elem, count in top.items():\n stack[-1][elem] += count * multiplier\n i += 1\n else:\n elem = tok\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n stack[-1][elem] += multiplier\n i += 1\n\n return list(stack[-1].items())"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
2rye4by996x3a0iydomnrqlhqh21ots
299414
299412
2026-08-14T14:33:35Z
AdrianoRutz
1485
299414
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39443"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39442",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "\ndef Z39442(Z39442K1: str) -\u003E list[tuple[str, int]]:\n \"\"\"Parses chemical formulas into element-count pairs for Wikifunctions Z39442.\n\n Handles standard formulas, nested parentheses/brackets, and multi-digit\n stoichiometric numbers.\n\n Examples:\n \"H2O\" -\u003E [(\"H\", 2), (\"O\", 1)]\n \"Ca(OH)2\" -\u003E [(\"Ca\", 1), (\"O\", 2), (\"H\", 2)]\n \"Fe2(SO4)3\" -\u003E [(\"Fe\", 2), (\"S\", 3), (\"O\", 12)]\n \"\"\"\n import re\n\tfrom collections import defaultdict\n token_pattern = re.compile(r\"([A-Z][a-z]?)|(\\d+)|([\\(\\)\\[\\]])\")\n tokens = [t for group in token_pattern.findall(Z39442K1) for t in group if t]\n\n stack = [defaultdict(int)]\n i = 0\n n = len(tokens)\n\n while i \u003C n:\n tok = tokens[i]\n\n if tok in \"([\":\n stack.append(defaultdict(int))\n i += 1\n elif tok in \")]\":\n top = stack.pop()\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n for elem, count in top.items():\n stack[-1][elem] += count * multiplier\n i += 1\n else:\n elem = tok\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n stack[-1][elem] += multiplier\n i += 1\n\n return list(stack[-1].items())"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula, python"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
qlkj8dypk2hr7363f1iyd8de26w6nn2
299415
299414
2026-08-14T14:34:25Z
AdrianoRutz
1485
299415
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39443"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39442",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39442(Z39442K1: str) -\u003E list[tuple[str, int]]:\n \"\"\"Parses chemical formulas into element-count pairs for Wikifunctions Z39442.\n\n Handles standard formulas, nested parentheses/brackets, and multi-digit\n stoichiometric numbers.\n\n Examples:\n \"H2O\" -\u003E [(\"H\", 2), (\"O\", 1)]\n \"Ca(OH)2\" -\u003E [(\"Ca\", 1), (\"O\", 2), (\"H\", 2)]\n \"Fe2(SO4)3\" -\u003E [(\"Fe\", 2), (\"S\", 3), (\"O\", 12)]\n \"\"\"\n import re\n from collections import defaultdict\n token_pattern = re.compile(r\"([A-Z][a-z]?)|(\\d+)|([\\(\\)\\[\\]])\")\n tokens = [t for group in token_pattern.findall(Z39442K1) for t in group if t]\n\n stack = [defaultdict(int)]\n i = 0\n n = len(tokens)\n\n while i \u003C n:\n tok = tokens[i]\n\n if tok in \"([\":\n stack.append(defaultdict(int))\n i += 1\n elif tok in \")]\":\n top = stack.pop()\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n for elem, count in top.items():\n stack[-1][elem] += count * multiplier\n i += 1\n else:\n elem = tok\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n stack[-1][elem] += multiplier\n i += 1\n\n return list(stack[-1].items())"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula, python"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
3orm73rm85s9w7ps0seipp2ul35yjsm
299416
299415
2026-08-14T14:35:11Z
AdrianoRutz
1485
299416
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39443"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39442",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39442(Z39442K1):\n \"\"\"Parses chemical formulas into element-count pairs for Wikifunctions Z39442.\n\n Handles standard formulas, nested parentheses/brackets, and multi-digit\n stoichiometric numbers.\n\n Examples:\n \"H2O\" -\u003E [(\"H\", 2), (\"O\", 1)]\n \"Ca(OH)2\" -\u003E [(\"Ca\", 1), (\"O\", 2), (\"H\", 2)]\n \"Fe2(SO4)3\" -\u003E [(\"Fe\", 2), (\"S\", 3), (\"O\", 12)]\n \"\"\"\n import re\n from collections import defaultdict\n token_pattern = re.compile(r\"([A-Z][a-z]?)|(\\d+)|([\\(\\)\\[\\]])\")\n tokens = [t for group in token_pattern.findall(Z39442K1) for t in group if t]\n\n stack = [defaultdict(int)]\n i = 0\n n = len(tokens)\n\n while i \u003C n:\n tok = tokens[i]\n\n if tok in \"([\":\n stack.append(defaultdict(int))\n i += 1\n elif tok in \")]\":\n top = stack.pop()\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n for elem, count in top.items():\n stack[-1][elem] += count * multiplier\n i += 1\n else:\n elem = tok\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n stack[-1][elem] += multiplier\n i += 1\n\n return list(stack[-1].items())"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula, python"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
ssxc4oem9apk4v3i3toyl73d9xtfyci
299417
299416
2026-08-14T14:36:55Z
AdrianoRutz
1485
299417
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39443"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39442",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39442(Z39442K1):\n \"\"\"Parses chemical formulas into element-count pairs for Wikifunctions Z39442.\n\n Uses standard dict operations without defaultdict.\n\n Examples:\n \"H2O\" -\u003E [(\"H\", 2), (\"O\", 1)]\n \"Ca(OH)2\" -\u003E [(\"Ca\", 1), (\"O\", 2), (\"H\", 2)]\n \"Fe2(SO4)3\" -\u003E [(\"Fe\", 2), (\"S\", 3), (\"O\", 12)]\n \"\"\"\n import re\n token_pattern = re.compile(r\"([A-Z][a-z]?)|(\\d+)|([\\(\\)\\[\\]])\")\n tokens = [t for group in token_pattern.findall(Z39442K1) for t in group if t]\n\n stack: list[dict[str, int]] = [{}]\n i = 0\n n = len(tokens)\n\n while i \u003C n:\n tok = tokens[i]\n\n if tok in \"([\":\n stack.append({})\n i += 1\n elif tok in \")]\":\n top = stack.pop()\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n for elem, count in top.items():\n stack[-1][elem] = stack[-1].get(elem, 0) + count * multiplier\n i += 1\n else:\n elem = tok\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n stack[-1][elem] = stack[-1].get(elem, 0) + multiplier\n i += 1\n\n return list(stack[-1].items())"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula, python"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
iykk4piub13668qhmckcipe04drssu7
299418
299417
2026-08-14T14:38:25Z
AdrianoRutz
1485
299418
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39443"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39442",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39442(Z39442K1):\n \"\"\"Parses chemical formulas into element-count pairs for Wikifunctions Z39442.\n\n Returns Z882 Key-Value ZObjects compatible with Wikifunctions output types.\n \"\"\"\n import re\n token_pattern = re.compile(r\"([A-Z][a-z]?)|(\\d+)|([\\(\\)\\[\\]])\")\n tokens = [t for group in token_pattern.findall(Z39442K1) for t in group if t]\n\n stack: list[dict[str, int]] = [{}]\n i = 0\n n = len(tokens)\n\n while i \u003C n:\n tok = tokens[i]\n\n if tok in \"([\":\n stack.append({})\n i += 1\n elif tok in \")]\":\n top = stack.pop()\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n for elem, count in top.items():\n stack[-1][elem] = stack[-1].get(elem, 0) + count * multiplier\n i += 1\n else:\n elem = tok\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n stack[-1][elem] = stack[-1].get(elem, 0) + multiplier\n i += 1\n\n # Convert native Python dict entries into Z882 Key-Value ZObjects\n return [\n {\"Z1K1\": \"Z882\", \"Z882K1\": elem, \"Z882K2\": count}\n for elem, count in stack[-1].items()\n ]\n"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula, python"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
4gnb3k8tw5vwh9hyja1f6on416s5mqs
299419
299418
2026-08-14T14:40:26Z
AdrianoRutz
1485
299419
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39443"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39442",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39442(Z39442K1: str) -\u003E list:\n \"\"\"Parses chemical formula into Z882 ZObjects.\"\"\"\n import re\n token_pattern = re.compile(r\"([A-Z][a-z]?)|(\\d+)|([\\(\\)\\[\\]])\")\n tokens = [t for group in token_pattern.findall(Z39442K1) for t in group if t]\n\n stack: list[dict[str, int]] = [{}]\n i = 0\n n = len(tokens)\n\n while i \u003C n:\n tok = tokens[i]\n\n if tok in \"([\":\n stack.append({})\n i += 1\n elif tok in \")]\":\n top = stack.pop()\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n for elem, count in top.items():\n stack[-1][elem] = stack[-1].get(elem, 0) + count * multiplier\n i += 1\n else:\n elem = tok\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n stack[-1][elem] = stack[-1].get(elem, 0) + multiplier\n i += 1\n\n # Instantiate official ZObject instances\n result = []\n for elem, count in stack[-1].items():\n obj = ZObject()\n obj.Z1K1 = \"Z882\"\n obj.Z882K1 = elem\n obj.Z882K2 = str(\n count\n ) # Numbers in Wikifunctions are often string-encoded Z6/Z13524\n result.append(obj)\n\n return result"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula, python"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
ftig5q0fz0x3s7rlcoecetw2jv0xau1
299420
299419
2026-08-14T14:41:27Z
AdrianoRutz
1485
299420
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39443"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39442",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39442(Z39442K1):\n\timport re\n token_pattern = re.compile(r\"([A-Z][a-z]?)|(\\d+)|([\\(\\)\\[\\]])\")\n tokens = [t for group in token_pattern.findall(Z39442K1) for t in group if t]\n\n stack: list[dict[str, int]] = [{}]\n i = 0\n n = len(tokens)\n\n while i \u003C n:\n tok = tokens[i]\n\n if tok in \"([\":\n stack.append({})\n i += 1\n elif tok in \")]\":\n top = stack.pop()\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n for elem, count in top.items():\n stack[-1][elem] = stack[-1].get(elem, 0) + count * multiplier\n i += 1\n else:\n elem = tok\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n stack[-1][elem] = stack[-1].get(elem, 0) + multiplier\n i += 1\n\n # Strings for numeric values prevent integer serialization errors\n return [\n {\"Z1K1\": \"Z882\", \"Z882K1\": elem, \"Z882K2\": str(count)}\n for elem, count in stack[-1].items()\n ]"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula, python"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
fr11ksyavwk3gigt3j6wgys1eyguqif
299421
299420
2026-08-14T14:42:18Z
AdrianoRutz
1485
299421
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39443"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39442",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39442(Z39442K1):\n import re\n token_pattern = re.compile(r\"([A-Z][a-z]?)|(\\d+)|([\\(\\)\\[\\]])\")\n tokens = [t for group in token_pattern.findall(Z39442K1) for t in group if t]\n\n stack: list[dict[str, int]] = [{}]\n i = 0\n n = len(tokens)\n\n while i \u003C n:\n tok = tokens[i]\n\n if tok in \"([\":\n stack.append({})\n i += 1\n elif tok in \")]\":\n top = stack.pop()\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n for elem, count in top.items():\n stack[-1][elem] = stack[-1].get(elem, 0) + count * multiplier\n i += 1\n else:\n elem = tok\n multiplier = 1\n if i + 1 \u003C n and tokens[i + 1].isdigit():\n multiplier = int(tokens[i + 1])\n i += 1\n stack[-1][elem] = stack[-1].get(elem, 0) + multiplier\n i += 1\n\n # Strings for numeric values prevent integer serialization errors\n return [\n {\"Z1K1\": \"Z882\", \"Z882K1\": elem, \"Z882K2\": str(count)}\n for elem, count in stack[-1].items()\n ]"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element counts from chemical formula, python"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
phaie87zw8tlq0iw4bjzer5rr91bgo1
Z39444
0
90114
299422
2026-08-14T15:39:56Z
AdrianoRutz
1485
299422
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39444"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z882",
"Z882K1": "Z6",
"Z882K2": "Z6"
},
"Z17K2": "Z39444K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "element count pair"
}
]
}
}
],
"Z8K2": "Z13518",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39444"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "mass of chemical element pair"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Calculates the total mass for a single element symbol and count pair (e.g. key \"H\", value \"2\")."
}
]
}
}
jbfl8cui5m63fxmqv1ezjeb4qzynjhc
Z39445
0
90115
299427
2026-08-14T18:42:19Z
Jsamwrites
938
Create test for Z39422
299427
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39445"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39422",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q146"
},
"Z39422K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
],
"Z39422K3": "Z1004"
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "chats"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "city name-plural, fr, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
1o582clkuj0qal865wcsukavv428sv8
299428
299427
2026-08-14T18:42:55Z
Jsamwrites
938
299428
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39445"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39422",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q456"
},
"Z39422K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
],
"Z39422K3": "Z1004"
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "Lyon"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "city name-plural, fr, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
j93x2e8n06b9xgs8xzgpoybhhobt5si
Z39446
0
90116
299450
2026-08-14T20:37:32Z
Carnildo
54460
Add English test case
299450
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39446"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39422",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q1501926"
},
"Z39422K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
],
"Z39422K3": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z14392",
"Z14392K2": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "attorneys general"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "[en] Attorney general, plural"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Unusual English plural form"
}
]
}
}
45kk0ue9xgul1l7q73ad6zopifpd8hk
Z39447
0
90117
299451
2026-08-14T20:39:23Z
Carnildo
54460
Add English test case
299451
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39447"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39422",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q1501926"
},
"Z39422K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q110786"
}
],
"Z39422K3": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z14392",
"Z14392K2": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "attorney general"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "[en] attorney general, singular"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Test basic operation"
}
]
}
}
re7qr3pk3vqinqjs7rvx5296799595v
Z39448
0
90118
299452
2026-08-14T20:49:48Z
Carnildo
54460
Add English test case
299452
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39448"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39422",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q1501926"
},
"Z39422K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q110022"
}
],
"Z39422K3": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z14392",
"Z14392K2": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "attorneys general"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "[en] attorney general, dual"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English doesn't have a dual form, so this should generate the plural"
}
]
}
}
hs6nkisk1xvwu36dc85uxeo280y04da
Z39449
0
90119
299455
2026-08-14T20:56:52Z
Carnildo
54460
Add English test case
299455
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39449"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39422",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q15686806"
},
"Z39422K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q1775415"
}
],
"Z39422K3": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z14392",
"Z14392K2": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "senator"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "[en] senator, feminine"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "\"Senatrix\" is an obsolete form, so this should generate \"senator\"."
}
]
}
}
dr5bhcnw50ujn1axmnlg3ey41pzosxe
Z39450
0
90120
299456
2026-08-14T20:58:45Z
Carnildo
54460
Add English test case
299456
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39450"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39422",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q33999"
},
"Z39422K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q1775415"
}
],
"Z39422K3": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z14392",
"Z14392K2": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "actress"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "[en] actor, feminine"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "\"Actor\" is one of the few English nouns that declines for gender"
}
]
}
}
tuso1oeswv763n1xzbgfspdlf0qd05h
Z39451
0
90121
299457
2026-08-14T21:10:03Z
Ornithorynque liminaire
1539
sooo French
299457
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39451"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z37890",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z37890",
"Z37890K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q208172"
},
"Z37890K2": "Z1004"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z14392",
"Z14392K2": {
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "La baguette"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "[fr] French baguette 🥖"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
4ebm50rd5h65dgyds5hn3sql698pfgy
299458
299457
2026-08-14T21:13:10Z
Ornithorynque liminaire
1539
precise result
299458
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39451"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z37890",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z37890",
"Z37890K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q208172"
},
"Z37890K2": "Z1004"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z14392",
"Z14392K2": {
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "Les ingrédients de la baguette sont la farine, l'eau, le sel et la levure ou le levain."
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "[fr] French baguette 🥖"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "Ingrédients du plus présent au moins présent."
}
]
}
}
q96501erh0ptgyfmq74jk2zxxcpj25c
299464
299458
2026-08-14T21:41:21Z
HenkvD
1290
English label
299464
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39451"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z37890",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z37890",
"Z37890K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q208172"
},
"Z37890K2": "Z1004"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z14392",
"Z14392K2": {
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "Les ingrédients de la baguette sont la farine, l'eau, le sel et la levure ou le levain."
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "[fr] French baguette 🥖"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "[fr] French baguette 🥖"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "Ingrédients du plus présent au moins présent."
}
]
}
}
hipwicivyjwt1hple81j5x8kdne6dfr
Z39452
0
90122
299466
2026-08-14T21:47:17Z
Ornithorynque liminaire
1539
test un peu difficile (mais nécessaire)
299466
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39452"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z34282",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z34282",
"Z34282K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q12543"
},
"Z34282K2": "Z1004"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z14392",
"Z14392K2": {
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "Les Hauts-de-Seine sont un département français."
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "[fr] Les Hauts-de-Seine sont un département fr."
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
ob5nejy1pbckwb2co042q3rk7slbbtf
Z39453
0
90123
299467
2026-08-14T22:10:59Z
Jsamwrites
938
299467
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39453"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39453K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39453K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "definite article"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39453K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39453"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English determiner for Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
00x7eqyg32d002d1utsq8efpwa7h59c
299469
299467
2026-08-14T22:20:15Z
Jsamwrites
938
Added Z39454 to the approved list of implementations
299469
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39453"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39453K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39453K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "definite article"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39453K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z39454"
],
"Z8K5": "Z39453"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English determiner for Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
et6s2f3wr8rapbtoa0oueo4qf97e9xe
299475
299469
2026-08-14T22:28:54Z
Jsamwrites
938
Added Z39455 to the approved list of test cases
299475
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39453"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39453K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39453K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "definite article"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39453K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z39455"
],
"Z8K4": [
"Z14",
"Z39454"
],
"Z8K5": "Z39453"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English determiner for Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
csoj6vio3yagn44wa6u1atkbhq8rkm0
299483
299475
2026-08-14T22:33:56Z
Jsamwrites
938
Added Z39456 and Z39457 to the approved list of test cases
299483
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39453"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39453K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39453K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "definite article"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39453K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z39455",
"Z39456",
"Z39457"
],
"Z8K4": [
"Z14",
"Z39454"
],
"Z8K5": "Z39453"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English determiner for Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
0qp8v7w6nweafdoizw60u1ahkeesqqv
299486
299483
2026-08-14T22:35:03Z
Jsamwrites
938
Added Z39458 to the approved list of test cases
299486
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39453"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39453K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39453K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "definite article"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39453K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z39455",
"Z39456",
"Z39457",
"Z39458"
],
"Z8K4": [
"Z14",
"Z39454"
],
"Z8K5": "Z39453"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English determiner for Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
fc25lks57w8ugo92sk0n4xdh80g01ke
Z39454
0
90124
299468
2026-08-14T22:20:04Z
Jsamwrites
938
299468
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39454"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39453",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z19565",
"Z19565K1": {
"Z1K1": "Z7",
"Z7K1": "Z22131",
"Z22131K1": {
"Z1K1": "Z7",
"Z7K1": "Z32935",
"Z32935K1": {
"Z1K1": "Z18",
"Z18K1": "Z39453K1"
}
}
},
"Z19565K2": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": ""
},
"Z19565K3": {
"Z1K1": "Z18",
"Z18K1": "Z39453K2"
},
"Z19565K4": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "the"
},
"Z19565K5": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z32506",
"Z32506K1": {
"Z1K1": "Z18",
"Z18K1": "Z39453K3"
}
},
"Z802K2": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": ""
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z21739",
"Z21739K1": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z18",
"Z18K1": "Z39453K1"
},
"Z39422K2": {
"Z1K1": "Z18",
"Z18K1": "Z39453K3"
},
"Z39422K3": "Z1002"
}
}
}
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English determiner for Wikidata item, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
ckl5nqzrv57iv7hb19amm980m1v2hz8
299470
299468
2026-08-14T22:23:26Z
Jsamwrites
938
299470
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39454"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39453",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z19565",
"Z19565K1": {
"Z1K1": "Z7",
"Z7K1": "Z22131",
"Z22131K1": {
"Z1K1": "Z7",
"Z7K1": "Z32935",
"Z32935K1": {
"Z1K1": "Z7",
"Z7K1": "Z6821",
"Z6821K1": {
"Z1K1": "Z18",
"Z18K1": "Z39453K1"
}
}
}
},
"Z19565K2": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": ""
},
"Z19565K3": {
"Z1K1": "Z18",
"Z18K1": "Z39453K2"
},
"Z19565K4": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "the"
},
"Z19565K5": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z32506",
"Z32506K1": {
"Z1K1": "Z18",
"Z18K1": "Z39453K3"
}
},
"Z802K2": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": ""
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z21739",
"Z21739K1": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z18",
"Z18K1": "Z39453K1"
},
"Z39422K2": {
"Z1K1": "Z18",
"Z18K1": "Z39453K3"
},
"Z39422K3": "Z1002"
}
}
}
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English determiner for Wikidata item, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
sp4y8ow0798k530y4jeoxv2rp385k4n
299474
299470
2026-08-14T22:28:45Z
Jsamwrites
938
299474
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39454"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39453",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z19565",
"Z19565K1": {
"Z1K1": "Z7",
"Z7K1": "Z22131",
"Z22131K1": {
"Z1K1": "Z7",
"Z7K1": "Z32935",
"Z32935K1": {
"Z1K1": "Z7",
"Z7K1": "Z6821",
"Z6821K1": {
"Z1K1": "Z18",
"Z18K1": "Z39453K1"
}
}
}
},
"Z19565K2": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": ""
},
"Z19565K3": {
"Z1K1": "Z18",
"Z18K1": "Z39453K2"
},
"Z19565K4": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "the"
},
"Z19565K5": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z32506",
"Z32506K1": {
"Z1K1": "Z18",
"Z18K1": "Z39453K3"
}
},
"Z802K2": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": ""
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z26107",
"Z26107K1": "Z1002",
"Z26107K2": {
"Z1K1": "Z7",
"Z7K1": "Z21739",
"Z21739K1": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z18",
"Z18K1": "Z39453K1"
},
"Z39422K2": {
"Z1K1": "Z18",
"Z18K1": "Z39453K3"
},
"Z39422K3": "Z1002"
}
}
}
}
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "English determiner for Wikidata item, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
ml4esb8x51qyuxahhhg5mrn3bhm1zx4
Talk:Z21794
1
90125
299471
2026-08-14T22:23:28Z
Ornithorynque liminaire
1539
/* Grammar */ new section
299471
wikitext
text/x-wiki
== Grammar ==
Hi @[[User:Feeglgeef|Feeglgeef]],
I think this test is incorrect (should be "ella es una fundadora española") but for some reason I don't have the rights to edit it.
[[User:Ornithorynque liminaire|Ornithorynque liminaire]] ([[User talk:Ornithorynque liminaire|talk]]) 22:23, 14 August 2026 (UTC)
03e0i1g3ldbi5mipu6qlne7zc18uz5q
Z39455
0
90126
299473
2026-08-14T22:27:20Z
Jsamwrites
938
299473
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39455"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39453",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39453",
"Z39453K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39453K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39453K3": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q110786"
}
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "a"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "determiner dog, en, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
eex4ifs8o2nx9xvfvvjs840yte74i2g
Z39456
0
90127
299476
2026-08-14T22:30:07Z
Jsamwrites
938
Create test for Z39453
299476
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39456"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39453",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39453",
"Z39453K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39453K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39453K3": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q110786"
}
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "a"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "determiner dog-plural, en,test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
tuj92adukvh60vadcf7e8ibtm4k4rn8
299477
299476
2026-08-14T22:30:38Z
Jsamwrites
938
299477
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39456"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39453",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39453",
"Z39453K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39453K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39453K3": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "dogs"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "determiner dog-plural, en,test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
6l16kk67a1h45n1jff5bbnb7s6ssbu7
299482
299477
2026-08-14T22:33:45Z
Jsamwrites
938
299482
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39456"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39453",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39453",
"Z39453K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39453K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39453K3": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": ""
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "determiner dog-plural, en,test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
h9g3kjjosh30wrybzywolqkixjg0yaj
Z39457
0
90128
299480
2026-08-14T22:31:51Z
Jsamwrites
938
Create test for Z39453
299480
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39457"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39453",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39453",
"Z39453K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39453K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39453K3": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q110786"
}
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "a"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "determiner dog-definite, plural, en,test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
clt05zy4ednw2pu14imlogrrslv170g
299481
299480
2026-08-14T22:32:32Z
Jsamwrites
938
299481
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39457"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39453",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39453",
"Z39453K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39453K2": {
"Z1K1": "Z40",
"Z40K1": "Z41"
},
"Z39453K3": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "the"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "determiner dog-definite, plural, en,test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
sklionywm9mbiuugigv1x99bubsj25v
Z39458
0
90129
299484
2026-08-14T22:34:19Z
Jsamwrites
938
Create test for Z39453
299484
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39458"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39453",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39453",
"Z39453K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39453K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39453K3": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q110786"
}
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "a"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Higgs boson-definite, plural, en,test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
7xk17k5w97k7suwl7ai2m601x0kp6ng
299485
299484
2026-08-14T22:34:54Z
Jsamwrites
938
299485
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39458"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39453",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39453",
"Z39453K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39453K2": {
"Z1K1": "Z40",
"Z40K1": "Z41"
},
"Z39453K3": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": ""
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Higgs boson-definite, plural, en,test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
to392umtvwha4zq44c3h03znamwucaa
299487
299485
2026-08-14T22:35:24Z
Jsamwrites
938
299487
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39458"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39453",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39453",
"Z39453K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39453K2": {
"Z1K1": "Z40",
"Z40K1": "Z41"
},
"Z39453K3": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "the"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Higgs boson-definite, plural, en,test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
k828rckqtcypvvn6lir2pczocdcya35
Z39459
0
90130
299488
2026-08-14T22:38:41Z
Jsamwrites
938
299488
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39459"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39459K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39459K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "definite article"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39459K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39459"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Wikidata item as noun phrase, English"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
f1ujoxx38penrzj3h6sq4g96mzex85t
299490
299488
2026-08-14T22:44:17Z
Jsamwrites
938
Added Z39460 to the approved list of implementations
299490
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39459"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39459K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39459K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "definite article"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39459K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z39460"
],
"Z8K5": "Z39459"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Wikidata item as noun phrase, English"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
8lbt55kxadi77206j5mhbj2r1estyo9
299495
299490
2026-08-14T22:48:57Z
Jsamwrites
938
Added Z39461, Z39462, Z39463 and Z39464 to the approved list of test cases
299495
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39459"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39459K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39459K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "definite article"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39459K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z39461",
"Z39462",
"Z39463",
"Z39464"
],
"Z8K4": [
"Z14",
"Z39460"
],
"Z8K5": "Z39459"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Wikidata item as noun phrase, English"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
eli7rcpqzmg2b68ulskp18fuke3f890
299501
299495
2026-08-14T22:53:57Z
Jsamwrites
938
Added Z39465 to the approved list of test cases
299501
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39459"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39459K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39459K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "definite article"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39459K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20",
"Z39461",
"Z39462",
"Z39463",
"Z39464",
"Z39465"
],
"Z8K4": [
"Z14",
"Z39460"
],
"Z8K5": "Z39459"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Wikidata item as noun phrase, English"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
f4zd305k0s0j7eeqy02835pwp5x9wr2
Z39460
0
90131
299489
2026-08-14T22:44:06Z
Jsamwrites
938
299489
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39460"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39459",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z10008",
"Z10008K1": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39453",
"Z39453K1": {
"Z1K1": "Z18",
"Z18K1": "Z39459K1"
},
"Z39453K2": {
"Z1K1": "Z18",
"Z18K1": "Z39459K2"
},
"Z39453K3": {
"Z1K1": "Z18",
"Z18K1": "Z39459K3"
}
}
}
},
"Z802K2": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z18",
"Z18K1": "Z39459K1"
},
"Z39422K2": {
"Z1K1": "Z18",
"Z18K1": "Z39459K3"
},
"Z39422K3": "Z1002"
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z34669",
"Z34669K1": [
"Z11",
{
"Z1K1": "Z7",
"Z7K1": "Z39453",
"Z39453K1": {
"Z1K1": "Z18",
"Z18K1": "Z39459K1"
},
"Z39453K2": {
"Z1K1": "Z18",
"Z18K1": "Z39459K2"
},
"Z39453K3": {
"Z1K1": "Z18",
"Z18K1": "Z39459K3"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z18",
"Z18K1": "Z39459K1"
},
"Z39422K2": {
"Z1K1": "Z18",
"Z18K1": "Z39459K3"
},
"Z39422K3": "Z1002"
}
],
"Z34669K2": {
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": " "
}
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Wikidata item as noun phrase, en, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
5cqgsztjdjlw7obsfzw5dgv1k90c2f6
Z39461
0
90132
299491
2026-08-14T22:47:11Z
Jsamwrites
938
299491
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39461"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39459",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39459",
"Z39459K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39459K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39459K3": [
"Z6091"
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "a dog"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "noun phrase-indefinite dog, en, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
nqzsh8xov34ly6py3dtrmrhejnwx6pc
Z39462
0
90133
299492
2026-08-14T22:48:35Z
Jsamwrites
938
Create test for Z39459
299492
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39462"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39459",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39459",
"Z39459K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39459K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39459K3": [
"Z6091"
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "a dog"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "noun phrase-definite dog, en, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
m36mhntquurl7aaj0sdhmquptnde1i5
299496
299492
2026-08-14T22:49:22Z
Jsamwrites
938
299496
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39462"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39459",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39459",
"Z39459K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39459K2": {
"Z1K1": "Z40",
"Z40K1": "Z41"
},
"Z39459K3": [
"Z6091"
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "the dog"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "noun phrase-definite dog, en, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
f7km5ml1qd7ffd9isc4g4ylbum27m6w
Z39463
0
90134
299493
2026-08-14T22:48:38Z
Jsamwrites
938
Create test for Z39459
299493
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39463"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39459",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39459",
"Z39459K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39459K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39459K3": [
"Z6091"
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "a dog"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "noun phrase-indefinite dog, plural, en, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
4r48pm58l331ntlrr757ojeag2rbb0d
299497
299493
2026-08-14T22:50:04Z
Jsamwrites
938
299497
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39463"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39459",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39459",
"Z39459K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39459K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39459K3": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "dogs"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "noun phrase-indefinite dog, plural, en, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
moe92bri86k81g8ssnotbp8z7qfor6a
Z39464
0
90135
299494
2026-08-14T22:48:40Z
Jsamwrites
938
Create test for Z39459
299494
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39464"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39459",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39459",
"Z39459K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39459K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39459K3": [
"Z6091"
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "a dog"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "noun phrase-definite dog, plural, en, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
2si9ok18bufmno3ahzcl6780vmlpl37
299498
299494
2026-08-14T22:50:51Z
Jsamwrites
938
299498
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39464"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39459",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39459",
"Z39459K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39459K2": {
"Z1K1": "Z40",
"Z40K1": "Z41"
},
"Z39459K3": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "the dogs"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "noun phrase-definite dog, plural, en, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
0r7m8t3l2w4ww42s6wcw6nal5dqms6e
Z39465
0
90136
299499
2026-08-14T22:53:01Z
Jsamwrites
938
Create test for Z39459
299499
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39465"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39459",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39459",
"Z39459K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q144"
},
"Z39459K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39459K3": [
"Z6091"
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "a dog"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "noun phrase-definite Higgs boson, en, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
noovcm1a8xpv8mf9t4nq62ida7lowxc
299500
299499
2026-08-14T22:53:46Z
Jsamwrites
938
299500
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39465"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39459",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39459",
"Z39459K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q402"
},
"Z39459K2": {
"Z1K1": "Z40",
"Z40K1": "Z41"
},
"Z39459K3": [
"Z6091"
]
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "the Higgs boson"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "noun phrase-definite Higgs boson, en, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
s2gwx6u6f1wh5uv4kp932r2zx4weej3
Z39466
0
90137
299502
2026-08-14T22:56:30Z
Jsamwrites
938
299502
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39466"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39466K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39466K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "definite article"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39466K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39466"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "French determiner for Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
oqm8qzc6jffypzcz3i3kmlmnh2jyfz7
299514
299502
2026-08-14T23:27:49Z
Jsamwrites
938
299514
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39466"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39466K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39466K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "definite article"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39466K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical features"
}
]
}
}
],
"Z8K2": "Z11",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39466"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "[!] French determiner for Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "WIP"
}
]
}
}
g4gbmjx36gn10jepinreiss841o4uus
Z39467
0
90138
299503
2026-08-14T23:09:32Z
Jsamwrites
938
299503
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39467"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39467K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39467K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39467"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical genders of Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
7oshz0r8so8ct2hfgfoac7n5h2ch8ib
299505
299503
2026-08-14T23:18:45Z
Jsamwrites
938
Added Z39468 to the approved list of implementations
299505
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39467"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39467K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39467K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z39468"
],
"Z8K5": "Z39467"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical genders of Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
flg8mrupo7k7ye9d7ezo2kalsppwstt
299507
299505
2026-08-14T23:21:19Z
Jsamwrites
938
Added Z39469 to the approved list of test cases
299507
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39467"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39467K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39467K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z8K3": [
"Z20",
"Z39469"
],
"Z8K4": [
"Z14",
"Z39468"
],
"Z8K5": "Z39467"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical genders of Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
gyxfs4dvjzmne1jvwhoj3907yapfw5u
299511
299507
2026-08-14T23:23:25Z
Jsamwrites
938
Added Z39470 and Z39471 to the approved list of test cases
299511
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39467"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39467K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39467K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z8K3": [
"Z20",
"Z39469",
"Z39470",
"Z39471"
],
"Z8K4": [
"Z14",
"Z39468"
],
"Z8K5": "Z39467"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical genders of Wikidata item"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
pyf2774pow0b5nrsd4ypafb3t351ugu
Z39468
0
90139
299504
2026-08-14T23:18:37Z
Jsamwrites
938
299504
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39468"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39467",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z13676",
"Z13676K1": {
"Z1K1": "Z7",
"Z7K1": "Z12681",
"Z12681K1": {
"Z1K1": "Z7",
"Z7K1": "Z6830",
"Z6830K1": {
"Z1K1": "Z18",
"Z18K1": "Z39467K1"
},
"Z6830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P5137"
},
"Z6830K3": {
"Z1K1": "Z18",
"Z18K1": "Z39467K2"
}
}
},
"Z13676K2": {
"Z1K1": "Z13518",
"Z13518K1": "0"
}
},
"Z802K2": {
"Z1K1": "Z7",
"Z7K1": "Z36605",
"Z36605K1": {
"Z1K1": "Z7",
"Z7K1": "Z811",
"Z811K1": {
"Z1K1": "Z7",
"Z7K1": "Z23471",
"Z23471K1": {
"Z1K1": "Z18",
"Z18K1": "Z39467K1"
},
"Z23471K2": {
"Z1K1": "Z18",
"Z18K1": "Z39467K2"
}
}
}
},
"Z802K3": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "grammatical genders of Wikidata item, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
sh8jiykop4wdgxkgmsddlaz5kpimm26
Z39469
0
90140
299506
2026-08-14T23:21:08Z
Jsamwrites
938
299506
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39469"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39467",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39467",
"Z39467K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q14748"
},
"Z39467K2": "Z1004"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z12846",
"Z12846K2": [
"Z1",
{
"Z1K1": "Z6091",
"Z6091K1": "Q499327"
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "table grammatical genders, fr, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
hnd00avo2qj6skubnn8jgcrhxt8zy9z
299508
299506
2026-08-14T23:21:42Z
Jsamwrites
938
299508
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39469"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39467",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39467",
"Z39467K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q14748"
},
"Z39467K2": "Z1004"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z12846",
"Z12846K2": [
"Z1",
{
"Z1K1": "Z6091",
"Z6091K1": "Q1775415"
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "table grammatical genders, fr, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
r6t91ol2cxzfqnh1ko2otg2dlah7cuo
Z39470
0
90141
299509
2026-08-14T23:23:15Z
Jsamwrites
938
Create test for Z39467
299509
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39470"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39467",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39467",
"Z39467K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q14748"
},
"Z39467K2": "Z1004"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z12846",
"Z12846K2": [
"Z1",
{
"Z1K1": "Z6091",
"Z6091K1": "Q1775415"
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "article grammatical genders, fr, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
hk783yfgdte7s00f4ewnnijpooofcnw
299512
299509
2026-08-14T23:24:02Z
Jsamwrites
938
299512
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39470"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39467",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39467",
"Z39467K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q191067"
},
"Z39467K2": "Z1004"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z12846",
"Z12846K2": [
"Z1",
{
"Z1K1": "Z6091",
"Z6091K1": "Q499327"
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "article grammatical genders, fr, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
kfe2f8ruhgdei3mwn90p2q3v9vve415
Z39471
0
90142
299510
2026-08-14T23:23:18Z
Jsamwrites
938
Create test for Z39467
299510
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39471"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39467",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39467",
"Z39467K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q14748"
},
"Z39467K2": "Z1004"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z12846",
"Z12846K2": [
"Z1",
{
"Z1K1": "Z6091",
"Z6091K1": "Q1775415"
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "information grammatical genders, fr, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
njvblgnebuz68rdh09uvrc337yhvoyi
299513
299510
2026-08-14T23:24:18Z
Jsamwrites
938
299513
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39471"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39467",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39467",
"Z39467K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q11028"
},
"Z39467K2": "Z1004"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z12846",
"Z12846K2": [
"Z1",
{
"Z1K1": "Z6091",
"Z6091K1": "Q1775415"
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "information grammatical genders, fr, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
sr6oyut6333lltwl4hxl4le6qnu6e5c
Wikifunctions:Proposal for built-in number types
4
90143
299515
2026-08-14T23:51:24Z
Virinas-code
2884
Beginning of draft
299515
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|1}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
bqoh2p41uhsiquf2rpb81v6rtooqoy1
299516
299515
2026-08-14T23:52:05Z
Virinas-code
2884
Byte is a Type (Z4) and not an Object (Z1)
299516
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
3wmagk83qqjquc8ul39w5vz9qlq7yue
299517
299516
2026-08-15T00:33:34Z
Virinas-code
2884
Issues regarding arithmetic functions and very beginning of a proposal
299517
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
=== Proposal ===
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
fozeclfo7jujwsmxgac8ptzotwob1z4
299518
299517
2026-08-15T00:33:52Z
Virinas-code
2884
Fix proposal heading level
299518
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
awfu7xnixxf90v0e4n2e9ue10u851jc
299519
299518
2026-08-15T00:57:18Z
Virinas-code
2884
Write down proposal
299519
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the Wikifunctions Mission statement, we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
54wwujb1ee1n90nxo8lpv6pwzzwu96e
299520
299519
2026-08-15T00:57:54Z
Virinas-code
2884
/* Further views */ Link mission statement
299520
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
8idc5fq3hs6erjdxi49isrmvpenj0v9
299521
299520
2026-08-15T01:08:56Z
Virinas-code
2884
Implementation for the integer type
299521
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|19677}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python">int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python">BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|19677}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a positive number.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|19677}}, unlike {{Z|13518}} which wouldn't support negative numbers).
embbivey8s3o0eof0lpz17vlxwo77sv
299522
299521
2026-08-15T01:09:44Z
Virinas-code
2884
/* Integer type */ Make code blocks inline
299522
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|19677}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python" inline>int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python" inline>BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|19677}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a positive number.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|19677}}, unlike {{Z|13518}} which wouldn't support negative numbers).
0pwbo5wj8p3ouu01ru7jqqfghhkfft1
299523
299522
2026-08-15T01:10:35Z
Virinas-code
2884
/* Integer type */ Integer inteded, not rational number
299523
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|16683}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python" inline>int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python" inline>BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|16683}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a positive number.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|16683}}, unlike {{Z|13518}} which wouldn't support negative numbers).
8t27rjtizgqk20jmynwfr6x6bau92lq
299524
299523
2026-08-15T01:17:02Z
Virinas-code
2884
/* Integer type */ Natural numbers can be 0
299524
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|16683}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python" inline>int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python" inline>BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|16683}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a non-negatuve integer.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|16683}}, unlike {{Z|13518}} which wouldn't support negative numbers).
kgvildzo5uhwjgeu4xt5qmevl8b4e5j
299525
299524
2026-08-15T01:25:39Z
Virinas-code
2884
/* Implementation */ Implementing a floating-point type
299525
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|16683}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python" inline>int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python" inline>BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|16683}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a non-negatuve integer.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|16683}}, unlike {{Z|13518}} which wouldn't support negative numbers).
=== Floating-point type ===
We propose to make the {{Z|20838}} type built-in. The IEEE 754 standard for floating point numbers is the ideal representation: it is a reference standard that has already been adopted on Wikifunctions. In its current implementation following [[Wikifunctions:Type proposals/float64]], it does however require quite a few different types:
* The {{Z|16659}} enumeration (3 members)
* The {{Z|20825}} enumeration (8 members)
* Both a natural number and an integer type
Our options at the moment are:
# Turn all those types into built-ins
# Change the internal representation of float64
qg9nzm5th3hvv4ghrq4o51idcccmchw
299538
299525
2026-08-15T06:29:37Z
Virinas-code
2884
Clarfiy use of raw bytes for floating point numbers
299538
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|16683}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python" inline>int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python" inline>BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|16683}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a non-negatuve integer.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|16683}}, unlike {{Z|13518}} which wouldn't support negative numbers).
=== Floating-point type ===
We propose to make the {{Z|20838}} type built-in. The IEEE 754 standard for floating point numbers is the ideal representation: it is a reference standard that has already been adopted on Wikifunctions. In its current implementation following [[Wikifunctions:Type proposals/float64]], it does however require quite a few different types:
* The {{Z|16659}} enumeration (3 members)
* The {{Z|20825}} enumeration (8 members)
* Both a natural number and an integer type
Our options at the moment are:
# Turn all those types into built-ins
# Change the internal representation of float64
Considering the need for performant functions, we propose having a different float 64 type whose value is an hexadecimal string representing the raw IEEE 754 byte representation.
==== Converters ====
===== JavaScript =====
The ECMAScript <syntaxhighlight lang="javascript" inline>DataView</syntaxhighlight> offers the required functions to access the raw bytes of a floating point number and format them as hexadecimal:
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num);
return view.getBigUint64(0).toString(16);
}
</syntaxhighlight>
Converting an hexadecimal string back into a floating point number is trivial now:
<syntaxhighlight lang="wikitext">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`));
return view.getFloat64(0);
}
</syntaxhighlight>
===== Python =====
We have to use the <code>struct</code> module in order to access a floating point number's bytes:
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('>d', 666.67).hex()
</syntaxhighlight>
The reverse operation, converting hexadecimal bytes back into a floating point number, is trivial too:
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('>d', bytes.fromhex("4084d55c28f5c28f"))[0]
</syntaxhighlight>
b62ih3zc5etdz1tew4ij1e0kqb33muz
299539
299538
2026-08-15T06:30:08Z
Virinas-code
2884
/* JavaScript */ Fix syntax highlighting
299539
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|16683}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python" inline>int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python" inline>BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|16683}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a non-negatuve integer.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|16683}}, unlike {{Z|13518}} which wouldn't support negative numbers).
=== Floating-point type ===
We propose to make the {{Z|20838}} type built-in. The IEEE 754 standard for floating point numbers is the ideal representation: it is a reference standard that has already been adopted on Wikifunctions. In its current implementation following [[Wikifunctions:Type proposals/float64]], it does however require quite a few different types:
* The {{Z|16659}} enumeration (3 members)
* The {{Z|20825}} enumeration (8 members)
* Both a natural number and an integer type
Our options at the moment are:
# Turn all those types into built-ins
# Change the internal representation of float64
Considering the need for performant functions, we propose having a different float 64 type whose value is an hexadecimal string representing the raw IEEE 754 byte representation.
==== Converters ====
===== JavaScript =====
The ECMAScript <syntaxhighlight lang="javascript" inline>DataView</syntaxhighlight> offers the required functions to access the raw bytes of a floating point number and format them as hexadecimal:
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num);
return view.getBigUint64(0).toString(16);
}
</syntaxhighlight>
Converting an hexadecimal string back into a floating point number is trivial now:
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`));
return view.getFloat64(0);
}
</syntaxhighlight>
===== Python =====
We have to use the <code>struct</code> module in order to access a floating point number's bytes:
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('>d', 666.67).hex()
</syntaxhighlight>
The reverse operation, converting hexadecimal bytes back into a floating point number, is trivial too:
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('>d', bytes.fromhex("4084d55c28f5c28f"))[0]
</syntaxhighlight>
gnom7l28xiyne7l1eo6raz946jw33sh
299540
299539
2026-08-15T06:35:10Z
Virinas-code
2884
/* Converters */ Use Little Endian and clarify that it's arbitrary
299540
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|16683}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python" inline>int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python" inline>BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|16683}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a non-negatuve integer.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|16683}}, unlike {{Z|13518}} which wouldn't support negative numbers).
=== Floating-point type ===
We propose to make the {{Z|20838}} type built-in. The IEEE 754 standard for floating point numbers is the ideal representation: it is a reference standard that has already been adopted on Wikifunctions. In its current implementation following [[Wikifunctions:Type proposals/float64]], it does however require quite a few different types:
* The {{Z|16659}} enumeration (3 members)
* The {{Z|20825}} enumeration (8 members)
* Both a natural number and an integer type
Our options at the moment are:
# Turn all those types into built-ins
# Change the internal representation of float64
Considering the need for performant functions, we propose having a different float 64 type whose value is an hexadecimal string representing the raw IEEE 754 byte representation.
==== Converters ====
[[w:Endianness|Big Endian]] was chosen arbitrarly.
===== JavaScript =====
The ECMAScript <syntaxhighlight lang="javascript" inline>DataView</syntaxhighlight> offers the required functions to access the raw bytes of a floating point number and format them as hexadecimal:
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
Converting an hexadecimal string back into a floating point number is trivial now:
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
===== Python =====
We have to use the <code>struct</code> module in order to access a floating point number's bytes:
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', 666.67).hex()
</syntaxhighlight>
The reverse operation, converting hexadecimal bytes back into a floating point number, is trivial too:
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex("4084d55c28f5c28f"))[0]
</syntaxhighlight>
65at3dg1erngh48mz3vssc9r2dsh0u3
299544
299540
2026-08-15T07:05:13Z
Virinas-code
2884
Write down floating point number proposal
299544
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|16683}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python" inline>int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python" inline>BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|16683}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a non-negatuve integer.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|16683}}, unlike {{Z|13518}} which wouldn't support negative numbers).
=== Floating-point type ===
We propose to make the {{Z|20838}} type built-in. The IEEE 754 standard for floating point numbers is the ideal representation: it is a reference standard that has already been adopted on Wikifunctions. In its current implementation following [[Wikifunctions:Type proposals/float64]], it does however require quite a few different types:
* The {{Z|16659}} enumeration (3 members)
* The {{Z|20825}} enumeration (8 members)
* Both a natural number and an integer type
Our options at the moment are:
# Turn all those types into built-ins
# Change the internal representation of float64
Considering the need for performant functions, we propose having a different float 64 type whose value is an hexadecimal string representing the raw IEEE 754 byte representation.
==== Converters ====
[[w:Endianness|Big Endian]] was chosen arbitrarly.
===== JavaScript =====
The ECMAScript <syntaxhighlight lang="javascript" inline>DataView</syntaxhighlight> offers the required functions to access the raw bytes of a floating point number and format them as hexadecimal:
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
Converting an hexadecimal string back into a floating point number is trivial now:
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
===== Python =====
We have to use the <code>struct</code> module in order to access a floating point number's bytes:
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', 666.67).hex()
</syntaxhighlight>
The reverse operation, converting hexadecimal bytes back into a floating point number, is trivial too:
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex("4084d55c28f5c28f"))[0]
</syntaxhighlight>
== Specifications ==
=== Floating point numbers ===
==== Summary ====
{{void|Short overview of the idea of this Type}}
We propose the creation of a new type, named '''floating point number'''. It is part of the wider proposal to add two new built-in types for numbers. This type would be a built-in type whose ZID is in the 0-99 range. We propose Z85, as it is close to the {{Z|80}} type which is also a number type.
The name '''floating point number''' has be chosen to differentiate this type from {{Z|20838}}. The internal representation used is different: while {{Z|20838}} stores each part of an IEEE 754 floating point number separately, '''floating point number''' simply stores the bytes as hexadecimal in a {{Z|6}} key.
==== Uses ====
{{void|Prompts:
* Why should this exist?
* What kinds of functions would be created using this?
* What standard concepts, if any, does this align with?}}
{{Z|20838}} is already a widely used type<ref>[[Special:WhatLinksHere/Z20838]] returns more than 500 items.</ref>, this proposal simply turns it into a built-in type. The different representation allows faster performance for complex composed functions. Its new built-in nature also permits the creation of built-in functions operating on floating point number, and then permit the creation of pure composition mathematical operations.
This aligns with the standard concept of representing numbers; in that case, real numbers are approximated by floating point numbers. The international widely recoginzed IEEE 754 format is used as it has first-class support in code implementations.
==== Structure ====
{{void|Description of how a value of this type would look like and why}}
This type has a single key, value (K1), whose type is {{Z|6}}. This was done for performance reasons: most operations do not work with individual components of the floating point number, but rather with the number as a whole. It also avoids having to make two new enumerations builtin for the sign and special value.
===== Example values =====
Here is how the number <code>666.67</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "floating point number",
"value": "8fc2f5285cd58440"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z85",
"Z85K1": "8fc2f5285cd58440"
}</syntaxhighlight>
|}
==== Identity ====
Two floating point numbers are the same if the subtraction of their values (Z85K1) is equal to zero. The special case where either is equal to NaN means that they are not equal, even if both are NaN.
==== Converting to code ====
===== Python =====
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', 666.67).hex()
</syntaxhighlight>
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex("4084d55c28f5c28f"))[0]
</syntaxhighlight>
===== JavaScript =====
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
==== Display function ====
{{void|How would a value of this type be displayed on Wikifunctions. Remove this section for types that should not be displayed as a string.}}
The cleanest way to display floating point numbers is using the localized number system. For example, a French user could have the sample number shown above displayed to them as <code>666,67</code>, while an user from the USA could see <code>666.67</code>. A Latin user might see <code>DCLXVI.LXVII</code>.
==== Read function ====
{{void|When entering a value for this type as a string, what format should that string have? Remove this section for types that should not be entered as a string.}}
The input should be interpreted as a localized number in the user's language and then parsed into its IEEE 754 representation.
==== Alternatives ====
{{void|In order to capture the idea presented in the summary, what alternative structures, display functions, read functions, etc. could have made sense too? Please also link to any type proposals that "compete" with this one.}}
# Using the existing float64 type structure, where each part has its own key.
==== Comments ====
''For general comments, please reply to the proposer.''
* {{s}} as proposer. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 07:04, 15 August 2026 (UTC)
cxv9g2e567q2qwhxzqvqaabn87wbvn0
299545
299544
2026-08-15T07:06:26Z
Virinas-code
2884
/* Structure */ Clarify internal format
299545
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|16683}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python" inline>int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python" inline>BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|16683}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a non-negatuve integer.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|16683}}, unlike {{Z|13518}} which wouldn't support negative numbers).
=== Floating-point type ===
We propose to make the {{Z|20838}} type built-in. The IEEE 754 standard for floating point numbers is the ideal representation: it is a reference standard that has already been adopted on Wikifunctions. In its current implementation following [[Wikifunctions:Type proposals/float64]], it does however require quite a few different types:
* The {{Z|16659}} enumeration (3 members)
* The {{Z|20825}} enumeration (8 members)
* Both a natural number and an integer type
Our options at the moment are:
# Turn all those types into built-ins
# Change the internal representation of float64
Considering the need for performant functions, we propose having a different float 64 type whose value is an hexadecimal string representing the raw IEEE 754 byte representation.
==== Converters ====
[[w:Endianness|Big Endian]] was chosen arbitrarly.
===== JavaScript =====
The ECMAScript <syntaxhighlight lang="javascript" inline>DataView</syntaxhighlight> offers the required functions to access the raw bytes of a floating point number and format them as hexadecimal:
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
Converting an hexadecimal string back into a floating point number is trivial now:
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
===== Python =====
We have to use the <code>struct</code> module in order to access a floating point number's bytes:
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', 666.67).hex()
</syntaxhighlight>
The reverse operation, converting hexadecimal bytes back into a floating point number, is trivial too:
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex("4084d55c28f5c28f"))[0]
</syntaxhighlight>
== Specifications ==
=== Floating point numbers ===
==== Summary ====
{{void|Short overview of the idea of this Type}}
We propose the creation of a new type, named '''floating point number'''. It is part of the wider proposal to add two new built-in types for numbers. This type would be a built-in type whose ZID is in the 0-99 range. We propose Z85, as it is close to the {{Z|80}} type which is also a number type.
The name '''floating point number''' has be chosen to differentiate this type from {{Z|20838}}. The internal representation used is different: while {{Z|20838}} stores each part of an IEEE 754 floating point number separately, '''floating point number''' simply stores the bytes as hexadecimal in a {{Z|6}} key.
==== Uses ====
{{void|Prompts:
* Why should this exist?
* What kinds of functions would be created using this?
* What standard concepts, if any, does this align with?}}
{{Z|20838}} is already a widely used type<ref>[[Special:WhatLinksHere/Z20838]] returns more than 500 items.</ref>, this proposal simply turns it into a built-in type. The different representation allows faster performance for complex composed functions. Its new built-in nature also permits the creation of built-in functions operating on floating point number, and then permit the creation of pure composition mathematical operations.
This aligns with the standard concept of representing numbers; in that case, real numbers are approximated by floating point numbers. The international widely recoginzed IEEE 754 format is used as it has first-class support in code implementations.
==== Structure ====
{{void|Description of how a value of this type would look like and why}}
This type has a single key, value (K1), whose type is {{Z|6}}. This key holds a little-endian IEEE 754 number, whose bytes are reprsesented as hexadecimal. This was done for performance reasons: most operations do not work with individual components of the floating point number, but rather with the number as a whole. It also avoids having to make two new enumerations builtin for the sign and special value.
===== Example values =====
Here is how the number <code>666.67</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "floating point number",
"value": "8fc2f5285cd58440"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z85",
"Z85K1": "8fc2f5285cd58440"
}</syntaxhighlight>
|}
==== Identity ====
Two floating point numbers are the same if the subtraction of their values (Z85K1) is equal to zero. The special case where either is equal to NaN means that they are not equal, even if both are NaN.
==== Converting to code ====
===== Python =====
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', 666.67).hex()
</syntaxhighlight>
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex("4084d55c28f5c28f"))[0]
</syntaxhighlight>
===== JavaScript =====
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
==== Display function ====
{{void|How would a value of this type be displayed on Wikifunctions. Remove this section for types that should not be displayed as a string.}}
The cleanest way to display floating point numbers is using the localized number system. For example, a French user could have the sample number shown above displayed to them as <code>666,67</code>, while an user from the USA could see <code>666.67</code>. A Latin user might see <code>DCLXVI.LXVII</code>.
==== Read function ====
{{void|When entering a value for this type as a string, what format should that string have? Remove this section for types that should not be entered as a string.}}
The input should be interpreted as a localized number in the user's language and then parsed into its IEEE 754 representation.
==== Alternatives ====
{{void|In order to capture the idea presented in the summary, what alternative structures, display functions, read functions, etc. could have made sense too? Please also link to any type proposals that "compete" with this one.}}
# Using the existing float64 type structure, where each part has its own key.
==== Comments ====
''For general comments, please reply to the proposer.''
* {{s}} as proposer. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 07:04, 15 August 2026 (UTC)
hkil9tr0vc7dbbjjx9qvs2v6qer4z0z
299548
299545
2026-08-15T07:36:24Z
Smlckz
13902
/* Python */ actually use the parameter
299548
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|16683}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python" inline>int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python" inline>BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|16683}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a non-negatuve integer.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|16683}}, unlike {{Z|13518}} which wouldn't support negative numbers).
=== Floating-point type ===
We propose to make the {{Z|20838}} type built-in. The IEEE 754 standard for floating point numbers is the ideal representation: it is a reference standard that has already been adopted on Wikifunctions. In its current implementation following [[Wikifunctions:Type proposals/float64]], it does however require quite a few different types:
* The {{Z|16659}} enumeration (3 members)
* The {{Z|20825}} enumeration (8 members)
* Both a natural number and an integer type
Our options at the moment are:
# Turn all those types into built-ins
# Change the internal representation of float64
Considering the need for performant functions, we propose having a different float 64 type whose value is an hexadecimal string representing the raw IEEE 754 byte representation.
==== Converters ====
[[w:Endianness|Big Endian]] was chosen arbitrarly.
===== JavaScript =====
The ECMAScript <syntaxhighlight lang="javascript" inline>DataView</syntaxhighlight> offers the required functions to access the raw bytes of a floating point number and format them as hexadecimal:
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
Converting an hexadecimal string back into a floating point number is trivial now:
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
===== Python =====
We have to use the <code>struct</code> module in order to access a floating point number's bytes:
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', 666.67).hex()
</syntaxhighlight>
The reverse operation, converting hexadecimal bytes back into a floating point number, is trivial too:
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex("4084d55c28f5c28f"))[0]
</syntaxhighlight>
== Specifications ==
=== Floating point numbers ===
==== Summary ====
{{void|Short overview of the idea of this Type}}
We propose the creation of a new type, named '''floating point number'''. It is part of the wider proposal to add two new built-in types for numbers. This type would be a built-in type whose ZID is in the 0-99 range. We propose Z85, as it is close to the {{Z|80}} type which is also a number type.
The name '''floating point number''' has be chosen to differentiate this type from {{Z|20838}}. The internal representation used is different: while {{Z|20838}} stores each part of an IEEE 754 floating point number separately, '''floating point number''' simply stores the bytes as hexadecimal in a {{Z|6}} key.
==== Uses ====
{{void|Prompts:
* Why should this exist?
* What kinds of functions would be created using this?
* What standard concepts, if any, does this align with?}}
{{Z|20838}} is already a widely used type<ref>[[Special:WhatLinksHere/Z20838]] returns more than 500 items.</ref>, this proposal simply turns it into a built-in type. The different representation allows faster performance for complex composed functions. Its new built-in nature also permits the creation of built-in functions operating on floating point number, and then permit the creation of pure composition mathematical operations.
This aligns with the standard concept of representing numbers; in that case, real numbers are approximated by floating point numbers. The international widely recoginzed IEEE 754 format is used as it has first-class support in code implementations.
==== Structure ====
{{void|Description of how a value of this type would look like and why}}
This type has a single key, value (K1), whose type is {{Z|6}}. This key holds a little-endian IEEE 754 number, whose bytes are reprsesented as hexadecimal. This was done for performance reasons: most operations do not work with individual components of the floating point number, but rather with the number as a whole. It also avoids having to make two new enumerations builtin for the sign and special value.
===== Example values =====
Here is how the number <code>666.67</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "floating point number",
"value": "8fc2f5285cd58440"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z85",
"Z85K1": "8fc2f5285cd58440"
}</syntaxhighlight>
|}
==== Identity ====
Two floating point numbers are the same if the subtraction of their values (Z85K1) is equal to zero. The special case where either is equal to NaN means that they are not equal, even if both are NaN.
==== Converting to code ====
===== Python =====
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', num).hex()
</syntaxhighlight>
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex(num))[0]
</syntaxhighlight>
===== JavaScript =====
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
==== Display function ====
{{void|How would a value of this type be displayed on Wikifunctions. Remove this section for types that should not be displayed as a string.}}
The cleanest way to display floating point numbers is using the localized number system. For example, a French user could have the sample number shown above displayed to them as <code>666,67</code>, while an user from the USA could see <code>666.67</code>. A Latin user might see <code>DCLXVI.LXVII</code>.
==== Read function ====
{{void|When entering a value for this type as a string, what format should that string have? Remove this section for types that should not be entered as a string.}}
The input should be interpreted as a localized number in the user's language and then parsed into its IEEE 754 representation.
==== Alternatives ====
{{void|In order to capture the idea presented in the summary, what alternative structures, display functions, read functions, etc. could have made sense too? Please also link to any type proposals that "compete" with this one.}}
# Using the existing float64 type structure, where each part has its own key.
==== Comments ====
''For general comments, please reply to the proposer.''
* {{s}} as proposer. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 07:04, 15 August 2026 (UTC)
bf6j689e61jbe7flqyjq9n78629ac0g
299576
299548
2026-08-15T09:21:01Z
Virinas-code
2884
Integer proposal
299576
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|16683}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python" inline>int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python" inline>BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|16683}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a non-negatuve integer.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|16683}}, unlike {{Z|13518}} which wouldn't support negative numbers).
=== Floating-point type ===
We propose to make the {{Z|20838}} type built-in. The IEEE 754 standard for floating point numbers is the ideal representation: it is a reference standard that has already been adopted on Wikifunctions. In its current implementation following [[Wikifunctions:Type proposals/float64]], it does however require quite a few different types:
* The {{Z|16659}} enumeration (3 members)
* The {{Z|20825}} enumeration (8 members)
* Both a natural number and an integer type
Our options at the moment are:
# Turn all those types into built-ins
# Change the internal representation of float64
Considering the need for performant functions, we propose having a different float 64 type whose value is an hexadecimal string representing the raw IEEE 754 byte representation.
==== Converters ====
[[w:Endianness|Big Endian]] was chosen arbitrarly.
===== JavaScript =====
The ECMAScript <syntaxhighlight lang="javascript" inline>DataView</syntaxhighlight> offers the required functions to access the raw bytes of a floating point number and format them as hexadecimal:
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
Converting an hexadecimal string back into a floating point number is trivial now:
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
===== Python =====
We have to use the <code>struct</code> module in order to access a floating point number's bytes:
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', 666.67).hex()
</syntaxhighlight>
The reverse operation, converting hexadecimal bytes back into a floating point number, is trivial too:
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex("4084d55c28f5c28f"))[0]
</syntaxhighlight>
== Specifications ==
=== Integers ===
==== Summary ====
{{void|Short overview of the idea of this Type}}
We propose the creation of a new type, named '''integer'''. It is part of the wider proposal to add two new built-in types for numbers. This type would be a built-in type whose ZID is in the 0-99 range. We propose Z70, as functions in the Z700-Z799 range are numeric operations.
'''Integer''' is similar to the existing {{Z|16683}}, but there are some differences regarding its internal representation.
==== Uses ====
{{void|Prompts:
* Why should this exist?
* What kinds of functions would be created using this?
* What standard concepts, if any, does this align with?}}
There are many integer-like types on Wikifunctions: {{Z|80}}, {{Z|13518}}, {{Z|19677}}... Having them all defined relatively to one standard built-in type improves the type hierarchy, allows further optimisations in the future, and fixes issues regarding built-in dependence on non built-ins.
Integers are then used throughout Wikifunctions, wether for mathematical operations or for other uses (such as getting the length of a list). This new built-in type allows us to have composition of built-ins implementaions for all those functions.
==== Structure ====
{{void|Description of how a value of this type would look like and why}}
This type has a single key, value (Z70K1), whose type is {{Z|6}}. This key holds a little endian lowercase hexadecimal representation of the number described. The string is preceded by a single minus character <code>-</code> if the number is negative. <code>-0</code> is not a valid value: 0 is always positive.
This format was chosen because it is well supported by both available programming languages and should have rather good performance, as hexadecimal notation is close to how numbers are represented in the computer's memory.
===== Example values =====
Here is how the number <code>666</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "integer",
"value": "29a"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z70",
"Z70K1": "29a"
}</syntaxhighlight>
|}
And here is how its opposite <code>-666</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "integer",
"value": "-29a"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z70",
"Z70K1": "-29a"
}</syntaxhighlight>
|}
==== Identity ====
Two integers are equal if and only if their hexadecimal representations are equal.
==== Converting to code ====
===== Python =====
<syntaxhighlight lang="python">
def deserialize(Z70K1: str) -> int:
return int(Z70K1, 16)
</syntaxhighlight>
<syntaxhighlight lang="python">
def serialize(integer: int) -> str:
return f"{integer:x}"
</syntaxhighlight>
===== JavaScript =====
<syntaxhighlight lang="javascript">
function deserialize(Z70K1) {
if (Z70K1.startsWith("-")) {
return -BigInt(`0x${Z70K1.slice(1)}`);
}
return BigInt(`0x${Z70K1}`);
}
</syntaxhighlight>
<syntaxhighlight lang="javascript">
function serialize(big_int) {
return big_int.toString(16);
}
</syntaxhighlight>
==== Display function ====
{{void|How would a value of this type be displayed on Wikifunctions. Remove this section for types that should not be displayed as a string.}}
Integers should be displayed as localized numbers. For example, a French user would see <code>678910</code> as 678 910 while an American user might see 678,910.
==== Read function ====
{{void|When entering a value for this type as a string, what format should that string have? Remove this section for types that should not be entered as a string.}}
The input should be interpreted as a either localized number in the user's language, or as a standard decimal number (without separators).
==== Alternatives ====
{{void|In order to capture the idea presented in the summary, what alternative structures, display functions, read functions, etc. could have made sense too? Please also link to any type proposals that "compete" with this one.}}
# Having a separate Sign key in the type, but that would imply making Sign built-in too and would make conversion slower.
==== Comments ====
''For general comments, please reply to the proposer.''
* {{s}} as proposer. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 09:20, 15 August 2026 (UTC)
=== Floating point numbers ===
==== Summary ====
{{void|Short overview of the idea of this Type}}
We propose the creation of a new type, named '''floating point number'''. It is part of the wider proposal to add two new built-in types for numbers. This type would be a built-in type whose ZID is in the 0-99 range. We propose Z85, as it is close to the {{Z|80}} type which is also a number type.
The name '''floating point number''' has be chosen to differentiate this type from {{Z|20838}}. The internal representation used is different: while {{Z|20838}} stores each part of an IEEE 754 floating point number separately, '''floating point number''' simply stores the bytes as hexadecimal in a {{Z|6}} key.
==== Uses ====
{{void|Prompts:
* Why should this exist?
* What kinds of functions would be created using this?
* What standard concepts, if any, does this align with?}}
{{Z|20838}} is already a widely used type<ref>[[Special:WhatLinksHere/Z20838]] returns more than 500 items.</ref>, this proposal simply turns it into a built-in type. The different representation allows faster performance for complex composed functions. Its new built-in nature also permits the creation of built-in functions operating on floating point number, and then permit the creation of pure composition mathematical operations.
This aligns with the standard concept of representing numbers; in that case, real numbers are approximated by floating point numbers. The international widely recoginzed IEEE 754 format is used as it has first-class support in code implementations.
==== Structure ====
{{void|Description of how a value of this type would look like and why}}
This type has a single key, value (K1), whose type is {{Z|6}}. This key holds a little-endian IEEE 754 number, whose bytes are reprsesented as hexadecimal. This was done for performance reasons: most operations do not work with individual components of the floating point number, but rather with the number as a whole. It also avoids having to make two new enumerations builtin for the sign and special value.
===== Example values =====
Here is how the number <code>666.67</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "floating point number",
"value": "8fc2f5285cd58440"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z85",
"Z85K1": "8fc2f5285cd58440"
}</syntaxhighlight>
|}
==== Identity ====
Two floating point numbers are the same if the subtraction of their values (Z85K1) is equal to zero. The special case where either is equal to NaN means that they are not equal, even if both are NaN.
==== Converting to code ====
===== Python =====
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', num).hex()
</syntaxhighlight>
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex(num))[0]
</syntaxhighlight>
===== JavaScript =====
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
==== Display function ====
{{void|How would a value of this type be displayed on Wikifunctions. Remove this section for types that should not be displayed as a string.}}
The cleanest way to display floating point numbers is using the localized number system. For example, a French user could have the sample number shown above displayed to them as <code>666,67</code>, while an user from the USA could see <code>666.67</code>. A Latin user might see <code>DCLXVI.LXVII</code>.
==== Read function ====
{{void|When entering a value for this type as a string, what format should that string have? Remove this section for types that should not be entered as a string.}}
The input should be interpreted as a localized number in the user's language and then parsed into its IEEE 754 representation.
==== Alternatives ====
{{void|In order to capture the idea presented in the summary, what alternative structures, display functions, read functions, etc. could have made sense too? Please also link to any type proposals that "compete" with this one.}}
# Using the existing float64 type structure, where each part has its own key.
==== Comments ====
''For general comments, please reply to the proposer.''
* {{s}} as proposer. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 07:04, 15 August 2026 (UTC)
ngccgemehgf9butdybdhrjdqiahg0yu
299577
299576
2026-08-15T09:27:00Z
Virinas-code
2884
/* Floating point numbers */ Changed ZID of floating point numbers to be coherent with integers
299577
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|16683}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python" inline>int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python" inline>BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|16683}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a non-negatuve integer.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|16683}}, unlike {{Z|13518}} which wouldn't support negative numbers).
=== Floating-point type ===
We propose to make the {{Z|20838}} type built-in. The IEEE 754 standard for floating point numbers is the ideal representation: it is a reference standard that has already been adopted on Wikifunctions. In its current implementation following [[Wikifunctions:Type proposals/float64]], it does however require quite a few different types:
* The {{Z|16659}} enumeration (3 members)
* The {{Z|20825}} enumeration (8 members)
* Both a natural number and an integer type
Our options at the moment are:
# Turn all those types into built-ins
# Change the internal representation of float64
Considering the need for performant functions, we propose having a different float 64 type whose value is an hexadecimal string representing the raw IEEE 754 byte representation.
==== Converters ====
[[w:Endianness|Big Endian]] was chosen arbitrarly.
===== JavaScript =====
The ECMAScript <syntaxhighlight lang="javascript" inline>DataView</syntaxhighlight> offers the required functions to access the raw bytes of a floating point number and format them as hexadecimal:
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
Converting an hexadecimal string back into a floating point number is trivial now:
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
===== Python =====
We have to use the <code>struct</code> module in order to access a floating point number's bytes:
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', 666.67).hex()
</syntaxhighlight>
The reverse operation, converting hexadecimal bytes back into a floating point number, is trivial too:
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex("4084d55c28f5c28f"))[0]
</syntaxhighlight>
== Specifications ==
=== Integers ===
==== Summary ====
{{void|Short overview of the idea of this Type}}
We propose the creation of a new type, named '''integer'''. It is part of the wider proposal to add two new built-in types for numbers. This type would be a built-in type whose ZID is in the 0-99 range. We propose Z70, as functions in the Z700-Z799 range are numeric operations.
'''Integer''' is similar to the existing {{Z|16683}}, but there are some differences regarding its internal representation.
==== Uses ====
{{void|Prompts:
* Why should this exist?
* What kinds of functions would be created using this?
* What standard concepts, if any, does this align with?}}
There are many integer-like types on Wikifunctions: {{Z|80}}, {{Z|13518}}, {{Z|19677}}... Having them all defined relatively to one standard built-in type improves the type hierarchy, allows further optimisations in the future, and fixes issues regarding built-in dependence on non built-ins.
Integers are then used throughout Wikifunctions, wether for mathematical operations or for other uses (such as getting the length of a list). This new built-in type allows us to have composition of built-ins implementaions for all those functions.
==== Structure ====
{{void|Description of how a value of this type would look like and why}}
This type has a single key, value (Z70K1), whose type is {{Z|6}}. This key holds a little endian lowercase hexadecimal representation of the number described. The string is preceded by a single minus character <code>-</code> if the number is negative. <code>-0</code> is not a valid value: 0 is always positive.
This format was chosen because it is well supported by both available programming languages and should have rather good performance, as hexadecimal notation is close to how numbers are represented in the computer's memory.
===== Example values =====
Here is how the number <code>666</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "integer",
"value": "29a"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z70",
"Z70K1": "29a"
}</syntaxhighlight>
|}
And here is how its opposite <code>-666</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "integer",
"value": "-29a"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z70",
"Z70K1": "-29a"
}</syntaxhighlight>
|}
==== Identity ====
Two integers are equal if and only if their hexadecimal representations are equal.
==== Converting to code ====
===== Python =====
<syntaxhighlight lang="python">
def deserialize(Z70K1: str) -> int:
return int(Z70K1, 16)
</syntaxhighlight>
<syntaxhighlight lang="python">
def serialize(integer: int) -> str:
return f"{integer:x}"
</syntaxhighlight>
===== JavaScript =====
<syntaxhighlight lang="javascript">
function deserialize(Z70K1) {
if (Z70K1.startsWith("-")) {
return -BigInt(`0x${Z70K1.slice(1)}`);
}
return BigInt(`0x${Z70K1}`);
}
</syntaxhighlight>
<syntaxhighlight lang="javascript">
function serialize(big_int) {
return big_int.toString(16);
}
</syntaxhighlight>
==== Display function ====
{{void|How would a value of this type be displayed on Wikifunctions. Remove this section for types that should not be displayed as a string.}}
Integers should be displayed as localized numbers. For example, a French user would see <code>678910</code> as 678 910 while an American user might see 678,910.
==== Read function ====
{{void|When entering a value for this type as a string, what format should that string have? Remove this section for types that should not be entered as a string.}}
The input should be interpreted as a either localized number in the user's language, or as a standard decimal number (without separators).
==== Alternatives ====
{{void|In order to capture the idea presented in the summary, what alternative structures, display functions, read functions, etc. could have made sense too? Please also link to any type proposals that "compete" with this one.}}
# Having a separate Sign key in the type, but that would imply making Sign built-in too and would make conversion slower.
==== Comments ====
''For general comments, please reply to the proposer.''
* {{s}} as proposer. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 09:20, 15 August 2026 (UTC)
=== Floating point numbers ===
==== Summary ====
{{void|Short overview of the idea of this Type}}
We propose the creation of a new type, named '''floating point number'''. It is part of the wider proposal to add two new built-in types for numbers. This type would be a built-in type whose ZID is in the 0-99 range. We propose Z71, as arithmetic functions occupy the Z700-Z999 range.
The name '''floating point number''' has be chosen to differentiate this type from {{Z|20838}}. The internal representation used is different: while {{Z|20838}} stores each part of an IEEE 754 floating point number separately, '''floating point number''' simply stores the bytes as hexadecimal in a {{Z|6}} key.
==== Uses ====
{{void|Prompts:
* Why should this exist?
* What kinds of functions would be created using this?
* What standard concepts, if any, does this align with?}}
{{Z|20838}} is already a widely used type<ref>[[Special:WhatLinksHere/Z20838]] returns more than 500 items.</ref>, this proposal simply turns it into a built-in type. The different representation allows faster performance for complex composed functions. Its new built-in nature also permits the creation of built-in functions operating on floating point number, and then permit the creation of pure composition mathematical operations.
This aligns with the standard concept of representing numbers; in that case, real numbers are approximated by floating point numbers. The international widely recoginzed IEEE 754 format is used as it has first-class support in code implementations.
==== Structure ====
{{void|Description of how a value of this type would look like and why}}
This type has a single key, value (Z71K1), whose type is {{Z|6}}. This key holds a little-endian IEEE 754 number, whose bytes are reprsesented as hexadecimal. This was done for performance reasons: most operations do not work with individual components of the floating point number, but rather with the number as a whole. It also avoids having to make two new enumerations builtin for the sign and special value.
===== Example values =====
Here is how the number <code>666.67</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "floating point number",
"value": "8fc2f5285cd58440"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z71",
"Z71K1": "8fc2f5285cd58440"
}</syntaxhighlight>
|}
==== Identity ====
Two floating point numbers are the same if the subtraction of their values (Z71K1) is equal to zero. The special case where either is equal to NaN means that they are not equal, even if both are NaN.
==== Converting to code ====
===== Python =====
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', num).hex()
</syntaxhighlight>
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex(num))[0]
</syntaxhighlight>
===== JavaScript =====
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
==== Display function ====
{{void|How would a value of this type be displayed on Wikifunctions. Remove this section for types that should not be displayed as a string.}}
The cleanest way to display floating point numbers is using the localized number system. For example, a French user could have the sample number shown above displayed to them as <code>666,67</code>, while an user from the USA could see <code>666.67</code>. A Latin user might see <code>DCLXVI.LXVII</code>.
==== Read function ====
{{void|When entering a value for this type as a string, what format should that string have? Remove this section for types that should not be entered as a string.}}
The input should be interpreted as a localized number in the user's language and then parsed into its IEEE 754 representation.
==== Alternatives ====
{{void|In order to capture the idea presented in the summary, what alternative structures, display functions, read functions, etc. could have made sense too? Please also link to any type proposals that "compete" with this one.}}
# Using the existing float64 type structure, where each part has its own key.
==== Comments ====
''For general comments, please reply to the proposer.''
* {{s}} as proposer. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 07:04, 15 August 2026 (UTC)
ba3sz059d3c5df059yanqonafui2roa
299579
299577
2026-08-15T09:33:40Z
Virinas-code
2884
/* Implementation */ Clarify ZID choice
299579
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|16683}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python" inline>int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python" inline>BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|16683}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a non-negatuve integer.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|16683}}, unlike {{Z|13518}} which wouldn't support negative numbers).
=== Floating-point type ===
We propose to make the {{Z|20838}} type built-in. The IEEE 754 standard for floating point numbers is the ideal representation: it is a reference standard that has already been adopted on Wikifunctions. In its current implementation following [[Wikifunctions:Type proposals/float64]], it does however require quite a few different types:
* The {{Z|16659}} enumeration (3 members)
* The {{Z|20825}} enumeration (8 members)
* Both a natural number and an integer type
Our options at the moment are:
# Turn all those types into built-ins
# Change the internal representation of float64
Considering the need for performant functions, we propose having a different float 64 type whose value is an hexadecimal string representing the raw IEEE 754 byte representation.
==== Converters ====
[[w:Endianness|Big Endian]] was chosen arbitrarly.
===== JavaScript =====
The ECMAScript <syntaxhighlight lang="javascript" inline>DataView</syntaxhighlight> offers the required functions to access the raw bytes of a floating point number and format them as hexadecimal:
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
Converting an hexadecimal string back into a floating point number is trivial now:
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
===== Python =====
We have to use the <code>struct</code> module in order to access a floating point number's bytes:
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', 666.67).hex()
</syntaxhighlight>
The reverse operation, converting hexadecimal bytes back into a floating point number, is trivial too:
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex("4084d55c28f5c28f"))[0]
</syntaxhighlight>
=== ZIDs ===
This proposal includes the creation of multiple new ZObjects, all of which require a statically assigned ZID. In [[Wikifunctions:Function model|the function model documentation]], functions in the range Z700-Z799 are used as sample arithmetic functions. Since many new built-in functions will be included in this proposal, having a dedicated range for them is coherent and avoids taking too much space in the previously used Z800-Z899 space.
To remain coherent with this idea, new core types will be put in the Z70-Z79 range, which is coincidentally free.
== Specifications ==
=== Integers ===
==== Summary ====
{{void|Short overview of the idea of this Type}}
We propose the creation of a new type, named '''integer'''. It is part of the wider proposal to add two new built-in types for numbers. This type would be a built-in type whose ZID is in the 0-99 range. We propose Z70, as functions in the Z700-Z799 range are numeric operations.
'''Integer''' is similar to the existing {{Z|16683}}, but there are some differences regarding its internal representation.
==== Uses ====
{{void|Prompts:
* Why should this exist?
* What kinds of functions would be created using this?
* What standard concepts, if any, does this align with?}}
There are many integer-like types on Wikifunctions: {{Z|80}}, {{Z|13518}}, {{Z|19677}}... Having them all defined relatively to one standard built-in type improves the type hierarchy, allows further optimisations in the future, and fixes issues regarding built-in dependence on non built-ins.
Integers are then used throughout Wikifunctions, wether for mathematical operations or for other uses (such as getting the length of a list). This new built-in type allows us to have composition of built-ins implementaions for all those functions.
==== Structure ====
{{void|Description of how a value of this type would look like and why}}
This type has a single key, value (Z70K1), whose type is {{Z|6}}. This key holds a little endian lowercase hexadecimal representation of the number described. The string is preceded by a single minus character <code>-</code> if the number is negative. <code>-0</code> is not a valid value: 0 is always positive.
This format was chosen because it is well supported by both available programming languages and should have rather good performance, as hexadecimal notation is close to how numbers are represented in the computer's memory.
===== Example values =====
Here is how the number <code>666</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "integer",
"value": "29a"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z70",
"Z70K1": "29a"
}</syntaxhighlight>
|}
And here is how its opposite <code>-666</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "integer",
"value": "-29a"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z70",
"Z70K1": "-29a"
}</syntaxhighlight>
|}
==== Identity ====
Two integers are equal if and only if their hexadecimal representations are equal.
==== Converting to code ====
===== Python =====
<syntaxhighlight lang="python">
def deserialize(Z70K1: str) -> int:
return int(Z70K1, 16)
</syntaxhighlight>
<syntaxhighlight lang="python">
def serialize(integer: int) -> str:
return f"{integer:x}"
</syntaxhighlight>
===== JavaScript =====
<syntaxhighlight lang="javascript">
function deserialize(Z70K1) {
if (Z70K1.startsWith("-")) {
return -BigInt(`0x${Z70K1.slice(1)}`);
}
return BigInt(`0x${Z70K1}`);
}
</syntaxhighlight>
<syntaxhighlight lang="javascript">
function serialize(big_int) {
return big_int.toString(16);
}
</syntaxhighlight>
==== Display function ====
{{void|How would a value of this type be displayed on Wikifunctions. Remove this section for types that should not be displayed as a string.}}
Integers should be displayed as localized numbers. For example, a French user would see <code>678910</code> as 678 910 while an American user might see 678,910.
==== Read function ====
{{void|When entering a value for this type as a string, what format should that string have? Remove this section for types that should not be entered as a string.}}
The input should be interpreted as a either localized number in the user's language, or as a standard decimal number (without separators).
==== Alternatives ====
{{void|In order to capture the idea presented in the summary, what alternative structures, display functions, read functions, etc. could have made sense too? Please also link to any type proposals that "compete" with this one.}}
# Having a separate Sign key in the type, but that would imply making Sign built-in too and would make conversion slower.
==== Comments ====
''For general comments, please reply to the proposer.''
* {{s}} as proposer. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 09:20, 15 August 2026 (UTC)
=== Floating point numbers ===
==== Summary ====
{{void|Short overview of the idea of this Type}}
We propose the creation of a new type, named '''floating point number'''. It is part of the wider proposal to add two new built-in types for numbers. This type would be a built-in type whose ZID is in the 0-99 range. We propose Z71, as arithmetic functions occupy the Z700-Z999 range.
The name '''floating point number''' has be chosen to differentiate this type from {{Z|20838}}. The internal representation used is different: while {{Z|20838}} stores each part of an IEEE 754 floating point number separately, '''floating point number''' simply stores the bytes as hexadecimal in a {{Z|6}} key.
==== Uses ====
{{void|Prompts:
* Why should this exist?
* What kinds of functions would be created using this?
* What standard concepts, if any, does this align with?}}
{{Z|20838}} is already a widely used type<ref>[[Special:WhatLinksHere/Z20838]] returns more than 500 items.</ref>, this proposal simply turns it into a built-in type. The different representation allows faster performance for complex composed functions. Its new built-in nature also permits the creation of built-in functions operating on floating point number, and then permit the creation of pure composition mathematical operations.
This aligns with the standard concept of representing numbers; in that case, real numbers are approximated by floating point numbers. The international widely recoginzed IEEE 754 format is used as it has first-class support in code implementations.
==== Structure ====
{{void|Description of how a value of this type would look like and why}}
This type has a single key, value (Z71K1), whose type is {{Z|6}}. This key holds a little-endian IEEE 754 number, whose bytes are reprsesented as hexadecimal. This was done for performance reasons: most operations do not work with individual components of the floating point number, but rather with the number as a whole. It also avoids having to make two new enumerations builtin for the sign and special value.
===== Example values =====
Here is how the number <code>666.67</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "floating point number",
"value": "8fc2f5285cd58440"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z71",
"Z71K1": "8fc2f5285cd58440"
}</syntaxhighlight>
|}
==== Identity ====
Two floating point numbers are the same if the subtraction of their values (Z71K1) is equal to zero. The special case where either is equal to NaN means that they are not equal, even if both are NaN.
==== Converting to code ====
===== Python =====
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', num).hex()
</syntaxhighlight>
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex(num))[0]
</syntaxhighlight>
===== JavaScript =====
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
==== Display function ====
{{void|How would a value of this type be displayed on Wikifunctions. Remove this section for types that should not be displayed as a string.}}
The cleanest way to display floating point numbers is using the localized number system. For example, a French user could have the sample number shown above displayed to them as <code>666,67</code>, while an user from the USA could see <code>666.67</code>. A Latin user might see <code>DCLXVI.LXVII</code>.
==== Read function ====
{{void|When entering a value for this type as a string, what format should that string have? Remove this section for types that should not be entered as a string.}}
The input should be interpreted as a localized number in the user's language and then parsed into its IEEE 754 representation.
==== Alternatives ====
{{void|In order to capture the idea presented in the summary, what alternative structures, display functions, read functions, etc. could have made sense too? Please also link to any type proposals that "compete" with this one.}}
# Using the existing float64 type structure, where each part has its own key.
==== Comments ====
''For general comments, please reply to the proposer.''
* {{s}} as proposer. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 07:04, 15 August 2026 (UTC)
i31mzbvlktx33lkxcm4eamwvd9rwhsv
299581
299579
2026-08-15T09:36:52Z
Virinas-code
2884
Add final discussion section
299581
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|16683}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python" inline>int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python" inline>BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|16683}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a non-negatuve integer.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|16683}}, unlike {{Z|13518}} which wouldn't support negative numbers).
=== Floating-point type ===
We propose to make the {{Z|20838}} type built-in. The IEEE 754 standard for floating point numbers is the ideal representation: it is a reference standard that has already been adopted on Wikifunctions. In its current implementation following [[Wikifunctions:Type proposals/float64]], it does however require quite a few different types:
* The {{Z|16659}} enumeration (3 members)
* The {{Z|20825}} enumeration (8 members)
* Both a natural number and an integer type
Our options at the moment are:
# Turn all those types into built-ins
# Change the internal representation of float64
Considering the need for performant functions, we propose having a different float 64 type whose value is an hexadecimal string representing the raw IEEE 754 byte representation.
==== Converters ====
[[w:Endianness|Big Endian]] was chosen arbitrarly.
===== JavaScript =====
The ECMAScript <syntaxhighlight lang="javascript" inline>DataView</syntaxhighlight> offers the required functions to access the raw bytes of a floating point number and format them as hexadecimal:
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
Converting an hexadecimal string back into a floating point number is trivial now:
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
===== Python =====
We have to use the <code>struct</code> module in order to access a floating point number's bytes:
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', 666.67).hex()
</syntaxhighlight>
The reverse operation, converting hexadecimal bytes back into a floating point number, is trivial too:
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex("4084d55c28f5c28f"))[0]
</syntaxhighlight>
=== ZIDs ===
This proposal includes the creation of multiple new ZObjects, all of which require a statically assigned ZID. In [[Wikifunctions:Function model|the function model documentation]], functions in the range Z700-Z799 are used as sample arithmetic functions. Since many new built-in functions will be included in this proposal, having a dedicated range for them is coherent and avoids taking too much space in the previously used Z800-Z899 space.
To remain coherent with this idea, new core types will be put in the Z70-Z79 range, which is coincidentally free.
== Specifications ==
=== Integers ===
==== Summary ====
{{void|Short overview of the idea of this Type}}
We propose the creation of a new type, named '''integer'''. It is part of the wider proposal to add two new built-in types for numbers. This type would be a built-in type whose ZID is in the 0-99 range. We propose Z70, as functions in the Z700-Z799 range are numeric operations.
'''Integer''' is similar to the existing {{Z|16683}}, but there are some differences regarding its internal representation.
==== Uses ====
{{void|Prompts:
* Why should this exist?
* What kinds of functions would be created using this?
* What standard concepts, if any, does this align with?}}
There are many integer-like types on Wikifunctions: {{Z|80}}, {{Z|13518}}, {{Z|19677}}... Having them all defined relatively to one standard built-in type improves the type hierarchy, allows further optimisations in the future, and fixes issues regarding built-in dependence on non built-ins.
Integers are then used throughout Wikifunctions, wether for mathematical operations or for other uses (such as getting the length of a list). This new built-in type allows us to have composition of built-ins implementaions for all those functions.
==== Structure ====
{{void|Description of how a value of this type would look like and why}}
This type has a single key, value (Z70K1), whose type is {{Z|6}}. This key holds a little endian lowercase hexadecimal representation of the number described. The string is preceded by a single minus character <code>-</code> if the number is negative. <code>-0</code> is not a valid value: 0 is always positive.
This format was chosen because it is well supported by both available programming languages and should have rather good performance, as hexadecimal notation is close to how numbers are represented in the computer's memory.
===== Example values =====
Here is how the number <code>666</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "integer",
"value": "29a"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z70",
"Z70K1": "29a"
}</syntaxhighlight>
|}
And here is how its opposite <code>-666</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "integer",
"value": "-29a"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z70",
"Z70K1": "-29a"
}</syntaxhighlight>
|}
==== Identity ====
Two integers are equal if and only if their hexadecimal representations are equal.
==== Converting to code ====
===== Python =====
<syntaxhighlight lang="python">
def deserialize(Z70K1: str) -> int:
return int(Z70K1, 16)
</syntaxhighlight>
<syntaxhighlight lang="python">
def serialize(integer: int) -> str:
return f"{integer:x}"
</syntaxhighlight>
===== JavaScript =====
<syntaxhighlight lang="javascript">
function deserialize(Z70K1) {
if (Z70K1.startsWith("-")) {
return -BigInt(`0x${Z70K1.slice(1)}`);
}
return BigInt(`0x${Z70K1}`);
}
</syntaxhighlight>
<syntaxhighlight lang="javascript">
function serialize(big_int) {
return big_int.toString(16);
}
</syntaxhighlight>
==== Display function ====
{{void|How would a value of this type be displayed on Wikifunctions. Remove this section for types that should not be displayed as a string.}}
Integers should be displayed as localized numbers. For example, a French user would see <code>678910</code> as 678 910 while an American user might see 678,910.
==== Read function ====
{{void|When entering a value for this type as a string, what format should that string have? Remove this section for types that should not be entered as a string.}}
The input should be interpreted as a either localized number in the user's language, or as a standard decimal number (without separators).
==== Alternatives ====
{{void|In order to capture the idea presented in the summary, what alternative structures, display functions, read functions, etc. could have made sense too? Please also link to any type proposals that "compete" with this one.}}
# Having a separate Sign key in the type, but that would imply making Sign built-in too and would make conversion slower.
==== Comments ====
''For general comments, please reply to the proposer.''
* {{s}} as proposer. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 09:20, 15 August 2026 (UTC)
=== Floating point numbers ===
==== Summary ====
{{void|Short overview of the idea of this Type}}
We propose the creation of a new type, named '''floating point number'''. It is part of the wider proposal to add two new built-in types for numbers. This type would be a built-in type whose ZID is in the 0-99 range. We propose Z71, as arithmetic functions occupy the Z700-Z999 range.
The name '''floating point number''' has be chosen to differentiate this type from {{Z|20838}}. The internal representation used is different: while {{Z|20838}} stores each part of an IEEE 754 floating point number separately, '''floating point number''' simply stores the bytes as hexadecimal in a {{Z|6}} key.
==== Uses ====
{{void|Prompts:
* Why should this exist?
* What kinds of functions would be created using this?
* What standard concepts, if any, does this align with?}}
{{Z|20838}} is already a widely used type<ref>[[Special:WhatLinksHere/Z20838]] returns more than 500 items.</ref>, this proposal simply turns it into a built-in type. The different representation allows faster performance for complex composed functions. Its new built-in nature also permits the creation of built-in functions operating on floating point number, and then permit the creation of pure composition mathematical operations.
This aligns with the standard concept of representing numbers; in that case, real numbers are approximated by floating point numbers. The international widely recoginzed IEEE 754 format is used as it has first-class support in code implementations.
==== Structure ====
{{void|Description of how a value of this type would look like and why}}
This type has a single key, value (Z71K1), whose type is {{Z|6}}. This key holds a little-endian IEEE 754 number, whose bytes are reprsesented as hexadecimal. This was done for performance reasons: most operations do not work with individual components of the floating point number, but rather with the number as a whole. It also avoids having to make two new enumerations builtin for the sign and special value.
===== Example values =====
Here is how the number <code>666.67</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "floating point number",
"value": "8fc2f5285cd58440"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z71",
"Z71K1": "8fc2f5285cd58440"
}</syntaxhighlight>
|}
==== Identity ====
Two floating point numbers are the same if the subtraction of their values (Z71K1) is equal to zero. The special case where either is equal to NaN means that they are not equal, even if both are NaN.
==== Converting to code ====
===== Python =====
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', num).hex()
</syntaxhighlight>
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex(num))[0]
</syntaxhighlight>
===== JavaScript =====
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
==== Display function ====
{{void|How would a value of this type be displayed on Wikifunctions. Remove this section for types that should not be displayed as a string.}}
The cleanest way to display floating point numbers is using the localized number system. For example, a French user could have the sample number shown above displayed to them as <code>666,67</code>, while an user from the USA could see <code>666.67</code>. A Latin user might see <code>DCLXVI.LXVII</code>.
==== Read function ====
{{void|When entering a value for this type as a string, what format should that string have? Remove this section for types that should not be entered as a string.}}
The input should be interpreted as a localized number in the user's language and then parsed into its IEEE 754 representation.
==== Alternatives ====
{{void|In order to capture the idea presented in the summary, what alternative structures, display functions, read functions, etc. could have made sense too? Please also link to any type proposals that "compete" with this one.}}
# Using the existing float64 type structure, where each part has its own key.
==== Comments ====
''For general comments, please reply to the proposer.''
* {{s}} as proposer. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 07:04, 15 August 2026 (UTC)
== Discussion ==
'''We are aware that what we propose are major breaking changes that could take time and effort to implement.''' We believe that, as its own programming system, Wikifunctions ''needs'' first-class support for a concept as fundamental as numbers; and that this proposal will make further work with numbers easier while opening the door to further improvements. We submit this first proposal for the community to discuss it and to get advice regarding its implementation if it is approved. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 09:36, 15 August 2026 (UTC)
3wozp3yexuqrd4z5t9w9bx22vjz3vyr
299582
299581
2026-08-15T09:50:50Z
Virinas-code
2884
/* ZIDs */ Z7000 for IEEE 754
299582
wikitext
text/x-wiki
'''This is a work in progress draft which is not ready for community submission yet.'''
== Issues ==
=== Regarding {{Z|80}} ===
{{Z|80}} is a {{Z|4}} with a single key: value (Z80K1), which is of type {{Z|13518}}. While {{Z|80}} is a built-in core type with an ID in the <code>Z1</code>--<code>Z99</code> range<ref>[[Wikifunctions:Reserved ZIDs#Ranges]] <code>Z1</code> – <code>Z99</code>: core types.</ref>, {{Z|13518}} is not. Given that {{Z|80}} is pre-defined in the system<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata A number of ZObjects are pre-defined for the Wikifunctions system, and used by the WikiLambda MediaWiki extension as well as the function-orchestrator (and through that, the function-evaluator).</ref><ref name="Z80 initial">[[Special:PermanentLink/32]] Revision as of 2023-07-26T18:29:41 by [[User:WikiLambda system|WikiLambda system]] ''(Initial pre-defined WikiLambda content creation)''</ref>, having it depend on the later defined {{Z|13518}} is problematic.
It should be noted that, initially, a byte's value was stored as a {{Z|6}}<ref name="Z80 initial" />, one of the core builtin types of Wikifunctions. It is also still a {{Z|6}} in the [https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata function-schemata]<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata/-/blob/main/data/CANONICAL/Z80.yaml
<syntaxhighlight lang="yaml">
Z80K1:
$ref: "#/definitions/objects/Z6_byte"
</syntaxhighlight></ref>, which aims to provide a "single version of the truth" regarding what counts as a valid ZObject<ref>https://gitlab.wikimedia.org/repos/abstract-wiki/wikifunctions/function-schemata shared set of JSON schemata for the Wikifunctions project, to achieve a "single version of the truth" on what counts as a structurally valid ZObject, and provide shared utility code</ref>.
{{Z|80}} was changed to use {{Z|13518}} following [[Wikifunctions:Type proposals/Byte]]<ref>[[Wikifunctions:Type proposals/Byte#Alternatives]] The current proposal is Option 3 in the following list of Alternatives. (Option 3) A byte consists of one key that represents the value of the byte. The value is of type natural number, and has to be between the values of 0 and 255, including the edges.</ref>. This proposal highlights the lack of proper support for the {{Z|80}} type when it was defined upon {{Z|6}}, especially regarding code converters. This proposal added two type converters for JavaScript and Python where {{Z|80}} objects would get converted into Python <syntaxhighlight lang="python" inline>int</syntaxhighlight> and JavaScript <syntaxhighlight lang="javascript" inline>Number</syntaxhighlight>. Accordingly, the value's type was changed to {{Z|13518}}.
==== Lessons ====
Having {{Z|80}} be a built-in type is coherent: it is the fundamental unit used to measure and access memory in computing, and the most fundamental representation of a number<ref>[[w:Byte]]</ref>. Having it be defined upon a natural number type is also coherent: a byte represents a single value in the range 0-255, and is represented as a number in other programming languages<ref>[[Wikifunctions:Type proposals/Byte#Python]] The most idiomatic conversion in Python is to convert a Wikifunctions Byte to a Python int.</ref><ref>[[Wikifunctions:Type proposals/Byte#JavaScript]] The most idiomatic conversion in JavaScript is to convert a Wikifunctions Byte to a JavaScript number.</ref>. Hence, we argue that it is not coherent for {{Z|13518}} to not be a built-in. Having a built-in natural number type means that we can keep the preferred representation of having a byte's value stored as a number without breaking the hierarchy of built-ins and non-built-ins.
=== Arithmetic in the composition language ===
The [[Wikifunctions:Glossary#composition|composition]] language, while slow, is the most portable, abstract [[WF:PROG|programming language available on Wikifunctions]]. It defines functions as composition of other functions, which has multiple advantages:
* It is language agnostic. As Wikifunctions renders the composed function calls using the localized function labels, a composition implementation can be read entirely in the user's chosen language, given that the required labels are present. On the contrary, code implementations rely on English keywords<ref>See the [https://docs.python.org/3/reference/lexical_analysis.html#keywords list of Python keywords] and the [https://tc39.es/ecma262/#prod-ReservedWord ECMAScript list of reserved keywords].</ref> and can have inner variable or function names in any language that are not localized.
* It is portable and entirely defined within the scope of the Wikifunctions project, without relying on external specifications and implementations such as with code implementations.
* It serves as a well-understood formalism and a very simple implementation of a function in order to ensure that the other implementations of it are correct<ref>[[Wikifunctions:Function model#Composition]] it allows us to use a well-understood formalism and a very simple implementation of it in order to ensure that the other implementations of Z781/add are correct</ref>. Composition implementations are considered "defining implementations" and are used alongside faster, optimized, but harder to comprehend code implementations.
Ideally, all functions should have an implementation as a composition, or an implementaion as composition of functions which are themselves a composition of built-in, etc. This allows a proper clear definition of all functions, independently of their implementations technicalities.
In its current state, however, all arithmetic functions on Wikifunctions lack such a composition implementation. Let us take a look at {{Z|13521}} for example: all of its composition implementations end up calling {{Z|13578}}, whose only composition implementation relies back on {{Z|13521}}.
This is coherent: given that there is no built-in number type, there is also no built-in numeric operation. But this also implies that none of the [[Wikifunctions:Catalogue/Number operations|many number operations]] on Wikifunctions have a proper, well-defined implementation as composition of built-ins.
==== Lessons ====
Looking at [[Wikifunctions:Catalogue]] reveals that many of the functions on this website are related to arithmetic and mathematics, and hence operate on numbers. Having a built-in number type allows the creation of composition implementations for all those functions, proper, well-defined implementations as composition of built-ins. Given that composition is the language of Wikifunctions, it being incapable of representing most of its functions is incoherent.
== Proposal ==
As we said multiple times over the course of the previous section, we propose the creation of two new built-in types for numbers.
=== Current situation ===
Per the numeric type hierarchy found at [[Template:Type documentation]], we can identify two different type of number types:
* Integers, such as {{Z|80}}, {{Z|13518}}, or {{Z|19677}} (which is a pair of integers). These are usually unbounded. Most of them end up depending on {{Z|13518}}.
* Floating point numbers, such as {{Z|20838}}, or {{Z|33198}} (which is a pair of floating point numbers). These follow the IEEE 754 standard, which means they are bounded and have a limited precision. The parent for these types is {{Z|20838}}.
The only built-in type among these is {{Z|80}}, but as said before, it relies on a non-built-in internal representation.
=== Proposed change ===
* Adding a built-in integer type.
* Adding a built-in IEEE 754 floating point type.
* Adding built-in functions to manipulate these two types.
==== Advantages ====
* Type hierarchy issues about {{Z|80}} depending on non-built-ins are fixed: it now depends on another built-in. It also improves the overall hierarchy, where all number types can be defined upon these two built-ins. This could come in useful for later optimizations (for example, reprensenting numbers without going through conversion to string).
* We can have composition implementations for all mathematical and arithmetic functions, since these are now built-in types they can have built-in functions to work with them.
==== Further views ====
Currently, Wikifunctions only has two terminal types: {{Z|9}} and {{Z|6}}. This means that all types in Wikifunctions end up being represented as strings. Having built-in numbers opens the possibility for later software changes: for example, representing them internally and in the JSON as numbers. Considering the many performance issues of Wikifunctions, this could be interesting in a not-so-far future.
According to the [[Wikifunctions:About|Wikifunctions Mission statement]], we should "Imagine a programming system that allows us to make the next big leap in knowledge representation". Representing something as fundamental as numbers is definitely essential, further renforcing the need for an endorsed built-in number type. Wikifunctions also aims "to create both a well-defined common catalog of functions that can be widely reused and an environment where functions can be quickly combined and executed on the fly"; arithmetic operations and mathematical computations are one of the most common type of functions, and should therefore benefit from first-class support.
== Implementation ==
=== Integer type ===
There are multiple options regarding which integer type should be made built-in:
# The {{Z|80}} type, the only integer type which is bounded.
# The {{Z|13518}} type, which most integer types rely on at the moment.
# The {{Z|16683}} type.
We can look at what Python and ECMAScript do for further inspiration:
* Python has an <syntaxhighlight lang="python" inline>int</syntaxhighlight> type for representing integers; it is signed and unbounded.
* ECMAScript has a <syntaxhighlight lang="python" inline>BigInt</syntaxhighlight> type for representing integers; it is signed and unbounded too.
Considering these, we decided to go with {{Z|16683}} for our integer type.
* {{Z|80}} can be defined by having the validator ensure it is within the 0-255 range.
* {{Z|13518}} can be defined by having the validator ensure it is a non-negatuve integer.
Given this, we can have efficient type converters from and to programming language types, with the added bonus of having all possible values be valid (e.g., if a Python function returns an int, it can always be converted to a valid {{Z|16683}}, unlike {{Z|13518}} which wouldn't support negative numbers).
=== Floating-point type ===
We propose to make the {{Z|20838}} type built-in. The IEEE 754 standard for floating point numbers is the ideal representation: it is a reference standard that has already been adopted on Wikifunctions. In its current implementation following [[Wikifunctions:Type proposals/float64]], it does however require quite a few different types:
* The {{Z|16659}} enumeration (3 members)
* The {{Z|20825}} enumeration (8 members)
* Both a natural number and an integer type
Our options at the moment are:
# Turn all those types into built-ins
# Change the internal representation of float64
Considering the need for performant functions, we propose having a different float 64 type whose value is an hexadecimal string representing the raw IEEE 754 byte representation.
==== Converters ====
[[w:Endianness|Big Endian]] was chosen arbitrarly.
===== JavaScript =====
The ECMAScript <syntaxhighlight lang="javascript" inline>DataView</syntaxhighlight> offers the required functions to access the raw bytes of a floating point number and format them as hexadecimal:
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
Converting an hexadecimal string back into a floating point number is trivial now:
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
===== Python =====
We have to use the <code>struct</code> module in order to access a floating point number's bytes:
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', 666.67).hex()
</syntaxhighlight>
The reverse operation, converting hexadecimal bytes back into a floating point number, is trivial too:
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex("4084d55c28f5c28f"))[0]
</syntaxhighlight>
=== ZIDs ===
This proposal includes the creation of multiple new ZObjects, all of which require a statically assigned ZID. In [[Wikifunctions:Function model|the function model documentation]], functions in the range Z700-Z799 are used as sample arithmetic functions. Since many new built-in functions will be included in this proposal, having a dedicated range for them is coherent and avoids taking too much space in the previously used Z800-Z899 space.
To remain coherent with this idea, new core types will be put in the Z70-Z79 range, which is coincidentally free.
The IEEE 754 standard includes many operations that a system needs to implement to be considered conformant. The Z7000 range could be used for those, as there is more than a hundred of them.
== Specifications ==
=== Integers ===
==== Summary ====
{{void|Short overview of the idea of this Type}}
We propose the creation of a new type, named '''integer'''. It is part of the wider proposal to add two new built-in types for numbers. This type would be a built-in type whose ZID is in the 0-99 range. We propose Z70, as functions in the Z700-Z799 range are numeric operations.
'''Integer''' is similar to the existing {{Z|16683}}, but there are some differences regarding its internal representation.
==== Uses ====
{{void|Prompts:
* Why should this exist?
* What kinds of functions would be created using this?
* What standard concepts, if any, does this align with?}}
There are many integer-like types on Wikifunctions: {{Z|80}}, {{Z|13518}}, {{Z|19677}}... Having them all defined relatively to one standard built-in type improves the type hierarchy, allows further optimisations in the future, and fixes issues regarding built-in dependence on non built-ins.
Integers are then used throughout Wikifunctions, wether for mathematical operations or for other uses (such as getting the length of a list). This new built-in type allows us to have composition of built-ins implementaions for all those functions.
==== Structure ====
{{void|Description of how a value of this type would look like and why}}
This type has a single key, value (Z70K1), whose type is {{Z|6}}. This key holds a little endian lowercase hexadecimal representation of the number described. The string is preceded by a single minus character <code>-</code> if the number is negative. <code>-0</code> is not a valid value: 0 is always positive.
This format was chosen because it is well supported by both available programming languages and should have rather good performance, as hexadecimal notation is close to how numbers are represented in the computer's memory.
===== Example values =====
Here is how the number <code>666</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "integer",
"value": "29a"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z70",
"Z70K1": "29a"
}</syntaxhighlight>
|}
And here is how its opposite <code>-666</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "integer",
"value": "-29a"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z70",
"Z70K1": "-29a"
}</syntaxhighlight>
|}
==== Identity ====
Two integers are equal if and only if their hexadecimal representations are equal.
==== Converting to code ====
===== Python =====
<syntaxhighlight lang="python">
def deserialize(Z70K1: str) -> int:
return int(Z70K1, 16)
</syntaxhighlight>
<syntaxhighlight lang="python">
def serialize(integer: int) -> str:
return f"{integer:x}"
</syntaxhighlight>
===== JavaScript =====
<syntaxhighlight lang="javascript">
function deserialize(Z70K1) {
if (Z70K1.startsWith("-")) {
return -BigInt(`0x${Z70K1.slice(1)}`);
}
return BigInt(`0x${Z70K1}`);
}
</syntaxhighlight>
<syntaxhighlight lang="javascript">
function serialize(big_int) {
return big_int.toString(16);
}
</syntaxhighlight>
==== Display function ====
{{void|How would a value of this type be displayed on Wikifunctions. Remove this section for types that should not be displayed as a string.}}
Integers should be displayed as localized numbers. For example, a French user would see <code>678910</code> as 678 910 while an American user might see 678,910.
==== Read function ====
{{void|When entering a value for this type as a string, what format should that string have? Remove this section for types that should not be entered as a string.}}
The input should be interpreted as a either localized number in the user's language, or as a standard decimal number (without separators).
==== Alternatives ====
{{void|In order to capture the idea presented in the summary, what alternative structures, display functions, read functions, etc. could have made sense too? Please also link to any type proposals that "compete" with this one.}}
# Having a separate Sign key in the type, but that would imply making Sign built-in too and would make conversion slower.
==== Comments ====
''For general comments, please reply to the proposer.''
* {{s}} as proposer. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 09:20, 15 August 2026 (UTC)
=== Floating point numbers ===
==== Summary ====
{{void|Short overview of the idea of this Type}}
We propose the creation of a new type, named '''floating point number'''. It is part of the wider proposal to add two new built-in types for numbers. This type would be a built-in type whose ZID is in the 0-99 range. We propose Z71, as arithmetic functions occupy the Z700-Z999 range.
The name '''floating point number''' has be chosen to differentiate this type from {{Z|20838}}. The internal representation used is different: while {{Z|20838}} stores each part of an IEEE 754 floating point number separately, '''floating point number''' simply stores the bytes as hexadecimal in a {{Z|6}} key.
==== Uses ====
{{void|Prompts:
* Why should this exist?
* What kinds of functions would be created using this?
* What standard concepts, if any, does this align with?}}
{{Z|20838}} is already a widely used type<ref>[[Special:WhatLinksHere/Z20838]] returns more than 500 items.</ref>, this proposal simply turns it into a built-in type. The different representation allows faster performance for complex composed functions. Its new built-in nature also permits the creation of built-in functions operating on floating point number, and then permit the creation of pure composition mathematical operations.
This aligns with the standard concept of representing numbers; in that case, real numbers are approximated by floating point numbers. The international widely recoginzed IEEE 754 format is used as it has first-class support in code implementations.
==== Structure ====
{{void|Description of how a value of this type would look like and why}}
This type has a single key, value (Z71K1), whose type is {{Z|6}}. This key holds a little-endian IEEE 754 number, whose bytes are reprsesented as hexadecimal. This was done for performance reasons: most operations do not work with individual components of the floating point number, but rather with the number as a whole. It also avoids having to make two new enumerations builtin for the sign and special value.
===== Example values =====
Here is how the number <code>666.67</code> would be stored:
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "floating point number",
"value": "8fc2f5285cd58440"
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Z71",
"Z71K1": "8fc2f5285cd58440"
}</syntaxhighlight>
|}
==== Identity ====
Two floating point numbers are the same if the subtraction of their values (Z71K1) is equal to zero. The special case where either is equal to NaN means that they are not equal, even if both are NaN.
==== Converting to code ====
===== Python =====
<syntaxhighlight lang="python">
import struct
def fromNumber(num: float) -> str:
return struct.pack('<d', num).hex()
</syntaxhighlight>
<syntaxhighlight lang="python">
import struct
def toNumber(num: str) -> float:
return struct.unpack('<d', bytes.fromhex(num))[0]
</syntaxhighlight>
===== JavaScript =====
<syntaxhighlight lang="javascript">
function fromNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setFloat64(0, num, true);
return view.getBigUint64(0, true).toString(16);
}
</syntaxhighlight>
<syntaxhighlight lang="javascript">
function toNumber(num) {
const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
view.setBigUint64(0, BigInt(`0x${num}`), true);
return view.getFloat64(0, true);
}
</syntaxhighlight>
==== Display function ====
{{void|How would a value of this type be displayed on Wikifunctions. Remove this section for types that should not be displayed as a string.}}
The cleanest way to display floating point numbers is using the localized number system. For example, a French user could have the sample number shown above displayed to them as <code>666,67</code>, while an user from the USA could see <code>666.67</code>. A Latin user might see <code>DCLXVI.LXVII</code>.
==== Read function ====
{{void|When entering a value for this type as a string, what format should that string have? Remove this section for types that should not be entered as a string.}}
The input should be interpreted as a localized number in the user's language and then parsed into its IEEE 754 representation.
==== Alternatives ====
{{void|In order to capture the idea presented in the summary, what alternative structures, display functions, read functions, etc. could have made sense too? Please also link to any type proposals that "compete" with this one.}}
# Using the existing float64 type structure, where each part has its own key.
==== Comments ====
''For general comments, please reply to the proposer.''
* {{s}} as proposer. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 07:04, 15 August 2026 (UTC)
== Discussion ==
'''We are aware that what we propose are major breaking changes that could take time and effort to implement.''' We believe that, as its own programming system, Wikifunctions ''needs'' first-class support for a concept as fundamental as numbers; and that this proposal will make further work with numbers easier while opening the door to further improvements. We submit this first proposal for the community to discuss it and to get advice regarding its implementation if it is approved. [[User:Virinas-code|Virinas-code]] ([[User talk:Virinas-code|talk]]) 09:36, 15 August 2026 (UTC)
iedzx053p5ujas1ljf9z6x1s7pm8ccv
Z39472
0
90144
299536
2026-08-15T06:24:03Z
99of9
1622
299536
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39472"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z33024",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z13436",
"Z13436K1": "Z26107",
"Z13436K2": {
"Z1K1": "Z18",
"Z18K1": "Z33024K2"
},
"Z13436K3": {
"Z1K1": "Z7",
"Z7K1": "Z13464",
"Z13464K1": "Z36270",
"Z13464K2": {
"Z1K1": "Z18",
"Z18K1": "Z33024K1"
},
"Z13464K3": {
"Z1K1": "Z18",
"Z18K1": "Z33024K2"
}
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "labels of QID list w ltd fallback, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
td35gunl7pcfzhtbefjg5dmdg0d60ra
Z39473
0
90145
299547
2026-08-15T07:36:13Z
Artsiom91
2118
299547
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39473"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39473K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "country name"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z25501",
"Z17K2": "Z39473K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "gender"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z26934",
"Z17K2": "Z39473K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "number"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39473"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Russian county denomym adjective (string input)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Returns demonym adjective of a country, continent, or former country in Russian."
}
]
}
}
9p8ay7ejcwtsrh7vlg31ntvbsxvepjx
299549
299547
2026-08-15T07:41:19Z
Artsiom91
2118
add ru descr
299549
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39473"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z39473K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "country name"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "страна"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z25501",
"Z17K2": "Z39473K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "gender"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "род"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z26934",
"Z17K2": "Z39473K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "number"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "число"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39473"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Russian county denomym adjective (string input)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "русское прилагательное-демоним страны"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Returns demonym adjective of a country, continent, or former country in Russian."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "Возвращает прилагательное-демоним страны, региона или бывшей страны на русском языке."
}
]
}
}
d3yx9jk3s9insvgfo9uuj47zhc5r0o9
Z39474
0
90146
299550
2026-08-15T07:59:11Z
Artsiom91
2118
start
299550
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39474"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39473",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39473(Z39473K1, Z39473K2, Z39473K3):\n country = Z17654K1\n \n exceptional = { # to extend\n \"Англия\": \"английск\",\n \"Армения\": \"армянск\",\n \"Беларусь\": \"белорусск\",\n \"Великобритания\": \"британск\",\n \"Венгрия\": \"венгерск\",\n \"Германия\": \"немецк\",\n \"Грузия\": \"грузинск\",\n \"Дания\": \"датск\",\n \"Литва\": \"литовск\",\n \"Мексика\": \"мексиканск\",\n \"Новергия\": \"норвежск\",\n \"Польша\": \"польск\",\n \"США\": \"амерыканск\",\n \"Финляндия\": \"финск\",\n \"Франция\": \"французск\",\n \"Чехия\": \"чешск\",\n \"Швеция\": \"шведск\"\n }\n \n main = country\n \n if country in exceptional:\n main = exceptional[country]\n \n elif country.endswith(\" империя\"):\n main = country[:-10]\n \n elif country.endswith(\" Республика\"):\n main = country[:-13]\n \n elif country.endswith(\"ы\"):\n main = country[:-1] + \"ск\"\n \n elif country.endswith(\"а\"):\n main = country[:-1] + \"ск\"\n \n elif country.endswith(\"лия\"):\n main = country[:-2] + \"ьск\"\n \n elif country.endswith(\"ния\"):\n main = country[:-2] + \"ск\"\n \n elif country.endswith(\"ия\"):\n main = country[:-2] + \"ийск\"\n \n else:\n main = country + \"ск\"\n\t\n\tif Z39473K3 == Q146786 #plural\n\t return (main + 'ие')\n\t\n\tif Z39473K2 == Q499327 #masculine\n\t return (main + 'ий')\n\t\n\tif Z39473K2 == Q499327 #feminine\n\t return (main + 'ая')\n\t\n\telse #neuter\n\t return (main + 'ое')\n\t"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "русское прилагательное-демоним страны (python)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
ns9owbhpld0iavzh7xxh6mpuhf1ugh1
299558
299550
2026-08-15T08:13:50Z
Artsiom91
2118
to lower
299558
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39474"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39473",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39473(Z39473K1, Z39473K2, Z39473K3):\n country = Z17654K1.lower()\n \n exceptional = { # to extend\n \"англия\": \"английск\",\n \"армения\": \"армянск\",\n \"беларусь\": \"белорусск\",\n \"великобритания\": \"британск\",\n \"венгрия\": \"венгерск\",\n \"германия\": \"немецк\",\n \"грузия\": \"грузинск\",\n \"дания\": \"датск\",\n \"литва\": \"литовск\",\n \"мексика\": \"мексиканск\",\n \"норвегия\": \"норвежск\",\n \"польша\": \"польск\",\n \"сша\": \"американск\",\n \"финляндия\": \"финск\",\n \"франция\": \"французск\",\n \"чехия\": \"чешск\",\n \"швеция\": \"шведск\"\n }\n \n main = country\n \n if country in exceptional:\n main = exceptional[country]\n \n elif country.endswith(\" империя\"):\n main = country[:-10]\n \n elif country.endswith(\" Республика\"):\n main = country[:-13]\n \n elif country.endswith(\"ы\"):\n main = country[:-1] + \"ск\"\n \n elif country.endswith(\"а\"):\n main = country[:-1] + \"ск\"\n \n elif country.endswith(\"лия\"):\n main = country[:-2] + \"ьск\"\n \n elif country.endswith(\"ния\"):\n main = country[:-2] + \"ск\"\n \n elif country.endswith(\"ия\"):\n main = country[:-2] + \"ийск\"\n \n else:\n main = country + \"ск\"\n\t\n\tif Z39473K3 == Q146786 #plural\n\t return (main + 'ие')\n\t\n\tif Z39473K2 == Q499327 #masculine\n\t return (main + 'ий')\n\t\n\tif Z39473K2 == Q499327 #feminine\n\t return (main + 'ая')\n\t\n\telse #neuter\n\t return (main + 'ое')\n\t"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "русское прилагательное-демоним страны (python)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
p3z0f44rx3f7845a4kdzfhzp8yvpzds
299574
299558
2026-08-15T08:40:52Z
Artsiom91
2118
fix
299574
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39474"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39473",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39473(Z39473K1, Z39473K2, Z39473K3):\n country = Z17654K1.lower()\n stem = country\n \n exceptional = { # to extend\n \"англия\": \"английск\",\n \"армения\": \"армянск\",\n \"беларусь\": \"белорусск\",\n \"великобритания\": \"британск\",\n \"венгрия\": \"венгерск\",\n \"германия\": \"немецк\",\n \"грузия\": \"грузинск\",\n \"дания\": \"датск\",\n \"литва\": \"литовск\",\n \"мексика\": \"мексиканск\",\n \"норвегия\": \"норвежск\",\n \"польша\": \"польск\",\n \"сша\": \"американск\",\n \"финляндия\": \"финск\",\n \"франция\": \"французск\",\n \"чехия\": \"чешск\",\n \"швеция\": \"шведск\"\n }\n \n if country in exceptional:\n stem = exceptional[country]\n \n elif country.endswith(\" империя\"):\n stem = country[:-10]\n \n elif country.endswith(\" Республика\"):\n stem = country[:-13]\n \n elif country.endswith(\"ы\"):\n stem = country[:-1] + \"ск\"\n \n elif country.endswith(\"а\"):\n stem = country[:-1] + \"ск\"\n \n elif country.endswith(\"лия\"):\n stem = country[:-2] + \"ьск\"\n \n elif country.endswith(\"ния\"):\n stem = country[:-2] + \"ск\"\n \n elif country.endswith(\"ия\"):\n stem = country[:-2] + \"ийск\"\n \n else:\n stem = country + \"ск\"\n\t\n\tif Z39473K3 == Q146786: #plural\n\t return (stem + 'ие')\n\t\n\tif Z39473K2 == Q499327: #masculine\n\t return (stem + 'ий')\n\t\n\tif Z39473K2 == Q499327: #feminine\n\t return (stem + 'ая')\n\t\n\telse: #neuter\n\t return (stem)\n\t"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "русское прилагательное-демоним страны (python)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
j2tuhqrs9k88p2umeenh982u3fusllk
299575
299574
2026-08-15T09:07:04Z
Artsiom91
2118
fix
299575
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39474"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39473",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39473(Z39473K1, Z39473K2, Z39473K3):\n country = Z17654K1.lower()\n stem = country\n \n exceptional = { # to extend\n \"англия\": \"английск\",\n \"армения\": \"армянск\",\n \"беларусь\": \"белорусск\",\n \"великобритания\": \"британск\",\n \"венгрия\": \"венгерск\",\n \"германия\": \"немецк\",\n \"грузия\": \"грузинск\",\n \"дания\": \"датск\",\n \"литва\": \"литовск\",\n \"мексика\": \"мексиканск\",\n \"норвегия\": \"норвежск\",\n \"польша\": \"польск\",\n \"сша\": \"американск\",\n \"финляндия\": \"финск\",\n \"франция\": \"французск\",\n \"чехия\": \"чешск\",\n \"швеция\": \"шведск\"\n }\n \n if country in exceptional:\n stem = exceptional[country]\n \n elif country.endswith(\" империя\"):\n stem = country[:-10]\n \n elif country.endswith(\" Республика\"):\n stem = country[:-13]\n \n elif country.endswith(\"ы\"):\n stem = country[:-1] + \"ск\"\n \n elif country.endswith(\"а\"):\n stem = country[:-1] + \"ск\"\n \n elif country.endswith(\"лия\"):\n stem = country[:-2] + \"ьск\"\n \n elif country.endswith(\"ния\"):\n stem = country[:-2] + \"ск\"\n \n elif country.endswith(\"ия\"):\n stem = country[:-2] + \"ийск\"\n \n else:\n stem = country + \"ск\"\n\t\n\tif Z39473K3 == Q146786: #plural\n\t return (stem + \"ие\")\n\t\n\tif Z39473K2 == Q499327: #masculine\n\t return (stem + \"ий\")\n\t\n\tif Z39473K2 == Q499327: #feminine\n\t return (stem + \"ая\")\n\t\n\telse: #neuter\n\t return (stem)\n\t"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "русское прилагательное-демоним страны (python)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
1m4esvh09lm86a4wx9wv4nxjk5zplor
299578
299575
2026-08-15T09:32:22Z
Artsiom91
2118
fix
299578
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39474"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39473",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39473(Z39473K1, Z39473K2, Z39473K3):\n country = Z17654K1.lower()\n stem = country\n \n exceptional = { # to extend\n \"англия\": \"английск\",\n \"армения\": \"армянск\",\n \"беларусь\": \"белорусск\",\n \"великобритания\": \"британск\",\n \"венгрия\": \"венгерск\",\n \"германия\": \"немецк\",\n \"грузия\": \"грузинск\",\n \"дания\": \"датск\",\n \"литва\": \"литовск\",\n \"мексика\": \"мексиканск\",\n \"норвегия\": \"норвежск\",\n \"польша\": \"польск\",\n \"сша\": \"американск\",\n \"финляндия\": \"финск\",\n \"франция\": \"французск\",\n \"чехия\": \"чешск\",\n \"швеция\": \"шведск\"\n }\n \n if country in exceptional:\n stem = exceptional[country]\n \n elif country.endswith(\" империя\"):\n stem = country[:-10]\n \n elif country.endswith(\" республика\"):\n stem = country[:-13]\n \n elif country.endswith(\"ы\"):\n stem = country[:-1] + \"ск\"\n \n elif country.endswith(\"а\"):\n stem = country[:-1] + \"ск\"\n \n elif country.endswith(\"лия\"):\n stem = country[:-2] + \"ьск\"\n \n elif country.endswith(\"ния\"):\n stem = country[:-2] + \"ск\"\n \n elif country.endswith(\"ия\"):\n stem = country[:-2] + \"ийск\"\n \n else:\n stem = country + \"ск\"\n\t\n\tif Z39473K3 == \"Q146786\": #plural\n\t return (stem + \"ие\")\n\t\n\tif Z39473K2 == \"Q499327\": #masculine\n\t return (stem + \"ий\")\n\t\n\tif Z39473K2 == \"Q499327\": #feminine\n\t return (stem + \"ая\")\n\t\n\telse: #neuter\n\t return (stem)\n\t"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "русское прилагательное-демоним страны (python)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
q4s3b84snwm0jjsqujhvtog5kcaubf9
299585
299578
2026-08-15T10:04:32Z
Artsiom91
2118
fix number and gender
299585
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39474"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39473",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39473(Z39473K1, Z39473K2, Z39473K3):\n country = Z17654K1.lower()\n stem = country\n \n exceptional = { # to extend\n \"англия\": \"английск\",\n \"армения\": \"армянск\",\n \"беларусь\": \"белорусск\",\n \"великобритания\": \"британск\",\n \"венгрия\": \"венгерск\",\n \"германия\": \"немецк\",\n \"грузия\": \"грузинск\",\n \"дания\": \"датск\",\n \"литва\": \"литовск\",\n \"мексика\": \"мексиканск\",\n \"норвегия\": \"норвежск\",\n \"польша\": \"польск\",\n \"сша\": \"американск\",\n \"финляндия\": \"финск\",\n \"франция\": \"французск\",\n \"чехия\": \"чешск\",\n \"швеция\": \"шведск\"\n }\n \n if country in exceptional:\n stem = exceptional[country]\n \n elif country.endswith(\" империя\"):\n stem = country[:-10]\n \n elif country.endswith(\" республика\"):\n stem = country[:-13]\n \n elif country.endswith(\"ы\"):\n stem = country[:-1] + \"ск\"\n \n elif country.endswith(\"а\"):\n stem = country[:-1] + \"ск\"\n \n elif country.endswith(\"лия\"):\n stem = country[:-2] + \"ьск\"\n \n elif country.endswith(\"ния\"):\n stem = country[:-2] + \"ск\"\n \n elif country.endswith(\"ия\"):\n stem = country[:-2] + \"ийск\"\n \n else:\n stem = country + \"ск\"\n\t\n\n\tmatch Z39473K3.Z26934K1.Z6091K1: # Match number\n\t\tcase \"Q146786\": # Plural\n return (stem + \"ие\")\n\t\tcase _:\n\t match Z39473K2.Z25501K1.Z6091K1:\n\t case \"Q499327\": #masculine\n return (stem + \"ий\")\n\t case \"Q1775415\": #feminine\n return (stem + \"ий\")\n\t case _: #neuter\n\t return (stem + \"ое\")\n\t"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "русское прилагательное-демоним страны (python)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
ap9pzh4mzyty921gap3p640i4ylc055
299586
299585
2026-08-15T10:17:58Z
Artsiom91
2118
fix
299586
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39474"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39473",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39473(Z39473K1, Z39473K2, Z39473K3):\n country = Z17654K1.lower()\n stem = country\n \n exceptional = { # to extend\n \"англия\": \"английск\",\n \"армения\": \"армянск\",\n \"беларусь\": \"белорусск\",\n \"великобритания\": \"британск\",\n \"венгрия\": \"венгерск\",\n \"германия\": \"немецк\",\n \"грузия\": \"грузинск\",\n \"дания\": \"датск\",\n \"литва\": \"литовск\",\n \"мексика\": \"мексиканск\",\n \"норвегия\": \"норвежск\",\n \"польша\": \"польск\",\n \"сша\": \"американск\",\n \"финляндия\": \"финск\",\n \"франция\": \"французск\",\n \"чехия\": \"чешск\",\n \"швеция\": \"шведск\"\n }\n \n if country in exceptional:\n stem = exceptional[country]\n \n elif country.endswith(\" империя\"):\n stem = country[:-10]\n \n elif country.endswith(\" республика\"):\n stem = country[:-13]\n \n elif country.endswith(\"ы\"):\n stem = country[:-1] + \"ск\"\n \n elif country.endswith(\"а\"):\n stem = country[:-1] + \"ск\"\n \n elif country.endswith(\"лия\"):\n stem = country[:-2] + \"ьск\"\n \n elif country.endswith(\"ния\"):\n stem = country[:-2] + \"ск\"\n\n elif country.endswith(\"ия\"):\n stem = country[:-2] + \"ийск\"\n\n else:\n stem = country + \"ск\"\n\n match Z39473K3.Z26934K1.Z6091K1:\n case \"Q146786\": # Plural\n return (stem + \"ие\")\n case _:\n match Z39473K2.Z25501K1.Z6091K1:\n\t case \"Q499327\": #masculine\n return (stem + \"ий\")\n\t case \"Q1775415\": #feminine\n return (stem + \"ий\")\n\t case _: #neuter\n\t return (stem + \"ое\")\n\t"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "русское прилагательное-демоним страны (python)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
m6oa80krauzv4yoinzpnfn9c1oy9kb6
299587
299586
2026-08-15T10:42:45Z
Artsiom91
2118
add special cases
299587
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39474"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39473",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39473(Z39473K1, Z39473K2, Z39473K3):\n country = Z39473K1.lower()\n stem = country\n \n exceptional = { # to extend\n \"англия\": \"английск\",\n \"австрия\": \"австрийск\",\n \"армения\": \"армянск\",\n \"беларусь\": \"белорусск\",\n \"великобритания\": \"британск\",\n \"венгрия\": \"венгерск\",\n \"германия\": \"немецк\",\n \"греция\": \"греческ\",\n \"дания\": \"датск\",\n \"италия\": \"итальянск\",\n \"литва\": \"литовск\",\n \"мексика\": \"мексиканск\",\n \"норвегия\": \"норвежск\",\n \"польша\": \"польск\",\n \"сирия\": \"сирийск\",\n \"словакия\": \"словацк\",\n \"сша\": \"американск\",\n \"финляндия\": \"финск\",\n \"франция\": \"французск\",\n \"чехия\": \"чешск\",\n \"швеция\": \"шведск\"\n }\n \n if country in exceptional:\n stem = exceptional[country]\n \n elif country.endswith(\" империя\"):\n stem = country[:-10]\n \n elif country.endswith(\" республика\"):\n stem = country[:-13]\n \n elif country.endswith(\"ы\"):\n stem = country[:-1] + \"ск\"\n \n elif country.endswith(\"а\"):\n stem = country[:-1] + \"ск\"\n \n elif country.endswith(\"лия\"):\n stem = country[:-2] + \"ьск\"\n \n elif country.endswith(\"ния\"):\n stem = country[:-2] + \"ск\"\n\n elif country.endswith(\"сия\"):\n stem = country[:-2] + \"ийск\"\n \n elif country.endswith(\"зия\"):\n stem = country[:-2] + \"ийск\"\n\n elif country.endswith(\"дия\"):\n stem = country[:-2] + \"ийск\"\n\n elif country.endswith(\"ия\"):\n stem = country[:-2] + \"ск\"\n\n else:\n stem = country + \"ск\"\n\n match Z39473K3.Z26934K1.Z6091K1:\n case \"Q146786\": # Plural\n return (stem + \"ие\")\n case _:\n match Z39473K2.Z25501K1.Z6091K1:\n\t case \"Q499327\": #masculine\n return (stem + \"ий\")\n\t case \"Q1775415\": #feminine\n return (stem + \"ий\")\n\t case _: #neuter\n\t return (stem + \"ое\")\n\t"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "русское прилагательное-демоним страны (python)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
3p7uv8sz5hz1mnkjlze2vved3pfv9ym
299592
299587
2026-08-15T10:55:39Z
Artsiom91
2118
add special cases
299592
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39474"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39473",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z39473(Z39473K1, Z39473K2, Z39473K3):\n country = Z39473K1.lower()\n stem = country\n \n exceptional = { # to extendм\n \"абхазия\": \"абхазск\",\n \"австралия\": \"австралийск\",\n \"англия\": \"английск\",\n \"австрия\": \"австрийск\",\n \"армения\": \"армянск\",\n \"беларусь\": \"белорусск\",\n \"великобритания\": \"британск\",\n \"венгрия\": \"венгерск\",\n \"германия\": \"немецк\",\n \"греция\": \"греческ\",\n \"дания\": \"датск\",\n \"зимбабве\": \"зимбабвийск\",\n \"индия\": \"индийск\",\n \"италия\": \"итальянск\",\n \"кения\": \"кенийск\",\n \"коста-рика\": \"костариканск\",\n \"кот-д’ивуар\": \"ивуарийск\",\n \"литва\": \"литовск\",\n \"марокко\": \"марокканск\",\n \"мьянма\": \"мьянманск\",\n \"мексика\": \"мексиканск\",\n \"новая зеландия\": \"новозеландск\",\n \"норвегия\": \"норвежск\",\n \"польша\": \"польск\",\n \"сан-марино\": \"сан-маринск\",\n \"сербия\": \"сербск\",\n \"сирия\": \"сирийск\",\n \"словакия\": \"словацк\",\n \"сша\": \"американск\",\n \"финляндия\": \"финск\",\n \"франция\": \"французск\",\n \"чехия\": \"чешск\",\n \"швеция\": \"шведск\"\n }\n \n if country in exceptional:\n stem = exceptional[country]\n \n elif country.endswith(\" империя\"):\n stem = country[:-10]\n \n elif country.endswith(\" республика\"):\n stem = country[:-13]\n \n elif country.endswith(\"ы\"):\n stem = country[:-1] + \"ск\"\n \n elif country.endswith(\"ла\"):\n stem = country[:-1] + \"ьск\"\n \n elif country.endswith(\"а\"):\n stem = country[:-1] + \"ск\"\n \n elif country.endswith(\"о\"):\n stem = country[:-1] + \"ск\"\n \n elif country.endswith(\"лия\"):\n stem = country[:-2] + \"ьск\"\n \n elif country.endswith(\"ния\"):\n stem = country[:-2] + \"ск\"\n\n elif country.endswith(\"бия\"):\n stem = country[:-2] + \"ийск\"\n \n elif country.endswith(\"сия\"):\n stem = country[:-2] + \"ийск\"\n \n elif country.endswith(\"зия\"):\n stem = country[:-2] + \"ийск\"\n\n elif country.endswith(\"ия\"):\n stem = country[:-2] + \"ск\"\n\n else:\n stem = country + \"ск\"\n\n match Z39473K3.Z26934K1.Z6091K1:\n case \"Q146786\": # Plural\n return (stem + \"ие\")\n case _:\n match Z39473K2.Z25501K1.Z6091K1:\n\t case \"Q499327\": #masculine\n return (stem + \"ий\")\n\t case \"Q1775415\": #feminine\n return (stem + \"ая\")\n\t case _: #neuter\n\t return (stem + \"ое\")\n\t"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "русское прилагательное-демоним страны (python)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
4qsko8z8owbo5fun2f6r5606vad5msb
Translations:Wikifunctions:Status updates/2026-08-13/7/de
1198
90147
299551
2026-08-15T08:03:11Z
Ameisenigel
44
Created page with "=== Dokument für Communitys zur Bekundung ihres Interesses an der Abstrakten Wikipedia ==="
299551
wikitext
text/x-wiki
=== Dokument für Communitys zur Bekundung ihres Interesses an der Abstrakten Wikipedia ===
2ue864dzwqre6y2bbcb19lwhevxw64o
Translations:Wikifunctions:Status updates/2026-08-13/31/de
1198
90148
299553
2026-08-15T08:05:18Z
Ameisenigel
44
Created page with "Wenn deine Sprachcommunity oder eine, die du kennst, daran interessiert ist, die Abstrakte Wikipedia zu erkunden, haben wir eine [[$1|erste Seite]] erstellt, die erläutert, was dich erwartet, wie eine Beteiligung aussehen könnte und wie du dein Interesse bekunden kannst. Wir freuen uns darauf, von dir zu hören!"
299553
wikitext
text/x-wiki
Wenn deine Sprachcommunity oder eine, die du kennst, daran interessiert ist, die Abstrakte Wikipedia zu erkunden, haben wir eine [[$1|erste Seite]] erstellt, die erläutert, was dich erwartet, wie eine Beteiligung aussehen könnte und wie du dein Interesse bekunden kannst. Wir freuen uns darauf, von dir zu hören!
l93f6xugij3ndie41134ms3jf16x7de
Z39475
0
90149
299555
2026-08-15T08:05:43Z
Artsiom91
2118
new testcase
299555
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39475"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39473",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39473",
"Z39473K1": "Россия",
"Z39473K2": {
"Z1K1": "Z25501",
"Z25501K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q499327"
}
},
"Z39473K3": {
"Z1K1": "Z26934",
"Z26934K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q110786"
}
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "российский"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "Россия → российский"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
4r6iujdj3pfa6yauldrajkdibxjls1u
Z39476
0
90150
299556
2026-08-15T08:06:52Z
Artsiom91
2118
new testcase
299556
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39476"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39473",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39473",
"Z39473K1": "Италия",
"Z39473K2": {
"Z1K1": "Z25501",
"Z25501K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q1775415"
}
},
"Z39473K3": {
"Z1K1": "Z26934",
"Z26934K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q110786"
}
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "итальянская"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "Италия → итальянская"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
7u7jr2kvj34hyo20g4ab3o0k5u6k60c
Z39477
0
90151
299557
2026-08-15T08:09:42Z
Artsiom91
2118
new testcase
299557
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39477"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39473",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39473",
"Z39473K1": "Украина",
"Z39473K2": {
"Z1K1": "Z25501",
"Z25501K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q499327"
}
},
"Z39473K3": {
"Z1K1": "Z26934",
"Z26934K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q146786"
}
}
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z866",
"Z866K2": "украинские"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "Украина → украинские"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
6swyymod5x8gd1tq3y0oj4nryt4hjye
Z39478
0
90152
299567
2026-08-15T08:21:14Z
Jsamwrites
938
299567
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39478"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39478K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
}
],
"Z8K2": "Z40",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39478"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "French lexical form requires elision"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
6zlan5orfkr0aek5sv0jsaqwh6gbxft
299573
299567
2026-08-15T08:26:23Z
Jsamwrites
938
Added Z39479 to the approved list of implementations
299573
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39478"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39478K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
}
],
"Z8K2": "Z40",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z39479"
],
"Z8K5": "Z39478"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "French lexical form requires elision"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
miclkiucrnfsyz3qqhe5ns2dz0uouim
Z39479
0
90153
299570
2026-08-15T08:25:51Z
Jsamwrites
938
basic
299570
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39479"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39478",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z10196",
"Z10196K1": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z18",
"Z18K1": "Z39478K1"
},
"Z39422K2": [
"Z6091"
],
"Z39422K3": "Z1004"
}
},
"Z10196K2": "^[b-df-gj-np-tv-xzB-DF-GJ-NP-TV-XZ]"
},
"Z802K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z802K3": {
"Z1K1": "Z40",
"Z40K1": "Z41"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
o5bu53pfbxv1czrhv9bcghvz8bzboni
299571
299570
2026-08-15T08:26:04Z
Jsamwrites
938
299571
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39479"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39478",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z802",
"Z802K1": {
"Z1K1": "Z7",
"Z7K1": "Z10196",
"Z10196K1": {
"Z1K1": "Z7",
"Z7K1": "Z14396",
"Z14396K1": {
"Z1K1": "Z7",
"Z7K1": "Z39422",
"Z39422K1": {
"Z1K1": "Z18",
"Z18K1": "Z39478K1"
},
"Z39422K2": [
"Z6091"
],
"Z39422K3": "Z1004"
}
},
"Z10196K2": "^[b-df-gj-np-tv-xzB-DF-GJ-NP-TV-XZ]"
},
"Z802K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z802K3": {
"Z1K1": "Z40",
"Z40K1": "Z41"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "French lexical form requires elision, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
a570klgr8w4co420v8yzzfunytczcug
Z39480
0
90154
299583
2026-08-15T09:53:49Z
99of9
1622
299583
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39480"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z38411",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z38411",
"Z38411K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q55771891"
},
"Z38411K2": {
"Z1K1": "Z40",
"Z40K1": "Z41"
},
"Z38411K3": {
"Z1K1": "Z6091",
"Z6091K1": "Q192613"
},
"Z38411K4": "Z1113"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z14392",
"Z14392K2": {
"Z1K1": "Z11",
"Z11K1": "Z1113",
"Z11K2": " It shares borders with Bajool, Bouldercombe, Port Alma, Port Curtis, Nerimbera and Nankin."
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "[en-au] Midgee borders"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
4m1v7vrcjp7z9bm1xfi55q8jhwa86rp
299597
299583
2026-08-15T11:12:27Z
99of9
1622
new signature
299597
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39480"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z38411",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z38411",
"Z38411K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q55771891"
},
"Z38411K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q17985717"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q17001625"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q7230471"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q31039436"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q24189336"
},
{
"Z1K1": "Z6091",
"Z6091K1": "Q31202277"
}
],
"Z38411K3": {
"Z1K1": "Z40",
"Z40K1": "Z41"
},
"Z38411K4": {
"Z1K1": "Z6091",
"Z6091K1": "Q192613"
},
"Z38411K5": "Z1113"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z14392",
"Z14392K2": {
"Z1K1": "Z11",
"Z11K1": "Z1113",
"Z11K2": " It shares borders with Bajool, Bouldercombe, Port Alma, Port Curtis, Nerimbera and Nankin."
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "[en-au] Midgee borders"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
73n435x8vp5i7hd0jj7ihmeac9rth6t
Z39481
0
90155
299611
2026-08-15T11:39:36Z
99of9
1622
299611
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39481"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39481K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39481K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "list of neighbours"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39481K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39481K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39481K5",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z39481"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence (configurable)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "for an automatic version drawing from Wikidata, use Z39191"
}
]
}
}
ntxgjwyxl90enry6jiiivdzs4j07m5s
299613
299611
2026-08-15T11:41:23Z
99of9
1622
Added Z39482 to the approved list of implementations
299613
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39481"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39481K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39481K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "list of neighbours"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39481K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39481K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39481K5",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z39482"
],
"Z8K5": "Z39481"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence (configurable)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "for an automatic version drawing from Wikidata, use Z39191"
}
]
}
}
gx9xtt4flp39f5m7m9lk5qiy8nj20ln
299614
299613
2026-08-15T11:42:54Z
99of9
1622
299614
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39481"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39481K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39481K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "list of neighbours"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39481K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39481K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39481K5",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z39482"
],
"Z8K5": "Z39481"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence (choosing list)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "for an automatic version drawing from Wikidata, use Z39191"
}
]
}
}
adpjcssza563jyz9lqkoxoarjlo5iwh
299620
299614
2026-08-15T11:53:36Z
99of9
1622
Added Z39484 to the approved list of test cases
299620
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39481"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39481K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6091"
},
"Z17K2": "Z39481K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "list of neighbours"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z40",
"Z17K2": "Z39481K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity repeated?"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z39481K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "tense"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z39481K5",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z39484"
],
"Z8K4": [
"Z14",
"Z39482"
],
"Z8K5": "Z39481"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with-sentence (choosing list)"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "for an automatic version drawing from Wikidata, use Z39191"
}
]
}
}
2kqivbsudbrwh9uq4g0owwlo9gkns51
Z39482
0
90156
299612
2026-08-15T11:41:07Z
99of9
1622
299612
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39482"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39481",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z37464",
"Z37464K1": {
"Z1K1": "Z7",
"Z7K1": "Z38425",
"Z38425K1": {
"Z1K1": "Z18",
"Z18K1": "Z39481K1"
},
"Z38425K2": {
"Z1K1": "Z18",
"Z18K1": "Z39481K2"
},
"Z38425K3": {
"Z1K1": "Z18",
"Z18K1": "Z39481K3"
},
"Z38425K4": {
"Z1K1": "Z18",
"Z18K1": "Z39481K4"
},
"Z38425K5": {
"Z1K1": "Z18",
"Z18K1": "Z39481K5"
}
},
"Z37464K2": {
"Z1K1": "Z6",
"Z6K1": "Z38424"
},
"Z37464K3": {
"Z1K1": "Z18",
"Z18K1": "Z39481K2"
},
"Z37464K4": {
"Z1K1": "Z18",
"Z18K1": "Z39481K2"
},
"Z37464K5": {
"Z1K1": "Z18",
"Z18K1": "Z39481K5"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with sentence, compose"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
1nszhi2qqmcwg6xll0mt3plu5zkbmol
Z39483
0
90157
299615
2026-08-15T11:44:06Z
99of9
1622
299615
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39483"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z39191",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z39481",
"Z39481K1": {
"Z1K1": "Z18",
"Z18K1": "Z39191K1"
},
"Z39481K2": {
"Z1K1": "Z7",
"Z7K1": "Z22978",
"Z22978K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z39191K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P47"
}
]
},
"Z22978K2": {
"Z1K1": "Z6092",
"Z6092K1": "P47"
}
},
"Z39481K3": {
"Z1K1": "Z18",
"Z18K1": "Z39191K2"
},
"Z39481K4": {
"Z1K1": "Z18",
"Z18K1": "Z39191K3"
},
"Z39481K5": {
"Z1K1": "Z18",
"Z18K1": "Z39191K4"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "shares border with auto-sentence, via choice"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
r2kajzb8pwbx4s3uirex79mqzvhju3p
Z39484
0
90158
299619
2026-08-15T11:53:14Z
99of9
1622
299619
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z39484"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z39481",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z39481",
"Z39481K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q94586595"
},
"Z39481K2": [
"Z6091",
{
"Z1K1": "Z6091",
"Z6091K1": "Q1294629"
}
],
"Z39481K3": {
"Z1K1": "Z40",
"Z40K1": "Z42"
},
"Z39481K4": {
"Z1K1": "Z6091",
"Z6091K1": "Q1994301"
},
"Z39481K5": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z877",
"Z877K2": {
"Z1K1": "Z89",
"Z89K1": "Judea shared a border with \u003Ca href=\"https://abstract.wikipedia.org/wiki/Q1294629\"\u003ESamaria\u003C/a\u003E."
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Judea shared a border with Samaria."
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
a8hcto2cyin16v1wenc3yaw6id7v3ss