PageSourceSearch

https://quantstack.net/assets/js/25f56a2d.15d8e402.js

js quantstack.net collected 2026-10-03 20:58:00 UTC 79,380 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkQuantStack_website=self.webpackChunkQuantStack_website||[]).push([[1005,1552,1603,1885,2042,2538,3725,5339,5563,6984,7319,7396,7673,9865],{29:(e,n,r)=>{r.d(n,{A:()=>p});var t=r(6540),i=r(1656),o=r(6347),s=r(734),a=r(4940),c=r(7118),l=r(7058),d=r(4848);function h(e,n){const r=new URLSearchParams(window.location.search).get("category"),t=r?`?category=${encodeURIComponent(r)}`:"";e.replace({pathname:"/sponsor",search:t}),void 0!==n&&setTimeout(()=>window.scrollTo({top:n,behavior:"auto"}),0)}function p(){const e=(0,o.zy)(),n=(0,o.W6)();(0,t.useEffect)(()=>{e.state?.fromFundable&&window.scrollTo({top:e.state.scrollY??0,behavior:"auto"})},[]);const r=r=>{window.getSelection()?.toString()||r.target===r.currentTarget&&h(n,e.state?.scrollY)},p=()=>{e.state?.fromFundable?h(n,e.state?.scrollY):n.goBack()};return(0,d.jsxs)(i.A,{children:[(0,d.jsx)(a.FundableContent,{}),(0,d.jsx)(o.qh,{path:"/sponsor/:pageName",render:({match:e})=>{const{pageName:n}=e.params,t=(0,s.I)(n).find(e=>e.pageName===n);return t?(0,d.jsx)("div",{className:c.A.project_dialog_overlay,onClick:r,children:(0,d.jsxs)("div",{className:c.A.project_dialog_content,onClick:e=>e.stopPropagation(),children:[(0,d.jsx)("button",{className:"close-button",style:{position:"absolute",top:"10px",right:"10px"},onClick:p}),(0,d.jsx)(l.A,{project:t})]})}):null}})]})}},58:(e,n,r)=>{r.d(n,{A:()=>s});var t=r(4164),i=r(4277),o=r(4848);function s({bg:e="white",spacing:n="normal",pageTop:r=!1,fullHeight:s=!1,background:a,children:c,className:l}){return(0,o.jsxs)("div",{"data-section-bg":e,className:(0,t.A)(i.A.section,i.A[`section_${e.replace("-","_")}`],"normal"!==n&&i.A[`section_${n}`],r&&i.A.section_page_top,s&&i.A.section_full_height,l),children:[a&&(0,o.jsx)("div",{className:i.A.section_bg_slot,children:a}),(0,o.jsx)("div",{className:i.A.section_content,children:(0,o.jsx)("div",{className:"page-content",children:c})})]})}},326:(e,n,r)=>{r.d(n,{A:()=>o});var t=r(6540);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)({}).hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},i.apply(null,arguments)}const o=({title:e,titleId:n,...r})=>t.createElement("svg",i({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 30 30","aria-labelledby":n},r),e?t.createElement("title",{id:n},e):null,t.createElement("g",{transform:"matrix(.88889 0 0 .88889 -.417 0)"},t.createElement("circle",{cx:17.344,cy:16.875,r:16.419,style:{fill:"none",fillOpacity:0,stroke:"none",strokeWidth:.91208,strokeMiterlimit:4,strokeDasharray:"none",strokeOpacity:0}}),t.createElement("path",{fill:"#2b90d9",d:"M28.396 17.985c-.411 2.116-3.684 4.432-7.443 4.88-1.96.235-3.89.45-5.948.355-3.365-.154-6.021-.803-6.021-.803q0 .493.06.931c.438 3.322 3.294 3.52 6 3.613 2.73.094 5.16-.673 5.16-.673l.113 2.469s-1.91 1.025-5.312 1.214c-1.876.103-4.205-.047-6.919-.766-5.884-1.557-6.896-7.83-7.05-14.194-.048-1.89-.019-3.671-.019-5.162 0-6.507 4.264-8.415 4.264-8.415C7.431.447 11.121.031 14.956 0h.094c3.835.031 7.527.447 9.677 1.434 0 0 4.264 1.908 4.264 8.415 0 0 .053 4.802-.595 8.136",style:{fill:"#000",strokeWidth:.129305},transform:"matrix(.63813 0 0 .65635 7.772 7.03)"}),t.createElement("path",{fill:"#fff",d:"M23.961 13.695v7.88H20.84v-7.649c0-1.612-.678-2.43-2.035-2.43-1.5 0-2.252.97-2.252 2.89v4.186h-3.104v-4.186c0-1.92-.752-2.89-2.252-2.89-1.357 0-2.035.818-2.035 2.43v7.649H6.039v-7.88q-.001-2.416 1.234-3.837c.849-.947 1.961-1.433 3.342-1.433 1.598 0 2.807.614 3.607 1.843L15 11.57l.778-1.303c.8-1.229 2.01-1.843 3.607-1.843 1.38 0 2.493.486 3.343 1.433q1.234 1.42 1.233 3.837",style:{strokeWidth:.129305},transform:"matrix(.63813 0 0 .65635 7.772 7.03)"})))},734:(e,n,r)=>{r.d(n,{a:()=>N,I:()=>F});var t=r(6540),i=r(746),o=r(1373),s=r(3315),a=r(6981),c=r(6714),l=r(3235),d=r(1182),h=r(3870),p=r(9617),u=r(3415),m=r(769),f=r(5667),x=r(2562),j=r(4765);const g={jupyterEcosystem:[{category:"Jupyter Ecosystem",title:"Modernizing nbconvert",pageName:"NbconvertModernization",shortDescription:"Conversion of Jupyter notebooks to PDF currently relies on nbconvert in the backend, which in turns uses a headless browser for producing the PDF. We propose to directly perform the PDF conversion in the user's browser, which will simplify the architecture and make it function with JupyterLite.",description:s.default,price:"30 000 \u20ac",maxNbOfFunders:1,currentNbOfFu
1nders:0,currentFundingPercentage:0,note:"Note: Costs and features can be further adapted following discussion with the funding organization. Open-source under relevant licenses. The funding organization will be credited in communication about the project.",repoLink:"https://github.com/jupyter/nbconvert"},{category:"Jupyter Ecosystem",title:"Raster processing tools in JupyterGIS",pageName:"JupyterGISRasterProcessing",shortDescription:"JupyterGIS currently offers a set of vector processing and conversion tools. These capabilities are powered by a GDAL WebAssembly (WASM) build running in the browser. We will work on extending support to raster processing tools using the same underlying technology.",description:a.default,price:"TBD",maxNbOfFunders:1,currentNbOfFunders:0,currentFundingPercentage:0,repoLink:"https://github.com/geojupyter/jupytergis"},{category:"Jupyter Ecosystem",title:"Bringing processing tools to the JupyterGIS Python API",pageName:"JupyterGISToolsForPythonAPI",shortDescription:"JupyterGIS currently supports several vector processing and conversion tools, currently available only through the JupyterGIS user interface. We plan to extend these capabilities to the JupyterGIS Python API, enabling users to access the same processing tools programmatically. ",description:c.default,price:"10 000 \u20ac",maxNbOfFunders:1,currentNbOfFunders:0,currentFundingPercentage:0,repoLink:"https://github.com/geojupyter/jupytergis"}],packageManagement:[{category:"Package Management",title:"Package requests for emscripten-forge",pageName:"EmscriptenForgePackageRequests",shortDe
1scription:"Emscripten-forge is a conda package distribution specifically designed for WebAssembly. While the number of available emscripten-forge packages is growing quickly, many packages are still missing from the ecosystem. We will be working on adding new packages upon request.",description:l.default,price:"TBD",maxNbOfFunders:1,currentNbOfFunders:0,currentFundingPercentage:0,repoLink:"https://github.com/mamba-org/mamba"}],scientificComputing:[{category:"Scientific Computing",title:"SVE2 support in xsimd",pageName:"SVE2SupportInXsimd",shortDescription:"xsimd is a C++ scientific library that abstracts low-level high performances computing primitives across different hardwares. We will add support for the latest SVE2 generation of ARM CPUs.",description:d.default,price:"30 000 \u20ac",maxNbOfFunders:2,currentNbOfFunders:0,currentFundingPercentage:0,repoLink:"https://github.com/xtensor-stack/xsimd"},{category:"Scientific Computing",title:"Float16 support in xsimd",pageName:"Float16SupportInXsimd",shortDescription:"xsimd is a C++ scientific library that abstracts low-level high performances computing primitives across different hardwares. We will add vectorized support for half-precision 16 bits float operations where hardware supports them, and correct fallbacks elsewhere.",description:h.default,price:"20 000 \u20ac",maxNbOfFunders:2,currentNbOfFunders:0,currentFundingPercentage:0,repoLink:"https://github.com/xtensor-stack/xsimd"},{category:"Scientific Computing",title:"Implementing Kazushige Goto Algorithms for Matrix Operations in xtensor",pageName:"MatrixOperationsInXtensor",shortDescription:"This project aims to integrate Kazushige Goto\u2019s highly optimized matrix multiplication algorithms into the xtensor framework, leveraging the xsimd library for SIMD acceleration.",description:p.default,price:"45 000 \u20ac",maxNbOfFunders:1,currentNbOfFunders:0,currentFundingPercentage:0,repoLink:"https://github.com/xtensor-stack/xtensor"}],apacheArrow:[{category:"Apache Arrow and Parquet",title:"Complete BinaryView / StringView support in Arrow C++",pageName:"BinaryViewInApacheArrow",shortDescription:"BinaryView is a more recent and more efficient alternative to Arrow's standard Binary type. It allows for inlined storage of short strings and fast prefix comparison.",description:u.default,price:"TBD",maxNbOfFunders:4,currentNbOfFunders:0,currentFundingPercentage:0,repoLink:"https://github.com/apache/arrow"},{category:"Apache Arrow and Parquet",title:"Complete Decimal32 / Decimal64 support in Arrow C++",pageName:"Decimal32InApacheArrow",shortDescription:"Decimal32 and Decimal64 are more compact and computationally more efficient data types than the standard Decimal128.",description:m.default,price:"TBD",maxNbOfFunders:2,currentNbOfFunders:0,currentFundingPercentage:0,repoLink:"https://github.com/apache/arrow"},{category:"Apache Arrow and Parquet",title:"Complete Float16 support in Arrow C++",pageName:"Float16InApacheArrow",shortDescription:"Float16 is a more compact data type than Float32 and Float64, and sees growing usage in applications where its limited precision is sufficient.",description:f.default,price:"TBD",maxNbOfFunders:2,currentNbOfFunders:0,currentFundingPercentage:0,repoLink:"https://github.com/apache/arrow"},{category:"Apache Arrow and Parquet",title:"Complete Run-End-Encoded support in Arrow C++",pageName:"RunEndEncodedInApacheArrow",shortDescription:"Like dictionary encoding, run-end-encoding allows representing some kinds of data more efficiently.",description:x.default,price:"TBD",maxNbOfFunders:4,currentNbOfFunders:0,currentFundingPercentage:0,repoLink:"https://github.com/apache/arrow"},{category:"Apache Arrow and Parquet",title:"Parquet reader optimizations",pageName:"ParquetNullOptimizations",shortDescription:"Converting Parquet optional values to nullable Arrow data is often a performance bottleneck. We will optimize that step for the most common cases.",description:j.default,price:"TBD",maxNbOfFunders:1,currentNbOfFunders:0,currentFundingPercentage:0,repoLink:"https://github.com/apache/arrow"}]};var _=r(6347),y=r(4848);function v({value:e=0,color:n="#4caf50"}){return(0,y.jsx)("div",{style:{marginBottom:"10px"},children:(0,y.jsx)("div",{style:{background:"#eee",borderRadius:"16px",border:"solid 0.5px",height:"21px",width:"190px",overflow:"hidden"},children:(0,y.jsx)("div",{style:{width:`${e}%`,background:n,height:"100%",transition:"width 0.3s ease-in-out"}})})})}var w=r(6405);function b({project:e}){const n=(0,_.W6)();
1const r=e.shortDescription.length>160?e.shortDescription.substring(0,160)+"\u2026":e.shortDescription;return(0,y.jsxs)(w.A,{hover:!0,onClick:function(){if(window.getSelection()?.toString())return;const r=new URLSearchParams(window.location.search).get("category"),t=r?`?category=${encodeURIComponent(r)}`:"";n.push({pathname:`/sponsor/${e.pageName}`,search:t,state:{fromFundable:!0,scrollY:window.scrollY}})},className:i.A.fund_card,children:[(0,y.jsx)("div",{className:i.A.fund_card_category,children:e.category}),(0,y.jsx)("div",{className:i.A.fund_card_title,children:e.title}),(0,y.jsx)("p",{className:i.A.fund_card_desc,children:r}),(0,y.jsxs)("div",{className:i.A.fund_card_footer,children:[(0,y.jsx)("div",{className:i.A.fund_card_price,children:e.price}),(0,y.jsx)(v,{value:e.currentFundingPercentage,color:"var(--ifm-color-secondary-s1)"}),(0,y.jsxs)("div",{className:i.A.fund_card_pct,children:[e.currentFundingPercentage,"% funded",e.currentNbOfFunders>0&&` \xb7 ${e.currentNbOfFunders} funder${e.currentNbOfFunders>1?"s":""}`]})]})]})}const A=Object.values(g).flat(),k=["All",...new Set(A.map(e=>e.category))];function F(e){for(const n of Object.values(g)){if(n.find(n=>n.pageName===e))return n}return null}function N(){const[e,n]=(0,t.useState)(()=>{if("undefined"==typeof window)return"All";const e=new URLSearchParams(window.location.search).get("category");return k.includes(e)?e:"All"});(0,t.useEffect)(()=>{const n=new URL(window.location.href);"All"===e?n.searchParams.delete("category"):n.searchParams.set("category",e),window.history.replaceState(null,"",n.toString())},[e]);const r="All"===e?A:A.filter(n=>n.category===e);return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)("div",{className:i.A.filter_tags,children:k.map(r=>(0,y.jsx)("button",{className:i.A.filter_tag+(e===r?" "+i.A.filter_tag_active:""),onClick:()=>n(r),children:r},r))}),(0,y.jsx)(o.A,{cols:3,children:r.map(e=>(0,y.jsx)("li",{children:(0,y.jsx)(b,{project:e})},e.pageName))})]})}},746:(e,n,r)=>{r.d(n,{A:()=>t});const t={filter_tags:"filter_tags_C7Pv",filter_tag:"filter_tag_Ixe1",filter_tag_active:"filter_tag_active_WC0p",fund_card:"fund_card_X1fZ",fund_card_category:"fund_card_category_fgXF",fund_card_title:"fund_card_title_maJx",fund_card_desc:"fund_card_desc_C2uw",fund_card_footer:"fund_card_footer_qwYl",fund_card_price:"fund_card_price_2Tjs",fund_card_pct:"fund_card_pct_APot",propose_section:"propose_section_kNHb",small_project_card:"small_project_card_gg3e",project_category_header:"project_category_header_Nn9m",project_title:"project_title_Bu6g",project_catch_up_phrase:"project_catch_up_phrase_u6H0",project_dialog_overlay:"project_dialog_overlay_mBZt",project_dialog_content:"project_dialog_content_NCc5",large_project_card_title:"large_project_card_title_MOCc",large_project_card_text:"large_project_card_text_YAC6",large_project_card_description_container:"large_project_card_description_container_BueH",large_project_card_description:"large_project_card_description_hJhJ",link_to_get_a_quote:"link_to_get_a_quote_ITW1",icon_container:"icon_container_fyn3",send_button:"send_button_mLQw",get_a_quote_form:"get_a_quote_form_zAsq",get_a_quote_page:"get_a_quote_page_GC0E",form_label:"form_label_jnRm",project_information_container:"project_information_container_q_Zs",project_information:"project_information_yUHJ",small_project_card_note:"small_project_card_note_xeeC",small_project_card_price_container:"small_project_card_price_container_TMkr",small_project_card_price:"small_project_card_price_QEqU",small_project_card_indicative_price_text:"small_project_card_indicative_price_text_adMH",small_project_card_funded_at_text:"small_project_card_funded_at_text__ESu",shareable_container:"shareable_container_pO3_",shareable_text:"shareable_text_bZzl",link_to_more_information:"link_to_more_information_cxG9",small_project_card_price_col:"small_project_card_price_col_NHCW",project_category_list:"project_category_list_v5l1",submit_proposition_button:"submit_proposition_button_QVOb",small_project_card_text_col:"small_project_card_text_col_pvAn",large_project_card:"large_project_card_cQd6",small_input
1:"small_input_FRYy",large_input:"large_input_NPIi",empty_card_small_input:"empty_card_small_input__6wC",empty_card_large_input:"empty_card_large_input_ALx9",send_button_container:"send_button_container_jBZc",get_a_quote_dialog:"get_a_quote_dialog_aEmk",get_a_quote_text_col_desktop:"get_a_quote_text_col_desktop_QJTS",get_a_quote_form_col_desktop:"get_a_quote_form_col_desktop_oHdw",get_a_quote_form_col_mobile:"get_a_quote_form_col_mobile_UwBT"}},769:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"type":"mdx","permalink":"/sponsor/descriptions/Decimal32InArrowCpp","source":"@site/src/pages/sponsor/descriptions/Decimal32InArrowCpp.md","description":"Overview","frontMatter":{},"unlisted":false}');var i=r(4848),o=r(8453);const s={},a=void 0,c={},l=[{value:"Overview",id:"overview",level:4},{value:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it",id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",level:5}];function d(e){const n={code:"code",h4:"h4",h5:"h5",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h4,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"Apache Arrow is the universal columnar format and multi-language toolbox for fast data interchange and in-memory analytics."}),"\n",(0,i.jsx)(n.p,{children:"Fixed-width decimal data in Arrow is usually represented by the Decimal128 data type.\nThis data type has non-trivial memory costs (16 bytes per value) and computational costs (operations on 128-bit integers must be emulated on most if not all architectures)."}),"\n",(0,i.jsx)(n.p,{children:"Arrow recently gained Decimal32 and Decimal64 data types which, as their names suggest, encode fixed-width decimal data more compactly.\nDecimal32 (resp. Decimal64) is able to represent up to 9 (resp. 18) decimal digits of precision, which is sufficient in many applications."}),"\n",(0,i.jsx)(n.p,{children:"However, while basic support is present, Decimal32 and Decimal64 are not universally supported by all Arrow components."}),"\n",(0,i.jsx)(n.p,{children:"We propose to finish implementing support for Decimal32 and Decimal64 types in all components of Arrow C++:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"scalar compute kernels:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"abs"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"round"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"is_in"}),", ",(0,i.jsx)(n.code,{children:"index_in"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"coalesce"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"min_element_wise"}),", ",(0,i.jsx)(n.code,{children:"max_element_wise"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"vector compute kernels:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dictionary_encode"}),", ",(0,i.jsx)(n.code,{children:"unique"}),", ",(0,i.jsx)(n.code,{children:"value_counts"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"pairwise_diff"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"select_k_unstable"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"replace_with_mask"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"fill_null_forward"}),", ",(0,i.jsx)(n.code,{children:"fill_null_backward"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"aggregate compute kernels:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"sum"}),", ",(0,i.jsx)(n.code,{children:"mean"}),", ",(0,i.jsx)(n.code,{children:"mode"}),", ",(0,i.jsx)(n.code,{children:"tdigest"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"first"}),", ",(0,i.jsx)(n.code,{children:"last"}),", ",(0,i.jsx)(n.code,{children:"min"}),", ",(0,i.jsx)(n.code,{children:"max"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"index"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"CSV reader and writer"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"ORC reader and writer"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Funders can decide to fund the entire package, or choose the components they are interested in."}),"\n",(0,i.jsx)(n.h5,{id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",children:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it"})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1066:(e,n,r)=>{r.d(n,{A:()=>o});var t=r(6540);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)({}).hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},i.apply(null,arguments)}const o=({title:e,titleId:n,...r})=>t.createElement("svg",i({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,"aria-labelledby":n},r),e?t.createElement("title",{id:n},e):null,t.createElement("g",{transform:"matrix(.88889 0 0 .88889 -.444 0)"},t.createElement("circle",{cx:18.5,cy:18,r:17.514,style:{opacity:1,fill:"none",fillOpacity:0,stroke:"none",strokeWidth:.972886,strokeMiterlimit:4,strokeDasharray:"none",strokeOpacity:0}}),t.createElement("path",{fill:"#1185fe",d:"M12.627 10.1c2.377 1.785 4.934 5.404 5.873 7.346.939-1.942 3.496-5.561 5.873-7.346 1.716-1.288 4.495-2.284 4.495.887 0 .633-.363 5.32-.576 6.08-.74 2.645-3.437 3.32-5.836 2.911 4.193.714 5.26 3.078 2.956 5.442-4.376 4.49-6.289-1.126-6.78-2.565-.09-.264-.131-.388-.132-.283 0-.105-.043.019-.133.283-.49 1.439-2.403 7.055-6.78 2.565-2.303-2.364-1.236-4.728 2.957-5.442-2.399.409-5.096-.266-5.836-2.911-.213-.761-.5
176-5.447-.576-6.08 0-3.171 2.78-2.175 4.495-.887z",style:{fill:"#000",strokeWidth:.0357515}})))},1182:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"type":"mdx","permalink":"/sponsor/descriptions/SVE2SupportInXsimd","source":"@site/src/pages/sponsor/descriptions/SVE2SupportInXsimd.md","description":"Overview","frontMatter":{},"unlisted":false}');var i=r(4848),o=r(8453);const s={},a=void 0,c={},l=[{value:"Overview",id:"overview",level:4},{value:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it.",id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",level:5}];function d(e){const n={code:"code",h4:"h4",h5:"h5",p:"p",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h4,{id:"overview",children:"Overview"}),"\n",(0,i.jsxs)(n.p,{children:["xsimd is a C++ header-only library that abstracts SIMD (vectorization) intrinsics behind a single, generic API. The same code - ",(0,i.jsx)(n.code,{children:"xsimd::batch<float>"})," - compiles to optimal machine code on x86 SSE/AVX, ARM NEON, RISC-V, and WebAssembly, with no runtime overhead. When an intrinsic is missing on a given target, xsimd falls back gracefully rather than failing or leaving the developer to write platform-specific branches. This is why projects like Mozilla Firefox, Apache Arrow, Meta Velox, KDE Krita, and Pythran have adopted it as their vectorization layer."]}
1),"\n",(0,i.jsx)(n.p,{children:"Writing SIMD intrinsics by hand is notoriously painful. Each architecture exposes different types, different naming conventions, and different gotchas - alignment rules, predicate registers, lane-width surprises, compiler bugs. Targeting two architectures means two separate, opaque, hard-to-test code paths. xsimd eliminates that cost entirely."}),"\n",(0,i.jsx)(n.p,{children:"ARM is now a first-class server architecture. AWS Graviton4 - broadly deployed today across EC2 instance families - ships with SVE2, ARM's latest vector ISA. Google and Microsoft have both announced their own ARM-based server chips (Axion and Cobalt 200 respectively), signalling an industry-wide shift. SVE2 brings a materially richer instruction set than NEON, and xsimd currently cannot exploit it - falling back to SVE and NEON on hardware that is capable of significantly more."}),"\n",(0,i.jsx)(n.p,{children:"We propose to implement a complete xsimd::sve2 backend - all arithmetic, mathematical, and reduction operations . The work will be fully tested, documented, and merged upstream into the public repository under the existing BSD 3-Clause license."}),"\n",(0,i.jsx)(n.p,{children:"Funding this development will directly enhance the cutting-edge data processing workflow using Arrow and Velox, paving the way for the future of ARM computing!"}),"\n",(0,i.jsx)(n.h5,{id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",children:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1199:(e,n,r)=>{r.d(n,{A:()=>o});var t=r(8774),i=r(4848);function o({label:e}){return(0,i.jsx)(t.A,{className:"link-to-button",href:"/contact",children:e})}},1237:(e,n,r)=>{r.d(n,{A:()=>s});var t=r(4164),i=r(4277),o=r(4848);function s({bg:e="dark",title:n,cta:r,fullHeight:s=!1,children:a}){return(0,o.jsxs)("div",{"data-section-bg":"dark"===e?"dark":void 0,className:(0,t.A)(i.A.banner,i.A[`banner_${e}`],s&&i.A.banner_full_height),children:[n&&(0,o.jsx)("div",{className:(0,t.A)(i.A.banner_title,i.A[`banner_title_${e}`]),children:n}),(0,o.jsx)("div",{className:i.A.banner_body,children:a}),r&&(0,o.jsx)("div",{children:r})]})}},1373:(e,n,r)=>{r.d(n,{A:()=>s});var t=r(4164),i=r(4277),o=r(4848);function s({cols:e=3,children:n,className:r}){return(0,o.jsx)("ul",{className:(0,t.A)(i.A.card_grid,2===e&&i.A.card_grid_2,4===e&&i.A.card_grid_4,r),children:n})}},2070:(e,n,r)=>{r.d(n,{A:()=>s});var t,i=r(6540);function o(){return o=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)({}).hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},o.apply(null,arguments)}const s=({title:e,titleId:n,...r})=>i.createElement("svg",o({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":n},r),e?i.createElement("title",{id:n},e):null,t||(t=i.createElement("g",{transform:"matrix(.88889 0 0 .88889 -.87 0)"},i.createElement("circle",{cx:18.98,cy:18,r:17.5}),i.createElement("path",{fill:"#000",d:"M25.339 13.307a4.98 4.98 0 0 0-.449-3.974.67.67 0 0 0-.577-.333 4.98 4.98 0 0 0-4 2h-2a4.98 4.98 0 0 0-4-2 .67.67 0 0 0-.578.333 4.98 4.98 0 0 0-.448 3.974 4.85 4.85 0 0 0-.64 2.36v.666a4.67 4.67 0 0 0 4.036 4.623A3.3 3.3 0 0 0 15.98 23v.667h-2a2 2 0 0 1-2-2 3.333 3.333 0 0 0-3.334-3.334.667.667 0 0 0 0 1.334 2 2 0 0 1 2 2A3.333 3.333 0 0 0 13.98 25h2v1.333a.666.666 0 1 0 1.333 0V23a2 2 0 0 1 4 0v3.333a.667.667 0 0 0 1.333 0V23c0-.74-.247-1.46-.703-2.044a4.67 4.67 0 0 0 4.037-4.623v-.666a4.85 4.85 0 0 0-.641-2.36m-.693 3.026a3.333 3.333 0 0 1-3.333 3.334h-4a3.333 3.333 0 0 1-3.333-3.334v-.666a3.5 3.5 0 0 1 .574-1.874.67.67 0 0 0 .092-.64 3.65 3.65 0 0 1 .066-2.799 3.66 3.66 0 0 1 2.693 1.672.67.67 0 0 0 .56.307h2.695a.67.67 0 0 0 .562-.307 3.66 3.66 0 0 1 2.693-1.672 3.65 3.65 0 0 1 .064 2.799.67.67 0 0 0 .084.637c.37.556.573 1.208.583 1.877z"}))))},2241:(e,n,r)=>{r.d(n,{A:()=>c});var t=r(4848);const i=e=>({w:e,c:"dark"}),o=e=>({w:e,c:"blue"}),s={1:[i(21),o(7),i(22),o(7),i(15),o(8),i(14),o(6)],2:[o(6),i(22),o(19),i(19),o(8),i(15),o(11)],3:[i(26),o(17),i(24),o(15),i(11),o(7)],4:[i(8),o(5),i(12),o(8),i(13),o(8),i(10),o(9),i(13),o(7),i(7)],5:[o(14),i(4),o(17),i(13),o(9),i(11),o(11),i(15),o(6)],6:[i(7),o(7),i(9),o(7),i(11),o(7),i(11),o(7),i(10),o(8),i(9),o(7)],7:[i(5),o(6),i(7),o(7),i(9),o(7),i(10),o(6),i(8),o(7),i(9),o(6),i(7),o(6)],8:[i(3),o(6),i(19),o(8),i(5),o(17),i(11),o(6),i(13),o(12)]},a={dark:"#1d1d1b",blue:"var(--ifm-color-blue-jupyter)",red:"var(--ifm-color-orange-jupyter)",white:"#ffffff"};function c({variant:e=1}){const n=s[e];return(0,t.jsx)("div",{style:{display:"flex",gap:"2px",height:"2px",alignItems:"stretch",width:"100%",backgroundColor:"white"},children:n.map(({w:e,c:n},r)=>(0,t.jsx)("div",{style:{flex:e,backgroundColor:a[n],clipPath:"pol
1ygon(5px 0%, 100% 0%, calc(100% - 5px) 100%, 0% 100%)"}},r))})}},2559:(e,n,r)=>{r.r(n),r.d(n,{default:()=>s});var t=r(4586),i=r(29),o=r(4848);function s(){const{siteConfig:e}=(0,t.A)();return(0,o.jsx)(i.A,{})}},2562:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"type":"mdx","permalink":"/sponsor/descriptions/RunEndEncodedInArrowCpp","source":"@site/src/pages/sponsor/descriptions/RunEndEncodedInArrowCpp.md","description":"Overview","frontMatter":{},"unlisted":false}');var i=r(4848),o=r(8453);const s={},a=void 0,c={},l=[{value:"Overview",id:"overview",level:4},{value:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it.",id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",level:5}];function d(e){const n={code:"code",h4:"h4",h5:"h5",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h4,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"Apache Arrow is the universal columnar format and multi-language toolbox for fast data interchange and in-memory analytics."}),"\n",(0,i.jsx)(n.p,{children:"Run-End-Encoding is a composite Arrow datatype that efficiently represents data with many repeated values, such as timeseries.\nWhile basic support is present, Run-End-Encoding is not universally supported in all Arrow C++ components."}),"\n",(0,i.jsx)(n.p,{children:"We propose to finish implementing support for Run-End-Encoding in all components of Arrow C++:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"cast kernels (including implicit run-end-encoding or decoding where applicable)"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"scalar kernels:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"all unary kernels (math, etc.)"}),"\n",(0,i.jsx)(n.li,{children:"all binary kernels (arithmetic, comparisons, etc.)"}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"coalesce"}),", ",(0,i.jsx)(n.code,{children:"if_else"}),", ",(0,i.jsx)(n.code,{children:"case_when"})]}),"\n",(0,i.jsxs)(n.li,{children:["fix incorrect output in ",(0,i.jsx)(n.code,{children:"is_null"})," and ",(0,i.jsx)(n.code,{children:"true_unless_null"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"vector kernels:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["cumulative aggregations (",(0,i.jsx)(n.code,{children:"cumulative_max"}),", ",(0,i.jsx)(n.code,{children:"cumulative_sum"}),", etc.)"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"pairwise_diff"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"filter"}),", ",(0,i.jsx)(n.code,{children:"take"}),", ",(0,i.jsx)(n.code,{children:"scatter"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"fill_null_forward"}),", ",(0,i.jsx)(n.code,{children:"fill_null_backward"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"replace_with_mask"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"indices_non_zero"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"sort_indices"}),", ",(0,i.jsx)(n.code,{children:"rank"}),", ",(0,i.jsx)(n.code,{children:"rank_normal"}),", ",(0,i.jsx)(n.code,{children:"rank_quantile"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"partition_nth_indices"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"select_k_unstable"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"unique"}),", ",(0,i.jsx)(n.code,{children:"value_counts"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"winsorize"})}),"\n",(0,i.jsxs)(n.li,{children:["fix incorrect output in ",(0,i.jsx)(n.code,{children:"drop_null"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"aggregate kernels:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"all"}),", ",(0,i.jsx)(n.code,{children:"any"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"count_distinct"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"approximate_median"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"sum"}),", ",(0,i.jsx)(n.code,{children:"product"}),", ",(0,i.jsx)(n.code,{children:"mean"}),", ",(0,i.jsx)(n.code,{children:"mode"}),", ",(0,i.jsx)(n.code,{children:"quantile"}),", ",(0,i.jsx)(n.code,{children:"tdigest"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"variance"}),", ",(0,i.jsx)(n.code,{children:"stddev"}),", ",(0,i.jsx)(n.code,{children:"skew"}),", ",(0,i.jsx)(n.code,{children:"kurtosis"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"first"}),", ",(0,i.jsx)(n.code,{children:"last"}),", ",(0,i.jsx)(n.code,{children:"min"}),", ",(0,i.jsx)(n.code,{children:"max"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"index"})}),"\n",(0,i.jsxs)(n.li,{children:["fix incorrect output in ",(0,i.jsx)(n.code,{children:"count"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Parquet reader and writer"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"CSV reader"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"ORC reader and writer"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Funders can decide to fund the entire package, or choose the components they are interested in."}),"\n",(0,i.jsx)(n.h5,{id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",children:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},3235:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"type":"mdx","permalink":"/sponsor/descriptions/EmscriptenForgePackageRequests","source":"@site/src/pages/sponsor/descriptions/EmscriptenForgePackageRequests.md","description":"Overview","frontMatter":{},"unlisted":false}');var i=r(4848),o=r(8453);const s={},a=void 0,c={},l=[{value:"Overview",id:"overview",level:4},{value:"Why Contribute?",id:"why-contribute",level:5},{value:"Key Opportunities",id:"key-opportunities",level:5},{value:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it.",id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",level:5}];
1function d(e){const n={a:"a",h4:"h4",h5:"h5",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h4,{id:"overview",children:"Overview"}),"\n",(0,i.jsxs)(n.p,{children:["Emscripten-forge is a conda package distribution tailored for WebAssembly, enabling seamless integration with JupyterLite and ",(0,i.jsx)(n.a,{href:"https://notebook.link",children:"notebook.link"}),". By combining Emscripten-forge with these platforms, users can deploy a fully functional, preconfigured scientific computing environment in the browser\u2014including essential packages like NumPy, Pandas, Matplotlib, SciPy and many more."]}),"\n",(0,i.jsxs)(n.p,{children:["This ecosystem unlocks new possibilities for interactive, client-side data science, education, and collaboration, without requiring server-side infrastructure. Packages built with Emscripten-forge will be immediately available in JupyterLite and ",(0,i.jsx)(n.a,{href:"https://notebook.link",children:"notebook.link"}),", making them accessible for shareable, collaborative notebooks."]}),"\n",(0,i.jsx)(n.p,{children:"While the Emscripten-forge ecosystem is rapidly expanding, many critical packages are still missing."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"We are actively seeking funding to accelerate the growth of this ecosystem."})}),"\n",(0,i.jsx)(n.h5,{id:"why-contribute",children:"Why Contribute?"}),"\n",(0,i.jsx)(n.p,{children:"Empower Web-Based Science: Enable researchers, educators, and developers to run complex scientific workflows directly in the browser."}),"\n",(0,i.jsx)(n.p,{children:"Democratize Access: Remove barriers to entry by eliminating the need for local installations or cloud resources.\nEnhance Collaboration: Make advanced scientific tools available in notebook.link, fostering real-time collaboration and sharing."}),"\n",(0,i.jsx)(n.p,{children:"Shape the Future: Help define the next generation of web-native scientific computing tools."}),"\n",(0,i.jsx)(n.h5,{id:"key-opportunities",children:"Key Opportunities"}),"\n",(0,i.jsx)(n.p,{children:"We are prioritizing the following projects, but welcome suggestions for others:"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Project"}),(0,i.jsx)(n.th,{children:"Impact"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"GNU Octave Packages."}),(0,i.jsxs)(n.td,{children:["Complement the ",(0,i.jsx)(n.a,{href:"https://github.com/jupyter-xeus/xeus-octave",children:"xeus-octave"})," kernel by packaging Octave\u2019s ",(0,i.jsx)(n.a,{href:"https://gnu-octave.github.io/packages/",children:"official package ecosystem"}),"."]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Bioconductor R Packages"}),(0,i.jsx)(n.td,{children:"Bring bioinformatics and computational biology tools to the browser."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"PyTorch"}),(0,i.jsx)(n.td,{children:"Enable machine learning workflows in the browser."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Custom Requests"}),(0,i.jsx)(n.td,{children:"Have a specific package in mind? Let\u2019s discuss how to prioritize it!"})]})]})]}),"\n",(0,i.jsx)(n.h5,{id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",children:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},3315:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"type":"mdx","permalink":"/sponsor/descriptions/NbconvertModernization","source":"@site/src/pages/sponsor/descriptions/NbconvertModernization.md","description":"Overview","frontMatter":{},"unlisted":false}');var i=r(4848),o=r(8453);const s={},a=void 0,c={},l=[{value:"Overview",id:"overview",level:4},{value:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it.",id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",level:5}];
1function d(e){const n={h4:"h4",h5:"h5",p:"p",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h4,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"Conversion of Jupyter notebooks to PDF currently relies on nbconvert in the backend, which in turns uses a headless browser for producing the PDF. We propose to directly perform the PDF conversion in the user's browser, which will simplify the architecture and make it function with JupyterLite."}),"\n",(0,i.jsx)(n.p,{children:"Nbconvert heavily relies on Jinja2 templates for conversion to different formats."}),"\n",(0,i.jsx)(n.p,{children:"We will utilize a JavaScript implementation of Jinja2 covering the required features of Jinja to produce a frontend version of nbconvert that does not require Python but still provides a good coverage of the nbconvert features, including the use of custom templates."}),"\n",(0,i.jsx)(n.h5,{id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",children:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},3415:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"type":"mdx","permalink":"/sponsor/descriptions/BinaryViewInArrowCpp","source":"@site/src/pages/sponsor/descriptions/BinaryViewInArrowCpp.md","description":"Overview","frontMatter":{},"unlisted":false}');var i=r(4848),o=r(8453);const s={},a=void 0,c={},l=[{value:"Overview",id:"overview",level:4},{value:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it.",id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",level:5}];function d(e){const n={code:"code",h4:"h4",h5:"h5",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h4,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"Apache Arrow is the universal columnar format and multi-language toolbox for fast data interchange and in-memory analytics."}),"\n",(0,i.jsx)(n.p,{children:"Representation of string and binary data in Arrow traditionally uses the Binary layout, where the entire string data resides in a separate buffer that is accessed using indirect indexing from a buffer of offsets."}),"\n",(0,i.jsx)(n.p,{children:"Recently, the Arrow project added the Binary View layout, a more efficient layout inspired from modern execution engines where the beginning of each string is packed directly within the offsets buffer. This allows short strings to be read and processed directly without going through an additional indirection."}),"\n",(0,i.jsx)(n.p,{children:"However, while basic support is present, Binary View is not universally supported by all Arrow components."}),"\n",(0,i.jsx)(n.p,{children:"We propose to finish implementing support for Binary View and String View types in all components of Arrow C++:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"scalar compute kernels:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"equal"}),", ",(0,i.jsx)(n.code,{children:"less_equal"}),", etc."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"is_in"}),", ",(0,i.jsx)(n.code,{children:"index_in"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"ascii_*"}),", ",(0,i.jsx)(n.code,{children:"binary_*"}),", ",(0,i.jsx)(n.code,{children:"utf8_*"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"string_is_ascii"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"count_substring"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"extract_regex"}),", ",(0,i.jsx)(n.code,{children:"extract_regex_span"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"split_pattern"}),", ",(0,i.jsx)(n.code,{children:"split_pattern_regex"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"coalesce"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"vector compute kernels:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"take"}),", ",(0,i.jsx)(n.code,{children:"filter"}),", ",(0,i.jsx)(n.code,{children:"scatter"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"run_end_encode"}),", ",(0,i.jsx)(n.code,{children:"run_end_decode"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"sort_indices"}),", ",(0,i.jsx)(n.code,{children:"rank"}),", ",(0,i.jsx)(n.code,{children:"rank_normal"}),", ",(0,i.jsx)(n.code,{children:"rank_quantile"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"partition_nth_indices"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"select_k_unstable"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"replace_with_mask"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"fill_null_forward"}),", ",(0,i.jsx)(n.code,{children:"fill_null_backward"}),", ",(0,i.jsx)(n.code,{children:"drop_null"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"aggregate compute kernels:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"count_distinct"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"first"}),", ",(0,i.jsx)(n.code,{children:"last"}),", ",(0,i.jsx)(n.code,{children:"min"}),", ",(0,i.jsx)(n.code,{children:"max"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"index"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"CSV reader and writer"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"ORC reader and writer"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Funders can decide to fund the entire package, or choose the components they are interested in."}),"\n",(0,i.jsx)(n.h5,{id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",children:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},3870:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"type":"mdx","permalink":"/sponsor/descriptions/Float16SupportInXsimd","source":"@site/src/pages/sponsor/descriptions/Float16SupportInXsimd.md","description":"Overview","frontMatter":{},"unlisted":false}');var i=r(4848),o=r(8453);const s={},a=void 0,c={},l=[{value:"Overview",id:"overview",level:4},{value:"Why FP16 Matters",id:"why-fp16-matters",level:4},{value:"Hardware Landscape",id:"hardware-landscape",level:2}
1,{value:"Proposed Work",id:"proposed-work",level:4},{value:"Impact",id:"impact",level:4},{value:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it.",id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",level:5}];function d(e){const n={code:"code",em:"em",h2:"h2",h4:"h4",h5:"h5",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h4,{id:"overview",children:"Overview"}),"\n",(0,i.jsxs)(n.p,{children:["Xsimd is a C++ header-only library that abstracts SIMD (vectorization) intrinsics behind a single, generic API.\nThe same code \u2014 ",(0,i.jsx)(n.code,{children:"xsimd::batch<float>"})," \u2014 compiles to optimal machine code on x86 SSE/AVX, ARM NEON SVE, RISC-V, and WebAssembly, with no runtime overhead.\nWhen an intrinsic is missing on a given target, xsimd falls back gracefully rather than failing or leaving the developer to write platform-specific branches.\nThis is why projects like Mozilla Firefox, Apache Arrow, Meta Velox, KDE Krita, and Pythran have adopted it as their vectorization layer."]}
1),"\n",(0,i.jsx)(n.p,{children:"FP16 \u2014 the 16-bit half-precision floating point format \u2014 has become a first-class data type in modern computing.\nIt is the default storage format for large language model weights, the standard precision for neural network inference,\nand increasingly the format of choice wherever memory bandwidth is the binding constraint.\nYet consuming or producing FP16 data from C++ SIMD code today requires writing painful, platform-specific intrinsics by hand.\nxsimd currently has no FP16 support, forcing its users to drop out of the generic API the moment they touch half-precision data."}),"\n",(0,i.jsx)(n.p,{children:"We propose to add vectorized FP16 support to xsimd \u2014 native FP16 operations where hardware supports them, and correct fallbacks elsewhere."}),"\n",(0,i.jsx)(n.h4,{id:"why-fp16-matters",children:"Why FP16 Matters"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Memory bandwidth is a bottleneck."})," Modern CPUs and GPUs are not compute-bound \u2014 they are memory-bandwidth-bound.\nFP16 cuts data size in half versus FP32.\nThis means twice as many values fit in cache, twice as many elements move per memory transaction,\nand large working can perform more with L2 or L3 caches without accessing RAM.\nThe bandwidth saving alone, before any compute consideration, is the primary reason the format matters."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"SIMD registers double the throughput."})," With native arithmetic support, FP16 operation double the number\nof floating point numbers processed per CPU cycle when precision is not an issue."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"FP16 is widely used in AI."})," Transformer weights, KV caches, activations, and embeddings are all routinely stored in FP16.\nAny library that processes or pipelines this data at any point of the training and inference pipeline must be able to consume and produce FP16 buffers efficiently.\nWithout xsimd FP16 support, these projects become a limiting factor in an otheriwse highly optimized data transformation."]}),"\n",(0,i.jsx)(n.h2,{id:"hardware-landscape",children:"Hardware Landscape"}),"\n",(0,i.jsx)(n.p,{children:"FP16 conversion and arithmetic are now widely available across all major SIMD families:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"x86"}),": Early on, the ",(0,i.jsx)(n.code,{children:"f16c"})," feature introduced SIMD convertion from FP16 and FP32 for efficient storage, while arithmetic would still be performed in FP32.\nWith the AVX-512 generation, support for doing operations directly in FP16 is introduce with sigificant speedups."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"ARM"}),": FP16 support becomes mandatory in latest ARM generations (ARM v8.2-a) with arithmetic, convertion, ",(0,i.jsx)(n.em,{children:"etc"}),".\nThis affects NEON operations on modern smartphones and all Apple silicon M-chips.\nCoverage is extended server side with both SVE and SVE2 supporting FP16."]}),"\n"]}
1),"\n",(0,i.jsx)(n.h4,{id:"proposed-work",children:"Proposed Work"}),"\n",(0,i.jsx)(n.p,{children:"This proposal covers foundational FP16 support: native FP16 operations on platforms that provide hardware acceleration, and correct, efficient fallbacks everywhere else."}),"\n",(0,i.jsx)(n.p,{children:"Concretely, this means:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A new ",(0,i.jsx)(n.code,{children:"xsimd::batch<xsimd::fp16>"})," type (or equivalent half-precision batch specialization) that can be loaded from and stored to FP16 buffers."]}),"\n",(0,i.jsxs)(n.li,{children:["Support for converting from and to ",(0,i.jsx)(n.code,{children:"batch<float>"}),", mapping to the optimal hardware instruction where available, and a correct SIMD algorithm elsewhere."]}),"\n",(0,i.jsx)(n.li,{children:"Native FP16 arithmetic operations \u2014 add, multiply, FMA, min, max, and comparison \u2014 on backends that provide hardware support, with FP32-based fallbacks on those that do not"}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"impact",children:"Impact"}),"\n",(0,i.jsx)(n.p,{children:"Funding this development will directly open xsimd to the rapidly growing landscape of LLM and machine\nlearning workflows: local inference engines, model weight processing, and embedding pipelines."}),"\n",(0,i.jsx)(n.p,{children:"Beyond new workloads, this will benefit existing projects using xsimd that already handle FP16 data.\nFor instance Apache Arrow and Parquet process half-precision columns today without hardware-optimized SIMD support.\nThese projects stand to benefit directly and with small integration effort."}),"\n",(0,i.jsx)(n.h5,{id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",children:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},4277:(e,n,r)=>{r.d(n,{A:()=>t});const t={section:"section_hrRJ",section_bg_slot:"section_bg_slot_Py1i",section_content:"section_content_MXCA",section_page_top:"section_page_top_n6kR",section_white:"section_white_NJHU",section_yellow:"section_yellow_lHeB",section_dark:"section_dark_voSE",section_light_blue:"section_light_blue_KcCg",section_light_grey:"section_light_grey_soA3",section_tight:"section_tight_WWQM",section_loose:"section_loose_rqTT",section_full_height:"section_full_height_yM8i",split:"split_KE8j",split_reverse:"split_reverse_VejO",split_text:"split_text_OAhE",split_image:"split_image_q3ZG",split_50:"split_50_zc_g",card:"card_KJWD",card_yellow:"card_yellow_lL4x",card_transparent:"card_transparent_lrLG",card_hover:"card_hover_XmaW",card_grid:"card_grid_yof4",card_grid_2:"card_grid_2_J5wC",card_grid_4:"card_grid_4_gyV7",banner:"banner_uoZA",banner_dark:"banner_dark_uQQ8",banner_title:"banner_title_lCsw",banner_title_dark:"banner_title_dark_ciiJ",banner_title_light:"banner_title_light_JAsP",banner_body:"banner_body_gAB1",banner_full_height:"banner_full_height_kZzY"}},4349:(e,n,r)=>{r.d(n,{A:()=>s});var t,i=r(6540);function o(){return o=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)({}).hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},o.apply(null,arguments)}const s=({title:e,titleId:n,...r})=>i.createElement("svg",o({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":n},r),e?i.createElement("title",{id:n},e):null,t||(t=i.createElement("g",{transform:"matrix(.88889 0 0 .88889 -.87 0)"},i.createElement("circle",{cx:18.98,cy:18,r:17.5}),i.createElement("path",{fill:"#000",d:"M10.98 14.667h3.333V26h-3.334zm1.656-1.334h-.018c-.995 0-1.639-.741-1.639-1.667 0-.946.664-1.666 1.677-1.666s1.638.72 1.657 1.666c0 .925-.644 1.667-1.677 1.667M26.98 26h-3.334v-6.066c0-1.465-.817-2.465-2.128-2.465-1 0-1.542.674-1.805 1.326-.096.234-.067.879-.067 1.205v6h-3.333V14.667h3.333v1.744c.48-.744 1.233-1.744 3.159-1.744 2.385 0 4.174 1.5 4.174 4.849z"}))))},4765:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"type":"mdx","permalink":"/sponsor/descriptions/ParquetNullOptimizations","source":"@site/src/pages/sponsor/descriptions/ParquetNullOptimizations.md","description":"Overview","frontMatter":{},"unlisted":false}');var i=r(4848),o=r(8453);const s={},a=void 0,c={},l=[{value:"Overview",id:"overview",level:4},{value:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it",id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",level:5}];
1function d(e){const n={em:"em",h4:"h4",h5:"h5",li:"li",ol:"ol",p:"p",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h4,{id:"overview",children:"Overview"}),"\n",(0,i.jsxs)(n.p,{children:["Apache Parquet is an open source, column-oriented data file format designed for\nefficient data storage and retrieval. Together with Apache Arrow for in-memory data,\nit has become the ",(0,i.jsx)(n.em,{children:"de facto"})," standard for efficient columnar analytics."]}),"\n",(0,i.jsx)(n.p,{children:'While Parquet and Arrow are most often used together, they have incompatible physical\nrepresentations of data with optional values: data where some values can be\nmissing or "null". While Arrow uses a validity bitmap for each schema field and nesting level,\nParquet condenses that information in a more sophisticated structure called definition\nlevels (borrowing ideas from Google\'s Dremel project).'}),"\n",(0,i.jsx)(n.p,{children:"Converting between those two representations is non-trivial and often turns out\na performance bottleneck when reading a Parquet file as in-memory Arrow data.\nEven columns that practically do not contain any nulls can still suffer from it if\nthe data is declared nullable (
1optional) at the schema level."}),"\n",(0,i.jsx)(n.p,{children:"We propose to optimize the conversion of null values from Parquet in Arrow C++\nfor flat (non-nested) data:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"decoding Parquet definition levels directly into an Arrow validity bitmap, rather than using an\nintermediate representation as 16-bit integers;"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"avoiding decoding definition levels entirely when a data page's statistics shows\nit cannot contain any nulls (or, conversely, when it cannot contain any non-null values)."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"As a subsequent task, these optimizations may be extended so as to apply to schemas\nwith moderate amounts of nesting."}),"\n",(0,i.jsx)(n.p,{children:"This work will benefit applications using Arrow C++ or any of its language\nbindings (such as PyArrow, R-Arrow...)."}),"\n",(0,i.jsx)(n.p,{children:"Depending on the typology of Parquet data, this could make Parquet reading 2x\nfaster, even more in some cases. If you are unsure whether your workload could\nbenefit, we can discuss this based on sample Parquet files you provide us."}),"\n",(0,i.jsx)(n.h5,{id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",children:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it"})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},4940:(e,n,r)=>{r.r(n),r.d(n,{FundableContent:()=>u,default:()=>m});var t=r(1656),i=r(8478),o=r(5813),s=r(58),a=r(2241),c=r(1237),l=r(1199),d=r(8916),h=r(734),p=r(4848);function u(){return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(s.A,{pageTop:!0,fullHeight:!0,bg:"yellow",children:[(0,p.jsx)("h1",{children:"Sponsor open-source work"}),(0,p.jsx)("p",{className:"page-tagline",children:"Back the features the scientific community needs."}),(0,p.jsx)("p",{children:"High-demand open-source features with detailed plans already in place \u2014 the work is scoped, the need is proven, only funding is missing. Sponsoring through QuantStack means your investment lands upstream and benefits the entire ecosystem. Back a project and get it shipped."}),(0,p.jsxs)("div",{style:{display:"flex",gap:"var(--ifm-spacing-xl)",alignItems:"center",flexWrap:"wrap"},children:[(0,p.jsx)(l.A,{label:"Get in touch"}),(0,p.jsx)(d.A,{})]})]}),(0,p.jsx)(a.A,{variant:3}),(0,p.jsx)(s.A,{children:(0,p.jsx)(h.a,{})}),(0,p.jsx)(c.A,{bg:"dark",title:"Can't find a project?",cta:(0,p.jsx)(l.A,{label:"CONTACT US"}),children:"If you have a project in mind that you think would be relevant to our expertise, contact us to discuss it."})]})}function m(){return(0,p.jsxs)(t.A,{children:[(0,p.jsx)(i.A,{children:()=>(0,p.jsx)(u,{})}),(0,p.jsx)(o.A,{})]})}},5667:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"type":"mdx","permalink":"/sponsor/descriptions/Float16InArrowCpp","source":"@site/src/pages/sponsor/descriptions/Float16InArrowCpp.md","description":"Overview","frontMatter":{},"unlisted":false}');var i=r(4848),o=r(8453);const s={},a=void 0,c={},l=[{value:"Overview",id:"overview",level:4},{value:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it.",id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",level:5}];function d(e){const n={code:"code",h4:"h4",h5:"h5",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h4,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"Apache Arrow is the universal columnar format and multi-language toolbox for fast data interchange and in-memory analytics."}),"\n",(0,i.jsx)(n.p,{children:"Arrow offers three floating-point data types based on the standard IEEE binary floating-point representation:\nFloat16, Float32 and Float64."}),"\n",(0,i.jsx)(n.p,{children:"In some workloads, 16-bit floating-point numbers have become a popular alternative to 32-bit and 64-bit representations, bringing better memory footprint and potentially better performance (when hardware support is present)."}),"\n",(0,i.jsx)(n.p,{children:"However, while basic support is present, Float16 is not universally supported in all Arrow C++ components because of limited language support for 16-bit floating-point numbers."}),"\n",(0,i.jsx)(n.p,{children:"We propose to finish implementing support for Float16 in all components of Arrow C++:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"scalar compute kernels:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["arithmetic: ",(0,i.jsx)(n.code,{children:"abs"}),", ",(0,i.jsx)(n.code,{children:"add"}),", etc."]}),"\n",(0,i.jsxs)(n.li,{children:["comparisons: ",(0,i.jsx)(n.code,{children:"equal"}),", etc."]}),"\n",(0,i.jsxs)(n.li,{children:["math: ",(0,i.jsx)(n.code,{children:"sqrt"}),", etc."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"is_in"}),", ",(0,i.jsx)(n.code,{children:"index_in"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"vector compute kernels:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"sort_indices"}),", ",(0,i.jsx)(n.code,{children:"rank"}),", ",(0,i.jsx)(n.code,{children:"rank_normal"}),", ",(0,i.jsx)(n.code,{children:"rank_quantile"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"partition_nth_indices"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"select_k_unstable"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"aggregate compute kernels:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"sum"}),", ",(0,i.jsx)(n.code,{children:"product"}),", ",(0,i.jsx)(n.code,{children:"mean"}),", ",(0,i.jsx)(n.code,{children:"mode"}),", ",(0,i.jsx)(n.code,{children:"quantile"}),", ",(0,i.jsx)(n.code,{children:"tdigest"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"variance"}),", ",(0,i.jsx)(n.code,{children:"stddev"}),", ",(0,i.jsx)(n.code,{children:"skew"}),", ",(0,i.jsx)(n.code,{children:"kurtosis"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"first"}),", ",(0,i.jsx)(n.code,{children:"last"}),", ",(0,i.jsx)(n.code,{children:"min"}),", ",(0,i.jsx)(n.code,{children:"max"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"index"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"CSV reader"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"ORC reader and writer"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Funders can decide to fund the entire package, or choose the components they are interested in."}),"\n",(0,i.jsx)(n.h5,{id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",children:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},5813:(e,n,r)=>{r.d(n,{A:()=>h});var t=r(8774);const i={footer_container:"footer_container_uQYf",copyright_container:"copyright_container_ConT",menu_container:"menu_container_CbvH",col_social_media_desktop:"col_social_media_desktop_mI9U",col_address_desktop:"col_address_desktop_EQ68",col_social_media_mobile:"col_social_media_mobile_WjQw",col_social_media_and_address_mobile:"col_social_media_and_address_mobile_Mq8m"};var o=r(2070),s=r(4349),a=r(1066),c=r(326),l=r(4848);function d(){return(0,l.jsxs)("div",{children:[(0,l.jsx)("b",{children:"Follow us on"})," ",(0,l.jsx)("br",{}),(0,l.jsxs)("div",{style:{marginBottom:"var(--ifm-spacing-lg)"},children:[(0,l.jsx)(t.A,{href:"https://github.com/QuantStack",children:(0,l.jsx)(o.A,{})}),(0,l.jsx)(t.A,{href:"https://www.linkedin.com/company/quantstack/mycompany",children:(0,l.jsx)(s.A,{})}),(0,l.jsx)(t.A,{href:"https://bsky.app/profile/quantstack.bsky.social",children:(0,l.jsx)(a.A,{})}),(0,l.jsx)(t.A,{href:"https://mastodon.social/@QuantStack ",children:(0,l.jsx)(c.A,{})})]})]})}function h(){return(0,l.jsxs)("div",{className:"container "+i.footer_container,children:[(0,l.jsxs)("div",{className:"row",style:{paddingBottom:"var(--ifm-spacing-xl)"},children:[(0,l.jsxs)("div",{className:"col "+i.col_social_media_desktop,children:[(0,l.jsx)(d,{}),(0,l.jsx)("div",{children:(0,l.jsxs)(t.A,{href:"/legal",children:[" ",(0,l.jsx)("b",{children:"Legal"})]})})]}),(0,l.jsx)("div",{className:"col flex-horizontally-centered",children:(0,l.jsxs)("div",{className:"container "+i.menu_container,children:[(0,l.jsxs)("div",{style:{textAlign:"center"},children:[(0,l.jsx)("b",{children:"Menu"})," ",(0,l.jsx)("br",{})]}),(0,l.jsxs)("div",{className:"row",children:[(0,l.jsx)("div",{className:"col flex-horizontally-centered",children:(0,l.jsxs)("ul",{children:[(0,l.jsx)("li",{children:(0,l.jsx)(t.A,{href:"/",children:"Home"})}),(0,l.jsx)("li",{children:(0,l.jsx)(t.A,{href:"/projects",children:"Projects"})}),(0,l.jsx)("li",{children:(0,l.jsx)(t.A,{href:"/about",children:"About us"})})]})}),(0,l.jsx)("div",{className:"col flex-horizontally-centered",children:(0,l.jsxs)("ul",{children:[(0,l.jsx)("li",{children:(0,l.jsx)(t.A,{href:"/services",children:"Services"})}),(0,l.jsx)("li",{children:(0,l.jsx)(t.A,{href:"/careers",children:"Careers"})}),(0,l.jsx)("li",{children:(0,l.jsx)(t.A,{href:"/blog",children:"Blog"})})]})})]})]})}),(0,l.jsx)("div",{className:"col flex-full-centered "+i.col_address_desktop,children:(0,l.jsx)("div",{children:(0,l.jsxs)("div",{children:[(0,l.jsx)("b",{children:"QuantStack"})," ",(0,l.jsx)("br",{}),"16, avenue Curti ",(0,l.jsx)("br",{}),"94100 Saint-Maur-des-Foss\xe9s ",(0,l.jsx)("br",{}),"France"]})})}),(0,l.jsxs)("div",{className:"col "+i.col_social_media_and_address_mobile,children:[(0,l.jsx)(d,{}),(0,l.jsx)("div",{style:{marginBottom:"var(--ifm-spacing-lg"},children:(0,l.jsxs)(t.A,{href:"/legal",children:[" ",(0,l.jsx)("b",{children:"Legal"})]})}),(0,l.jsx)("div",{children:(0,l.jsxs)("div",{children:[(0,l.jsx)("b",{children:"QuantStack"})," ",(0,l.jsx)("br",{}),"16, avenue Curti ",(0,l.jsx)("br",{}),"94100 Saint-Maur-des-Foss\xe9s ",(0,l.jsx)("br",{}),"France"]})})]})]}),(0,l.jsx)("div",{className:"row flex-full-centered",children:(0,l.jsx)("div",{className:i.copyright_container,children:"Copyright \xa9 2026 \xb7 QuantStack"})})]})}},6405:(e,n,r)=>{r.d(n,{A:()=>s});var t=r(4164),i=r(4277),o=(r(6540),r(4848));function s({bg:e="white",hover:n=!1,className:r,onClick:s,children:a}){return(0,o.jsx)("div",{className:(0,t.A)(i.A.card,"yellow"===e&&i.A.card_yellow,"transparent"===e&&i.A.card_transparent,n&&i.A.card_hover,r),onClick:s,children:a})}},6714:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"type":"mdx","permalink":"/sponsor/descriptions/JupyterGISToolsForPythonAPI","source":"@site/src/pages/sponsor/descriptions/JupyterGISToolsForPythonAPI.md","description":"Overview","frontMatter":{},"unlisted":false}');var i=r(4848),o=r(8453);const s={},a=void 0,c={},l=[{value:"Overview",id:"overview",level:4},{value:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it.",id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",level:5}];
1function d(e){const n={h4:"h4",h5:"h5",p:"p",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h4,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"JupyterGIS currently supports several vector processing and conversion tools such as buffer creation, centroid computation, and convex hull generation, similar to what QGIS offers. These features are powered by a GDAL WebAssembly (WASM) build and are currently available only through the JupyterGIS user interface."}),"\n",(0,i.jsx)(n.p,{children:"We plan to extend these capabilities to the JupyterGIS Python API, enabling users to access the same processing tools programmatically, just as they would via the UI. This functionality will be implemented using the GDAL Python bindings."}),"\n",(0,i.jsx)(n.h5,{id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",children:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},6981:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"type":"mdx","permalink":"/sponsor/descriptions/JupyterGISRasterProcessing","source":"@site/src/pages/sponsor/descriptions/JupyterGISRasterProcessing.md","description":"Overview","frontMatter":{},"unlisted":false}');var i=r(4848),o=r(8453);const s={},a=void 0,c={},l=[{value:"Overview",id:"overview",level:4},{value:"Upcoming Raster Processing Features",id:"upcoming-raster-processing-features",level:5},{value:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it.",id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",level:5}];function d(e){const n={h4:"h4",h5:"h5",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h4,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"JupyterGIS provides a powerful suite of vector geospatial processing tools - such as buffer creation, centroid calculation, and convex hull generation\u2014directly in the browser. These capabilities are enabled by a GDAL WebAssembly (WASM) build, eliminating the need for server-side processing or local installations."}),"\n",(0,i.jsx)(n.p,{children:"Building on this foundation, we are now expanding support to raster processing tools, unlocking even more geospatial workflows in JupyterLite and notebook.link. This will enable users to perform complex raster operations entirely client-side, making geospatial analysis more accessible, collaborative, and scalable."}),"\n",(0,i.jsx)(n.h5,{id:"upcoming-raster-processing-features",children:"Upcoming Raster Processing Features"}),"\n",(0,i.jsx)(n.p,{children:"We are prioritizing the following features, but welcome community input to shape the roadmap:"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Feature"}),(0,i.jsx)(n.th,{children:"Use Case"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Clipping by Extent"}),(0,i.jsx)(n.td,{children:"Extract raster data for a specific geographic area."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Clipping by Mask Layer"}),(0,i.jsx)(n.td,{children:"Use vector layers to define custom clipping boundaries."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Generating Contours"}),(0,i.jsx)(n.td,{children:"Create contour lines from elevation or other continuous raster datasets."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Polygonizing Raster Data"}),(0,i.jsx)(n.td,{children:"Convert raster cells into vector polygons for further analysis."})]})]})]}),"\n",(0,i.jsx)(n.h5,{id:"are-you-interested-in-this-project-either-entirely-or-partially-contact-us-for-more-information-on-how-to-help-us-fund-it",children:"Are you interested in this project? Either entirely or partially, contact us for more information on how to help us fund it."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},7058:(e,n,r)=>{r.d(n,{w:()=>a,A:()=>c});var t=r(746),i=(r(6540),r(8774)),o=r(4848);function s({label:e,pageName:n}){return(0,o.jsx)("div",{className:"flex-full-centered",children:(0,o.jsx)(i.A,{className:"link-to-button "+t.A.link_to_get_a_quote,to:`/s
1ponsor/${n}/GetAQuote`,children:e})})}function a({project:e}){return(0,o.jsxs)("div",{className:"container",children:[(0,o.jsx)("div",{className:"row-padding-none",children:(0,o.jsx)("div",{className:"col col--12",children:(0,o.jsx)("div",{className:t.A.large_project_card_title,children:e.title})})}),(0,o.jsx)("div",{className:"row",children:(0,o.jsx)("div",{className:"col col--12",children:(0,o.jsx)("div",{className:t.A.large_project_card_text_container,children:(0,o.jsx)("div",{className:t.A.large_project_card_description_container,children:(0,o.jsx)("div",{className:t.A.large_project_card_description,children:(0,o.jsx)(e.description,{})})})})})})]})}function c({project:e}){return(0,o.jsxs)("div",{className:t.A.large_project_card,children:[(0,o.jsx)(a,{project:e}),(0,o.jsx)("div",{className:"row",children:(0,o.jsx)("div",{className:"col col--12",children:(0,o.jsx)("div",{children:(0,o.jsx)(s,{label:"GET A QUOTE",pageName:e.pageName})})})})]})}},7118:(e,n,r)=>{r.d(n,{A:()=>t});const t={project_dialog_overlay:"project_dialog_overlay_Kk1F",project_dialog_content:"project_dialog_content_EpHz",small_portrait_card:"small_portrait_card_vdGC",value_icon:"value_icon_qxu4",value_header:"value_header_FeAt",value_text:"value_text_f_r1",row:"row_kY01",bio_container:"bio_container_OCLz",small_card_complete_name:"small_card_complete_name_Um8o",small_card_position:"small_card_position_T_00",large_card_complete_name:"large_card_complete_name_EFDv",large_card_position:"large_card_position_W5UP",social_icons:"social_icons_yvOa",GitHubName:"GitHubName_UwB2",join_the_team_title:"join_the_team_title_rug1",join_the_team_text:"join_the_team_text_XFQY",avatar:"avatar_jRur",distinction_icon:"distinction_icon_L5cC",value_card:"value_card_e7Ki",subteam_container:"subteam_container_IPck",team_description:"team_description_QGgL",large_portrait_card:"large_portrait_card_TUzn",values_row:"values_row_yUXM"}},8453:(e,n,r)=>{r.d(n,{R:()=>s,x:()=>a});var t=r(6540);const i={},o=t.createContext(i);function s(e){const n=t.useContext(o);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),t.createElement(o.Provider,{value:n},e.children)}},8478:(e,n,r)=>{r.d(n,{A:()=>o});r(6540);var t=r(2303),i=r(4848);function o({children:e,fallback:n}){return(0,t.A)()?(0,i.jsx)(i.Fragment,{children:e?.()}):n??null}},8916:(e,n,r)=>{r.d(n,{A:()=>i});r(6540);var t=r(4848);function i({label:e="Read more"}){return(0,t.jsxs)("button",{onClick:()=>window.scrollBy({top:window.innerHeight,behavior:"smooth"}),style:{display:"inline-flex",alignItems:"center",gap:"8px",cursor:"pointer",background:"none",border:"none",padding:"14px 0",fontFamily:"var(--ifm-font-family-roboto)",fontSize:"15px",fontWeight:700,letterSpacing:"0.5px",color:"var(--ifm-color-primary-p2)",textDecoration:"none"},children:[e,(0,t.jsx)("svg",{width:"18",height:"18",viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,t.jsx)("path",{d:"M9 3.5v11M4.5 10l4.5 4.5 4.5-4.5",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})]})}},9617:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"type":"mdx","permalink":"/sponsor/descriptions/MatrixOperationsInXtensor","source":"@site/src/pages/sponsor/descriptions/MatrixOperationsInXtensor.md","description":"Overview","frontMatter":{},"unlisted":false}');var i=r(4848),o=r(8453);const s={},a=void 0,c={},l=[{value:"Overview",id:"overview",level:4},{value:"Background",id:"background",level:5},{value:"Objectives",id:"objectives",level:5}];function d(e){const n={a:"a",h4:"h4",h5:"h5",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h4,{id:"overview",children:"Overview"}),"\n",(0,i.jsxs)(n.p,{children:["This project aims to integrate Kazushige Goto\u2019s highly optimized matrix multiplication algorithms into the ",(0,i.jsx)(n.a,{href:"https://github.com/xtensor-stack/xtensor/",children:"xtensor"})," framework, leveraging the ",(0,i.jsx)(n.a,{href:"https://github.com/xtensor-stack/xsimd/",children:"xsimd"})," library for SIMD acceleration."]}
1),"\n",(0,i.jsx)(n.h5,{id:"background",children:"Background"}),"\n",(0,i.jsx)(n.p,{children:'The GOTO algorithms, formalized by Kazushige Goto and Robert van de Geijn in their landmark paper "Anatomy of High-Performance Matrix Multiplication", are the algorithmic foundations underlying high-performance libraries such as GotoBLAS and OpenBLAS. The algorithms achieve near-peak CPU throughput through a principled exploitation of the memory hierarchy.'}),"\n",(0,i.jsx)(n.p,{children:"xtensor library is a popular C++ library for numerical analysis with a focus on multi-dimensional arrays and broadcasting, inspired by NumPy. xtensor leverages SIMD acceleration through the xsimd library and offers language bindings for Python, Julia and R."}),"\n",(0,i.jsx)(n.p,{children:"By integrating Goto's algorithms into xtensor and using xsimd for SIMD optimizations, we can provide users with faster matrix operations, especially for large-scale computations."}),"\n",(0,i.jsx)(n.h5,{id:"objectives",children:"Objectives"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Study and understand Kazushige Goto's matrix multiplication algorithms."}),"\n",(0,i.jsx)(n.li,{children:"Implement these algorithms in C++ using xsimd for SIMD acceleration. This implementation could be done in a way that is not tied to the xtensor codebase for better reusability."}),"\n",(0,i.jsx)(n.li,{children:"Integrate the implementation into the xtensor framework."}),"\n",(0,i.jsx)(n.li,{children:"Benchmark the performance against existing xtensor matrix operations and other libraries like Eigen and BLAS."}),"\n",(0,i.jsx)(n.li,{children:"Document the implementation and provide examples for users."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.