Jump to content

Wikifunctions:Suggest a function

From Wikifunctions

Do you have an idea for a new function? Suggest it here! It may help to refer to our glossary.

You can create a function right away if you have the user-rights.

If a function requires a new type, consider proposing it.

Note that for now we only support a limited number of types as input and output types of functions. More types are coming in the next few months. For the full list, see WF:Type.

Once created, consider adding new Functions to the catalogue.

Proposed functions requiring only available types

String

String character discard functions

String character replacement functions

String search functions

String escaping and unescaping functions

String encoding and decoding functions

String presentation functions

String colour notation functions

String notation validation checks

String validation checks

String analysis functions

Monolingual text

String Wikitext operations

...

Natural number

Integer

Byte

See existing Byte functions in catalogue.

  • next byte without overflow: byte → byte
  • previous byte without overflow: byte → byte
  • next byte by Gray code: byte → byte
  • previous byte by Gray code: byte → byte
  • get nth bit as Boolean: byte, natural number → boolean
Done at get nth bit as Boolean (Z25426): Get n-th bit of a byte n=0 is the least significant bit.
  • highest bit set: byte → boolean
Done at is highest bit set (Z25540): Description missing.
  • lowest bit set: byte → boolean
Done at is lowest bit set (Z25548): Description missing
  • all bits set: byte → boolean
  • no bits set: byte → boolean
  • set nth bit: byte, natural number → byte
Done at set nth bit (Z25462): Description missing.
  • clear nth bit: byte, natural number → byte
Done at clear nth bit (Z25472): Description missing.
  • switch nth bit: byte, natural number → byte
Done at switch nth bit (Z25467): Description missing.
Done at reverse byte (Z25585): Reverses a byte.
  • right shift: byte → byte
  • left shift: byte → byte
  • right shift by n: byte, natural number → byte
  • left shift by n: byte, natural number → byte
  • right shift as ring: byte → byte
  • left shift as ring: byte → byte
  • right shift by n as ring: byte, natural number → byte
  • left shift by n as ring: byte, natural number → byte
  • how many bits set: byte → natural number
Done at how many bits set (Z25503): Returns the number of bits set to 1 in a byte.

Unicode code point

See existing code point functions in catalogue.

  • Codepoint to list of bytes for UTF-8
  • Codepoint to list of bytes for UTF-16
  • Codepoint to list of bytes for UTF-32

Object

List

Basic list/iterable functions

Done for shifting by 1 at Circular shift left (Z25526): moves the first element of the list to the end, and moves the remaining elements one position to the left and Circular shift right (Z22179): move the last element of the list to the start, and move all the rest one to the right

Complex list functions

CSV list operations

Functions with functions as arguments

Gregorian calendar date

See catalogue of calendar date functions for existing functions.

Gregorian year

See catalogue of year functions for existing functions.

Morphological functions

morphology is the part of linguistics that studies how language parts are 'shaped' and change diachronically and when inflected. Hausa, Igbo, Malayalam, Bangla/Bengali and Dagbani are focus languages for Wikidata's lexicographic dataset, which is an important aspect of Abstract Wikipedia.

mul - Multiple languages

ase - American Sign Language

  • string: Stokoe to ase-Sgnw and vice-versa (consult @Slevinski: as to best approach)

bn - Bangla

bzs - Brazilian Sign Language

cy - Welsh

w:en:colloquial Welsh morphology

dag - Dagbani

de - German

  • tense * person * number for each verb
    • tenses: present, past, ...?
    • person: first, second, third
    • number: singular, plural
    • 22.5px Doing... third person singular present
    • second person singular preterite

en - English

