{"id":28436357,"url":"https://github.com/juliaapproximation/functionmaps.jl","last_synced_at":"2026-02-10T09:06:00.441Z","repository":{"id":274096660,"uuid":"921890994","full_name":"JuliaApproximation/FunctionMaps.jl","owner":"JuliaApproximation","description":"A package to represent scalar and vector-valued functions","archived":false,"fork":false,"pushed_at":"2025-08-12T10:57:02.000Z","size":374,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-08-26T19:48:44.881Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JuliaApproximation.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-01-24T20:14:38.000Z","updated_at":"2025-02-02T13:37:18.000Z","dependencies_parsed_at":"2025-06-27T18:43:15.172Z","dependency_job_id":null,"html_url":"https://github.com/JuliaApproximation/FunctionMaps.jl","commit_stats":null,"previous_names":["juliaapproximation/functionmaps.jl"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/JuliaApproximation/FunctionMaps.jl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaApproximation%2FFunctionMaps.jl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaApproximation%2FFunctionMaps.jl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaApproximation%2FFunctionMaps.jl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaApproximation%2FFunctionMaps.jl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JuliaApproximation","download_url":"https://codeload.github.com/JuliaApproximation/FunctionMaps.jl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaApproximation%2FFunctionMaps.jl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29295426,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-10T03:42:42.660Z","status":"ssl_error","status_checked_at":"2026-02-10T03:42:41.897Z","response_time":65,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-05T22:08:20.252Z","updated_at":"2026-02-10T09:06:00.408Z","avatar_url":"https://github.com/JuliaApproximation.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FunctionMaps\n\n[![Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://JuliaApproximation.github.io/FunctionMaps.jl/dev)\n[![Build Status](https://github.com/JuliaApproximation/FunctionMaps.jl/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/JuliaApproximation/FunctionMaps.jl/actions/workflows/CI.yml?query=branch%3Amain)\n[![Coverage](https://codecov.io/gh/JuliaApproximation/FunctionMaps.jl/branch/main/graph/badge.svg)](https://codecov.io/gh/JuliaApproximation/FunctionMaps.jl)\n[![Aqua QA](https://raw.githubusercontent.com/JuliaTesting/Aqua.jl/master/badge.svg)](https://github.com/JuliaTesting/Aqua.jl)\n\nFunctionMaps.jl is a package designed to represent scalar- and vector-valued functions. It makes it easy to make new maps from existing ones, via composition or by taking products.\n\n## Examples\n\nFor more information, see the [documentation](https://JuliaApproximation.github.io/FunctionMaps.jl/dev).\n\n### Linear and affine maps\n\nIn comparison to existing packages with similar functionality, FunctionMaps aims to support non-invertible maps. These can be used to map between spaces of different dimension, such as from 2D to 3D. This leads to a linear map involving a rectangular matrix:\n```julia\njulia\u003e using FunctionMaps\n\njulia\u003e m = LinearMap([0 0; 1 0; 0 1.0])\nx -\u003e A * x\n\nA = 3×2 Matrix{Float64}:\n 0.0  0.0\n 1.0  0.0\n 0.0  1.0\n\njulia\u003e m([1; 2])\n3-element Vector{Float64}:\n 0.0\n 1.0\n 2.0\n```\nThis function `m` maps the 2D plane to the YZ-plane in a three-dimensional Euclidean space.\n\nThe map is not invertible on the full 3D space, but it is invertible on its range. In other words, it does have a left inverse from the YZ-plane back to 2D, which is again represented by a rectangular matrix:\n```julia\njulia\u003e mi = leftinverse(m)\nx -\u003e A * x\n\nA = 2×3 Matrix{Float64}:\n 0.0  1.0  0.0\n 0.0  0.0  1.0\n\njulia\u003e mi(m([1; 2]))\n2-element Vector{Float64}:\n 1.0\n 2.0\n```\nThe behaviour of the left inverse outside the image of the map is not defined in general, as indeed there may be multiple left inverses satisfying `mi(m(x)) == x`, but in this case it corresponds to a projection onto the YZ-plane.\n```julia\njulia\u003e mi([1; 2; 3])\n2-element Vector{Float64}:\n 2.0\n 3.0\n```\n\n### Domain and codomain type\n\nMaps tend to be flexible in the type of the argument if the call makes sense mathematically. Yet, most maps do support one particular domain type. In that sense, in Julia terminology maps more closely resemble a method than a generic function.\n\nMaps are functions of a single variable only. Functions of several variables can be represented as vector-valued maps. Such is the case in the current example.\n```julia\njulia\u003e domaintype(m)\nVector{Float64} (alias for Array{Float64, 1})\n\njulia\u003e codomaintype(m)\nVector{Float64} (alias for Array{Float64, 1})\n```\n\n\n## Maps as an interface\n\nThe concrete maps defined in this package inherit from the abstract supertype `Map{T}`. Here, `T` is the domaintype and any instance conceptually represents a function `f(x::T)`. Like Julia functions and methods, the output is not explicitly typed.\n\nA lot of the functionality in the package does not require maps to inherit from `Map{T}`, as long as they behave like maps. They should implement the following interface.\n\n| Required methods | Brief description | Default behaviour |\n| ---------------- | ----------------- | ----------------- |\n| `applymap(m, x)` | Applies the map `m` to the argument `x` | `m(x)` |\n\nOptional methods include:\n\n| Important optional methods | Default definition | Brief description\n| --- | --- | --- |\n| `domaintype(m)` | `Any` | Returns a valid or intended type for arguments of the map |\n| `codomaintype(m[, ::Type{T}])` | `Any` | The return type of the map (for arguments of type `T`) |\n\n\n## History and development\n\nThe functionality in this package was originally developed as part of the [DomainSets.jl](https://github.com/JuliaApproximation/DomainSets.jl) package. It was extracted to allow more focused development and a better integration with existing packages with similar functionality.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliaapproximation%2Ffunctionmaps.jl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuliaapproximation%2Ffunctionmaps.jl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliaapproximation%2Ffunctionmaps.jl/lists"}