diff --git a/.github/workflows/build-db.yml b/.github/workflows/build-db.yml index 48ede9120d..e85b5dfac8 100644 --- a/.github/workflows/build-db.yml +++ b/.github/workflows/build-db.yml @@ -65,10 +65,17 @@ jobs: cd package/db python -Im build --sdist - name: Upload + uses: actions/upload-artifact@v4 + if: ${{ matrix.platform == 'sdist' }} + with: + name: dist-${{ matrix.platform }} + path: package/db/dist/*.tar.gz + - name: Upload wheel + if: ${{ matrix.platform != 'sdist' }} uses: actions/upload-artifact@v4 with: name: dist-${{ matrix.platform }} - path: package/db/dist/* + path: package/db/dist/*.whl test: runs-on: ubuntu-20.04 diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 2073ef0a61..c9df5d3215 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -22,7 +22,7 @@ jobs: teams: runs-on: ubuntu-latest - if: github.base_ref == 'develop' + if: false && github.base_ref == 'develop' # temporarily disabled steps: - uses: convictional/trigger-workflow-and-wait@v1.6.5 with: @@ -33,7 +33,12 @@ jobs: workflow_file_name: merge-oss.yml ref: develop wait_interval: 20 - client_payload: '{ "branch": "${{ github.head_ref || github.ref_name }}" }' + client_payload: | + { + "author": "${{ github.event.pull_request.user.login }}", + "branch": "${{ github.head_ref || github.ref_name }}", + "pr": ${{ github.event.pull_request.number }} + } propagate_failure: true trigger_workflow: true wait_workflow: true diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c33c70879c..0b3bf23ab7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -40,11 +40,14 @@ jobs: - windows-latest python: - "3.8" + - "3.9" - "3.10" - "3.11" exclude: - os: windows-latest python: "3.8" + - os: windows-latest + python: "3.9" - os: windows-latest python: "3.10" - os: windows-latest diff --git a/README.md b/README.md index e0e7fdf70f..2416c47d51 100644 --- a/README.md +++ b/README.md @@ -132,11 +132,12 @@ to make adjustments. If you are working in Google Colab, You will need: -- [Python](https://www.python.org) (3.7 or newer) +- [Python](https://www.python.org) (3.8 - 3.11) - [Node.js](https://nodejs.org) - on Linux, we recommend using [nvm](https://github.com/nvm-sh/nvm) to install an up-to-date version. -- [Yarn](https://yarnpkg.com) - once Node.js is installed, you can install - Yarn via `npm install -g yarn` +- [Yarn](https://yarnpkg.com) - once Node.js is installed, you can + [enable Yarn](https://yarnpkg.com/getting-started/install) via + `corepack enable` - On Linux, you will need at least the `openssl` and `libcurl` packages. On Debian-based distributions, you will need to install `libcurl4` or `libcurl3` instead of `libcurl`, depending on the age of your distribution. @@ -154,8 +155,7 @@ sudo dnf install libcurl openssl We strongly recommend that you install FiftyOne in a [virtual environment](https://voxel51.com/docs/fiftyone/getting_started/virtualenv.html) -to maintain a clean workspace. The install script is only supported in -POSIX-based systems (e.g. Mac and Linux). +to maintain a clean workspace. First, clone the repository: @@ -167,7 +167,11 @@ cd fiftyone Then run the install script: ```shell +# Mac or Linux bash install.bash + +# Windows +.\install.bat ``` **NOTE:** If you run into issues importing FiftyOne, you may need to add the @@ -203,7 +207,11 @@ you should perform a developer installation using the `-d` flag of the install script: ```shell +# Mac or Linux bash install.bash -d + +# Windows +.\install.bat -d ``` Although not required, developers typically prefer to configure their FiftyOne @@ -222,7 +230,12 @@ cell and then **restarting the runtime**: git clone --depth 1 https://github.com/voxel51/fiftyone.git cd fiftyone + +# Mac or Linux bash install.bash + +# Windows +.\install.bat ``` ### Docker installs diff --git a/app/package.json b/app/package.json index 768f531905..9c36dad7b5 100644 --- a/app/package.json +++ b/app/package.json @@ -7,13 +7,13 @@ "main": "index.js", "scripts": { "build": "yarn workspace @fiftyone/app build", + "build:win32": "yarn workspace @fiftyone/app build:win32", "compile": "yarn relay-compiler", "dev": "yarn workspace @fiftyone/app dev", "dev:py": "python ../fiftyone/server/main.py", "dev:wpy": "concurrently -k yarn:dev yarn:dev:py", "doc": "./gen-docs.sh", "lint:prettify": "prettier --config ../.prettierrc.js --ignore-path ../.prettierignore --write \"packages/**/*.(ts|js|jsx|tsx|json|css|scss)\"", - "postinstall": "patch-package", "start": "yarn workspace @fiftyone/app start", "start-desktop": "yarn workspace FiftyOne start-desktop", "test": "yarn vitest run", @@ -36,7 +36,6 @@ "eslint-plugin-react": "^7.31.11", "eslint-plugin-react-hooks": "^4.6.0", "jsdom": "^20.0.2", - "patch-package": "^6.4.7", "prettier": "^2.8.0", "relay-compiler": "^14.1.0", "relay-runtime": "^14.1.0", diff --git a/app/packages/app/package.json b/app/packages/app/package.json index 125188f23a..062804a5f5 100644 --- a/app/packages/app/package.json +++ b/app/packages/app/package.json @@ -7,9 +7,11 @@ "scripts": { "dev": "vite", "build": "yarn workspace @fiftyone/fiftyone compile && yarn build-bare && yarn copy-to-python", + "build:win32": "yarn workspace @fiftyone/fiftyone compile && yarn build-bare && yarn copy-to-python:win32", "build-bare": "NODE_OPTIONS=--max-old-space-size=4096 && tsc && vite build", "build-desktop": "NODE_OPTIONS=--max-old-space-size=4096 && tsc && vite build --mode desktop", "copy-to-python": "rm -rf ../../../fiftyone/server/static && cp -r ./dist ../../../fiftyone/server/static", + "copy-to-python:win32": "robocopy './dist' '../../../fiftyone/server/static' /MIR", "copy-to-desktop": "rm -rf ../desktop/dist/ && cp -r ./dist ../desktop/dist" }, "dependencies": { diff --git a/app/packages/components/src/components/ThemeProvider/index.tsx b/app/packages/components/src/components/ThemeProvider/index.tsx index 79a48aaab6..17db16e248 100644 --- a/app/packages/components/src/components/ThemeProvider/index.tsx +++ b/app/packages/components/src/components/ThemeProvider/index.tsx @@ -234,7 +234,15 @@ let theme = extendMuiTheme({ }, }, }, + MuiTab: { + styleOverrides: { + root: { + fontSize: "1rem", + }, + }, + }, }, + fontFamily: { body: "Palanquin, sans-serif", }, diff --git a/app/packages/core/src/components/Modal/Sample.tsx b/app/packages/core/src/components/Modal/Sample.tsx index 53a6cd74c1..7811e97389 100644 --- a/app/packages/core/src/components/Modal/Sample.tsx +++ b/app/packages/core/src/components/Modal/Sample.tsx @@ -41,27 +41,25 @@ export const SampleWrapper = ({ const hoveringRef = useRef(false); const sample = useRecoilValue(sampleAtom); const isGroup = useRecoilValue(isDynamicGroup); - const hover = useHoveredSample(sample.sample, { + const { handlers: hoverEventHandlers } = useHoveredSample(sample.sample, { update, clear, }); - if (isGroup) { - return <>{children}>; - } - return (
1024,I&&(t.dump&&Xw===t.dump.charCodeAt(0)?v+="?":v+="? "),v+=t.dump,I&&(v+=CT(t,e)),ed(t,e+1,E,!0,I)&&(t.dump&&Xw===t.dump.charCodeAt(0)?v+=":":v+=": ",v+=t.dump,a+=v));t.tag=n,t.dump=a||"{}"}function kK(t,e,r){var o,a,n,u,A,p;for(a=r?t.explicitTypes:t.implicitTypes,n=0,u=a.length;n tag resolver accepts not "'+p+'" style');t.dump=o}return!0}return!1}function ed(t,e,r,o,a,n){t.tag=null,t.dump=r,kK(t,r,!1)||kK(t,r,!0);var u=QK.call(t.dump);o&&(o=t.flowLevel<0||t.flowLevel>e);var A=u==="[object Object]"||u==="[object Array]",p,h;if(A&&(p=t.duplicates.indexOf(r),h=p!==-1),(t.tag!==null&&t.tag!=="?"||h||t.indent!==2&&e>0)&&(a=!1),h&&t.usedDuplicates[p])t.dump="*ref_"+p;else{if(A&&h&&!t.usedDuplicates[p]&&(t.usedDuplicates[p]=!0),u==="[object Object]")o&&Object.keys(t.dump).length!==0?(q6e(t,e,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(H6e(t,e,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump));else if(u==="[object Array]"){var E=t.noArrayIndent&&e>0?e-1:e;o&&t.dump.length!==0?(_6e(t,E,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(U6e(t,E,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump))}else if(u==="[object String]")t.tag!=="?"&&N6e(t,t.dump,e,n);else{if(t.skipInvalid)return!1;throw new $w("unacceptable kind of an object to dump "+u)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function G6e(t,e){var r=[],o=[],a,n;for(wT(t,r,o),a=0,n=o.length;a {var n,u;if(Object.getPrototypeOf(o).toString()==="[object Set]")if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A=[...o],p=[...o];if(!r(p,Object.assign(Object.assign({},a),{coercion:void 0})))return!1;let h=()=>p.some((E,I)=>E!==A[I])?new Set(p):o;return a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",nI(a.coercion,o,h)]),!0}else{let A=!0;for(let p of o)if(A=t(p,Object.assign({},a))&&A,!A&&a?.errors==null)break;return A}if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A={value:o};return r(o,Object.assign(Object.assign({},a),{coercion:Wu(A,"value")}))?(a.coercions.push([(u=a.p)!==null&&u!==void 0?u:".",nI(a.coercion,o,()=>new Set(A.value))]),!0):!1}return pr(a,`Expected a set (got ${qn(o)})`)}})}function fqe(t,e){let r=iD(sD([t,e])),o=oD(e,{keys:t});return Hr({test:(a,n)=>{var u,A,p;if(Object.getPrototypeOf(a).toString()==="[object Map]")if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h=[...a],E=[...a];if(!r(E,Object.assign(Object.assign({},n),{coercion:void 0})))return!1;let I=()=>E.some((v,x)=>v[0]!==h[x][0]||v[1]!==h[x][1])?new Map(E):a;return n.coercions.push([(u=n.p)!==null&&u!==void 0?u:".",nI(n.coercion,a,I)]),!0}else{let h=!0;for(let[E,I]of a)if(h=t(E,Object.assign({},n))&&h,!h&&n?.errors==null||(h=e(I,Object.assign(Object.assign({},n),{p:Kp(n,E)}))&&h,!h&&n?.errors==null))break;return h}if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h={value:a};return Array.isArray(a)?r(a,Object.assign(Object.assign({},n),{coercion:void 0}))?(n.coercions.push([(A=n.p)!==null&&A!==void 0?A:".",nI(n.coercion,a,()=>new Map(h.value))]),!0):!1:o(a,Object.assign(Object.assign({},n),{coercion:Wu(h,"value")}))?(n.coercions.push([(p=n.p)!==null&&p!==void 0?p:".",nI(n.coercion,a,()=>new Map(Object.entries(h.value)))]),!0):!1}return pr(n,`Expected a map (got ${qn(a)})`)}})}function sD(t,{delimiter:e}={}){let r=dz(t.length);return Hr({test:(o,a)=>{var n;if(typeof o=="string"&&typeof e<"u"&&typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");o=o.split(e),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)])}if(!Array.isArray(o))return pr(a,`Expected a tuple (got ${qn(o)})`);let u=r(o,Object.assign({},a));for(let A=0,p=o.length;A {var n;if(Array.isArray(o)&&typeof a?.coercions<"u")return typeof a?.coercion>"u"?pr(a,"Unbound coercion result"):r(o,Object.assign(Object.assign({},a),{coercion:void 0}))?(o=Object.fromEntries(o),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)]),!0):!1;if(typeof o!="object"||o===null)return pr(a,`Expected an object (got ${qn(o)})`);let u=Object.keys(o),A=!0;for(let p=0,h=u.length;p `:`[${x}]`)}o.push(...this.arity.leading.map(u=>`<${u}>`)),this.arity.extra===tl?o.push("..."):o.push(...this.arity.extra.map(u=>`[${u}]`)),o.push(...this.arity.trailing.map(u=>`<${u}>`))}return{usage:o.join(" "),options:a}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=yz(),r=un.InitialNode,o=this.usage().usage,a=this.options.filter(A=>A.required).map(A=>A.nameSet);r=Mc(e,el()),zo(e,un.InitialNode,Hn.StartOfInput,r,["setCandidateState",{candidateUsage:o,requiredOptions:a}]);let n=this.arity.proxy?"always":"isNotOptionLike",u=this.paths.length>0?this.paths:[[]];for(let A of u){let p=r;if(A.length>0){let v=Mc(e,el());Cy(e,p,v),this.registerOptions(e,v),p=v}for(let v=0;v {var XJe=Xp(),ZJe=Hl(),$Je=XJe(ZJe,"DataView");Cte.exports=$Je});var Bte=_((kFt,Ite)=>{var eVe=Xp(),tVe=Hl(),rVe=eVe(tVe,"Promise");Ite.exports=rVe});var Pte=_((QFt,vte)=>{var nVe=Xp(),iVe=Hl(),sVe=nVe(iVe,"Set");vte.exports=sVe});var Ste=_((RFt,Dte)=>{var oVe=Xp(),aVe=Hl(),lVe=oVe(aVe,"WeakMap");Dte.exports=lVe});var qI=_((FFt,Tte)=>{var $L=wte(),eN=UD(),tN=Bte(),rN=Pte(),nN=Ste(),Fte=gd(),Hy=qL(),bte="[object Map]",cVe="[object Object]",xte="[object Promise]",kte="[object Set]",Qte="[object WeakMap]",Rte="[object DataView]",uVe=Hy($L),AVe=Hy(eN),fVe=Hy(tN),pVe=Hy(rN),hVe=Hy(nN),dd=Fte;($L&&dd(new $L(new ArrayBuffer(1)))!=Rte||eN&&dd(new eN)!=bte||tN&&dd(tN.resolve())!=xte||rN&&dd(new rN)!=kte||nN&&dd(new nN)!=Qte)&&(dd=function(t){var e=Fte(t),r=e==cVe?t.constructor:void 0,o=r?Hy(r):"";if(o)switch(o){case uVe:return Rte;case AVe:return bte;case fVe:return xte;case pVe:return kte;case hVe:return Qte}return e});Tte.exports=dd});var qte=_((TFt,Hte)=>{var iN=HD(),gVe=jL(),dVe=kee(),mVe=Ete(),Lte=qI(),Nte=ql(),Ote=OI(),yVe=zD(),EVe=1,Mte="[object Arguments]",Ute="[object Array]",XD="[object Object]",CVe=Object.prototype,_te=CVe.hasOwnProperty;function wVe(t,e,r,o,a,n){var u=Nte(t),A=Nte(e),p=u?Ute:Lte(t),h=A?Ute:Lte(e);p=p==Mte?XD:p,h=h==Mte?XD:h;var E=p==XD,I=h==XD,v=p==h;if(v&&Ote(t)){if(!Ote(e))return!1;u=!0,E=!1}if(v&&!E)return n||(n=new iN),u||yVe(t)?gVe(t,e,r,o,a,n):dVe(t,e,p,r,o,a,n);if(!(r&EVe)){var x=E&&_te.call(t,"__wrapped__"),C=I&&_te.call(e,"__wrapped__");if(x||C){var F=x?t.value():t,N=C?e.value():e;return n||(n=new iN),a(F,N,r,o,n)}}return v?(n||(n=new iN),mVe(t,e,r,o,a,n)):!1}Hte.exports=wVe});var Wte=_((LFt,Yte)=>{var IVe=qte(),Gte=Vu();function jte(t,e,r,o,a){return t===e?!0:t==null||e==null||!Gte(t)&&!Gte(e)?t!==t&&e!==e:IVe(t,e,r,o,jte,a)}Yte.exports=jte});var zte=_((NFt,Kte)=>{var BVe=Wte();function vVe(t,e){return BVe(t,e)}Kte.exports=vVe});var sN=_((OFt,Jte)=>{var PVe=Xp(),DVe=function(){try{var t=PVe(Object,"defineProperty");return t({},"",{}),t}catch{}}();Jte.exports=DVe});var ZD=_((MFt,Xte)=>{var Vte=sN();function SVe(t,e,r){e=="__proto__"&&Vte?Vte(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}Xte.exports=SVe});var oN=_((UFt,Zte)=>{var bVe=ZD(),xVe=Ty();function kVe(t,e,r){(r!==void 0&&!xVe(t[e],r)||r===void 0&&!(e in t))&&bVe(t,e,r)}Zte.exports=kVe});var ere=_((_Ft,$te)=>{function QVe(t){return function(e,r,o){for(var a=-1,n=Object(e),u=o(e),A=u.length;A--;){var p=u[t?A:++a];if(r(n[p],p,n)===!1)break}return e}}$te.exports=QVe});var rre=_((HFt,tre)=>{var RVe=ere(),FVe=RVe();tre.exports=FVe});var aN=_((GI,qy)=>{var TVe=Hl(),ore=typeof GI=="object"&&GI&&!GI.nodeType&&GI,nre=ore&&typeof qy=="object"&&qy&&!qy.nodeType&&qy,LVe=nre&&nre.exports===ore,ire=LVe?TVe.Buffer:void 0,sre=ire?ire.allocUnsafe:void 0;function NVe(t,e){if(e)return t.slice();var r=t.length,o=sre?sre(r):new t.constructor(r);return t.copy(o),o}qy.exports=NVe});var $D=_((qFt,lre)=>{var are=YL();function OVe(t){var e=new t.constructor(t.byteLength);return new are(e).set(new are(t)),e}lre.exports=OVe});var lN=_((GFt,cre)=>{var MVe=$D();function UVe(t,e){var r=e?MVe(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}cre.exports=UVe});var eS=_((jFt,ure)=>{function _Ve(t,e){var r=-1,o=t.length;for(e||(e=Array(o));++r