eu - Basque

  • Basque language declension system in rather regular based on suffixes.
    • Here a few examples for Basque declension:
    • Before implementing all of them, we may propose an overall classification that eases both the implementation and the future usage of the functions. Here a first try based on bibliography from the Basque Language Academy:
      • Personal pronouns: they can be treated as exceptions (e.g. "zuek -> zuei", etc.) together with proper noun declension, or as a separate case.
      • Determiners: they can be treated as exceptions (e.g. "hau" -> "honek", etc) together with common noun declension, or as a separated case
      • Grammatical cases:
        • Absolutive ("Nor"): indefinite, singular and plural
        • Ergative ("Nork"): indefinite, singular and plural
        • Dative ("Nori"): indefinite, singular and plural
      • Place and Time: we must distinguish animate (AN) and inanimate (IN)
        • Inessive IN ("Non"): indefinite, singular and plural
        • Inessive AN ("Norengan"): indefinite, singular and plural - It could be a composition of "Noren" + "-gan"
        • Place and time ("Nongo"): indefinite, singular and plural
        • Allative IN ("Nora"): indefinite, singular and plural
        • Allative AN ("Norengana"): indefinite, singular and plural - It could be a composition of "Noren/Norengan" + "-gan/-a"
        • Finished Allative AN ("Noraino"): indefinite, singular and plural - It could be a composition of "Nora" + "-ino"
        • Finished Allative AN ("Norengainaino"): indefinite, singular and plural - It could be a composition of "Noregana" + "-ino"
        • Right way Allative IN ("Noratz"): indefinite, singular and plural - It could be a composition of "Nora" + "-ntz"
        • Right way Allative AN ("Norenganantz"): indefinite, singular and plural - It could be a composition of "Norengana" + "-ntz"
        • Ablative IN ("Nondik"): indefinite, singular and plural
        • Ablative AN ("Norengandik"): indefinite, singular and plural
      • Rest of the cases:
        • Partitive ("Zerik"): indefinite
        • Possessive ("Noren"): indefinite, singular and plural
        • Sociative ("Norekin"): indefinite, singular and plural
        • Instrumental ("Zerez"): indefinite, singular and plural
        • Motivative ("Zerengatik"): indefinite, singular and plural
        • Destinative ("Norentzat"): indefinite, singular and plural - It could be a composition of "Noren" + "-tzat"
      • Special case:
        • Prolative ("Nortzat"): indefinite
      • To take into consideration:
        • Together with animate and inanimate classification, we should also consider if the noun is a proper noun ("izen berezia"). We can identify that automatically (e.g. check if written in Title case, but this may not be always possible like in the beginning of sentences), but a dedicated function may be preferred (or a boolean to the generic function saying it is a proper noun).
        • The main distinction is between noun ending by vowel or consonant that can be easily computed

fr - French

ha - Hausa

A notated demo sentence ("Aishà taa jeefar dà kàren Indoo" ― "Aisha threw away Indo's dog") is available at http://intent.xigt.org

ig - Igbo

ldn - Láadan

section moved to WF:human languages/Z1882

ml - Malayalam

kcg - Tyap

  • Tyap has six determiners/definite articles which determine the pronoun, number (1-5), etc. forms used.
    • ka & wu (basically for singular nouns and adjectives with a few exceptions)
    • hu & ji (for singular and plural nouns and adjectives)
    • ba & na (mainly for plural nouns.
      • Determiners come after nouns.
      • When an adjective comes before a noun, the determiner used is that of the adjective. E.g., a̱sham (ka) - (the) beautiful, kyang (hu) - (the) thing = a̱sham kyang (ka) - (the) beautiful thing.
  • Tyap has a non-uniform noun class system used for noun pluralization and conversion from one part of speech to another. E.g., a̱bwom (song) and bwom (to sing), a̱fufwuo (ears) and fufwuo (ear).
  • Affixation: Prefixes exist but suffixes hardly are found.

Proposed functions requiring future types

Note these functions cannot be implemented properly until the needed types are requested and approved.

If one wishes to nevertheless attempt to define and implement them,

  • the functions and implementations should indicate prominently in their labels that their input/output types must be adjusted once support for the appropriate replacement types become available; and
  • the functions should not be used in the implementations of any other functions, as the later adjustment of input/output types to appropriate replacements will break those implementations.

String manipulation functions

String analysis functions

  • count distance between two letters in given alphabet (default to 26-charcater western alphabet. case insensitive. e.g. "a" & "A" ⇒ 0; "K" & "N" ⇒ 3)

String encoding and decoding functions

(would be better with types representing a stream of bytes)

  • BASE45 encode
  • BASE45 decode
  • Hexadecimal UTF-8 encode ("ABC ₤" ⇒ "41 42 43 20 E2 82 A4")
  • Hexadecimal UTF-8 decode ("41 42 43 20 E2 82 A4" ⇒ "ABC ₤")
  • Decimal UTF-8 encode ("ABC ₤" ⇒ "65 66 67 32 226 130 164")
  • Decimal UTF-8 decode ("65 66 67 32 226 130 164" ⇒ "ABC ₤")
  • Octal UTF-8 encode ("ABC ₤" ⇒ "101 102 103 40 342 202 244")
  • Octal UTF-8 decode ("101 102 103 40 342 202 244" ⇒ "ABC ₤")
  • Binary UTF-8 encode ("ABC ₤" ⇒ "01000001 01000010 01000011 00100000 11100010 10000010 10100100")
  • Binary UTF-8 decode ("01000001 01000010 01000011 00100000 11100010 10000010 10100100" ⇒ "ABC ₤")
  • Unicode code point encode ("ABC ₤" ⇒ "41 42 43 20 20A4") - Unicode code point encode hex (Z10785): Takes a Unicode string and returns a space-separated list of hexadecimal Unicode code points.
  • Unicode code point decode ("41 42 43 20 20A4" ⇒ "ABC ₤")
  • Create regular expression object/string (i.e: "test" & "i" to /test/i)

Natural language functions

Cryptographic functions

(would be better with types representing a stream of bytes)

Colour functions

Date, time, and calendric functions

Discussion of types: WF:type#Calendar types

Bengali calendar

Gregorian to Bengali date (Bangladesh) (Z12926): Converts a Gregorian date to Bangla date per Bangladeshi calendar. Inputs: Year, Month, Day.

Chinese calendar

French Republican Calendar

decimalises and secularises the Gregorian

Gregorian

widely used calendar derived from the Julian, basis for ISO 8601


Named Day from Date or day of year ; Input type : Date ; Output Type : String. ; The initial use case was automated population of On The Day, based on various collections of Holidays, festival days and observances. ? ShakespeareFan00 (talk) 19:35, 26 March 2025 (UTC)[reply]

So If you gave it 2025-05-01 It said "All Fools Day" etc.. Possibly an additional input of enumrated type to indicate which data set to pull holidays, fesitvals and observances from.

ShakespeareFan00 (talk) 19:35, 26 March 2025 (UTC)[reply]

Diary/calander Header function - Using the above and other date functions, generates a data set from a given date. Hence if you give it 2003-05-01 you get back a JOSN set contianing the {Day of week:String, Day in the Month, Observances} etc. ShakespeareFan00 (talk) 19:35, 26 March 2025 (UTC)[reply]

Holocene calendar

Indian national calendar

Islamic

a Lunar calendar, also called Hijri

Julian

mostly used by astronomers, some historians, and some Orthodox Christian denominations

Mesoamerican calendars

including civil and clerical forms

Persian

also called Jalali

Thai calendar

Hebrew calendar

Darian calendar

Proposed time-keeping system for Mars, requires Julian Date/Time to calculate and a month enumeration: WF:type proposals#Something to think about

Basic numerical functions

Data serialization functions

Basic list/iterable functions requiring numeric types

Geodetics functions

w:en:planetary coordinate system, w:en:well-known text representation of coordinate reference systems

Earth

  • convert coordinates outside of the ranges (-180, 180) for longitude and (-90, 90) for latitude to a canonical form
  • Plus Codes to/from geocoordinates
    • functions should match the semantics of the expected API: is valid Plus Code?, is shortened Plus Code?, is full Plus Code?, Plus Code from co-ordinates (Z25963): only works with WGS84, co-ordinates from Plus Code (SW corner), shorten Plus Code, recover nearest Plus Code
    • implementations for JS and Python are provided, Apache 2.0 licenced, not sure how self-contained they are
    • most of the functions could also be implemented by composition
    • sample data is provided for testing (it's ~500 cases for each of encode/decode and ~50 cases for each of the others, but they're grouped nicely so maybe take 1 from each)

Mars

w:en:areography#Cartography and geodesy

  • convert coordinates outside of the ranges [0, 360) for longitude and (-90, 90) for latitude to a canonical form

Moon

w:en:selenography#Lunar cartography and toponymy

Unit conversion functions

Conversion function : 2D Cartesian to 2D Polar

Input : matrix [x,y] Output: matrix [θ,r] Short text : Polar conversion of x,y to a polar space centred at 0,0 in the Cartesian. Constraints: x,y,r are reals (float64), θ lies in the range -π<0<π (Sign determined in relation to standards used in STEM applications. ShakespeareFan00 (talk) 14:30, 26 March 2025 (UTC)[reply]

The companion could also be provided. As I never did Geodetic functions, I am not sure how Lat, Long to map projection would work , but useful. ShakespeareFan00 (talk) 14:30, 26 March 2025 (UTC)[reply]
See also WF:Type proposals/complex128. YoshiRulz (talk) 10:17, 1 December 2025 (UTC)[reply]

Trigonometric functions

ShakespeareFan00 (talk) 19:40, 26 March 2025 (UTC)[reply]

WrenFalcon (talk) 22:05, 31 July 2025 (UTC)[reply]


Function proposal : Decimalise angle of the form ('1:x' or '1 in x') to % (in 100) or ‰ (in 1000)

  • Suggested name: gardient_decimal.
  • Input type: Integer ( The 1 is implied.). Lower Bound +1: Upper Bound: 1000 (for most practical situations?)
  • Output type: Real/float 64.

Proposer: ShakespeareFan00 (talk) 19:05, 28 March 2025 (UTC)[reply]

Color Functions

Colorspace Conversion

x,y,Y to sRGB (Illuminant D65). Input : 3tuple of float64, Output: 3 tuple of integer, where 0>=r<=255, 0>=g<=255 0>=b<=255.

Convert a color specfied as 3 float64 values, from x,y,Y colorspace to sRGB or raise an "Out of Gaumt" exception. ShakespeareFan00 (talk) 19:09, 7 April 2025 (UTC)[reply]

Spectral Approximate from sRGB or XYZ values.

I'd like to see the techniques detailed here: http://scottburns.us/reflectance-curves-from-srgb/ implemented in Wikifunctions as the provided spreadhseet later in the paper doesn't appear to work with Libre Office. ShakespeareFan00 (talk) 19:32, 2 June 2025 (UTC)[reply]

Subtractive color mix (Pigment style)

Implement the mixing function from Spectral.js (https://github.com/rvanwijnen/spectral.js/blob/3.0.0/spectral.js )(MIT license), to allow 2 or more sRGB triplets to be mixed like pigment colors. This is different from the subtract colors function implemented previously.

Music Functions

It would be nice to have 12 equal temperament pitch class and 12 equal temperament pitch types, as they would be useful for calculating harmonies and melodies. The pitch classes could be stored as natural numbers from 0 to 11, and represented with symbols C, C♯, D, ..., B. The pitches could be stored as integers with -1 being B3, 0 being C4, 1 being C♯4, etc. Over time, we could expand the pitch class and pitch types to other temperaments and just intonation. As I'm new to Wikifunctions and my coding skills are next to zero, this is just a suggestion to the community. (edited) CaffeineP (talk) 14:48, 9 April 2025 (UTC)[reply]

Yes… There are some notational challenges because of enharmonics as well as naming conventions varying by language/culture, so English A♯ is equivalent to German B and English B♭, for example. Ideally, I would want the (English) pitch class that is five semitones higher than G♭ to be displayed as C♭ rather than B.
Also, given some reference pitch like A4 = 440 Hz, we should be able to return the frequency in hertz of a given pitch and, conversely, the nearest pitch for a given frequency and its offset in cents (or whatever). The computation is a lot simpler than representing the result (or capturing how the result should be represented)! GrounderUK (talk) 20:08, 9 April 2025 (UTC)[reply]
If you use the cardinal values for the pitches from the MIDI standard (or an extension to such, since they're limited to 0..<128) then you could make some of these functions already, no type proposal needed. Granted a lot of them would just be addition/subtraction. And if you semi-arbitrarily map A = 0, A# = 1, etc. then you could do all of them. YoshiRulz (talk) 10:33, 1 December 2025 (UTC)[reply]
  • 12-ET Pitch Class of a Pitch: Return the 12 equal temperament pitch class of a given 12 equal temperament pitch. For example, C4 returns C.
  • 12-ET Pitch based on Pitch Class: Return a 12 equal temperament pitch based on a given 12 equal temperament pitch class and a given integer. For example, C and 4 return C4.
  • Interval between 12-ET Pitch Classes in Semitones: Get the interval in semitones between two 12 equal temperament pitch classes, always assuming that the first is lower than (or the same as) the second, and the interval is less than an octave. For example, C and B return 11, while B and C return 1.
  • Interval between 12-ET Pitches in Semitones: Get the interval in semitones between two 12 equal temperament pitches. For example, C4 and B3 return -1, while C3 and B4 return 23.
  • Raise 12-ET Pitch Class by Semitones: Get a new 12 equal temperament pitch class through raising a given pitch class by the provided number of semitones. For example, raising B by 1 semitone returns C.
  • Lower 12-ET Pitch Class by Semitones: Same as above, but lower the pitch class instead of raising it.
  • Raise 12-ET Pitch by Semitones: Get a new 12 equal temperament pitch through raising a given pitch by the provided number of semitones. For example, raising B3 by 1 semitone returns C4.
  • Lower 12-ET Pitch by Semitones: Same as above, but lower the pitch instead of raising it.
  • Frequency of a 12-ET Pitch: Return a float64 frequency in Hz based on the provided 12 equal temperament pitch (and possibly a reference pitch with its frequency; if not provided, take default A4 = 440 Hz).
  • Approximate 12-ET Pitch Class based on Frequency: Return a 12 equal temperament pitch class approximately based on the provided frequency in Hz.
  • Approximate 12-ET Pitch based on Frequency: Return a 12 equal temperament pitch approximately based on the provided frequency in Hz.

SVG Functions

I would be nice to generate SVG (a XML-based vector image format which is basically a long string), it could allow to replace a lot of images on Commons or templates/tools. Here some examples:

  • create simple forms,
  • create graphs (line graph/bar graph for population or for production, elections diagrams like File:1900Hawaii.svg, etc.),
  • create more complex visualisation like genealogical trees,
  • create coat of arms (?),
  • etc.

Cheers, VIGNERON (talk) 10:47, 23 April 2025 (UTC)[reply]

@VIGNERON: Eventually that is something we might support, but there'll be nothing any time soon. It has a number of complex security and scalability concerns, sadly. Jdforrester (WMF) (talk) 13:21, 23 April 2025 (UTC)[reply]
@Jdforrester (WMF): thanks. I talked about it for the last Corner but I wanted to leave a record here, if we have time, maybe I'll use that time to write some things to prepare (like listing templates and tools on the Wikimedia projects that generate SVG or visualisations). Cheers, VIGNERON (talk) 15:28, 23 April 2025 (UTC)[reply]
Of course! I've explicitly added a section on this here: Wikifunctions:Embedded function calls#Non-text output — hope that helps assure you that we're thinking about it. Jdforrester (WMF) (talk) 21:40, 23 April 2025 (UTC)[reply]

Biology

Taxon functions

A taxon type could be useful, as could a taxon rank enum (instance of (P31) taxonomic rank (Q427626)). --WrenFalcon (talk) 16:49, 22 September 2025 (UTC)[reply]


Object / type / function functions

External function lists