lightly-studio 0.3.1__py3-none-any.whl → 0.3.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of lightly-studio might be problematic. Click here for more details.

Files changed (133) hide show
  1. lightly_studio/__init__.py +4 -4
  2. lightly_studio/api/app.py +1 -1
  3. lightly_studio/api/routes/api/annotation.py +6 -16
  4. lightly_studio/api/routes/api/annotation_label.py +2 -5
  5. lightly_studio/api/routes/api/annotation_task.py +4 -5
  6. lightly_studio/api/routes/api/classifier.py +2 -5
  7. lightly_studio/api/routes/api/dataset.py +2 -3
  8. lightly_studio/api/routes/api/dataset_tag.py +2 -3
  9. lightly_studio/api/routes/api/metadata.py +2 -4
  10. lightly_studio/api/routes/api/metrics.py +2 -6
  11. lightly_studio/api/routes/api/sample.py +5 -13
  12. lightly_studio/api/routes/api/settings.py +2 -6
  13. lightly_studio/api/routes/images.py +6 -6
  14. lightly_studio/core/add_samples.py +383 -0
  15. lightly_studio/core/dataset.py +250 -362
  16. lightly_studio/core/dataset_query/__init__.py +0 -0
  17. lightly_studio/core/dataset_query/boolean_expression.py +67 -0
  18. lightly_studio/core/dataset_query/dataset_query.py +211 -0
  19. lightly_studio/core/dataset_query/field.py +113 -0
  20. lightly_studio/core/dataset_query/field_expression.py +79 -0
  21. lightly_studio/core/dataset_query/match_expression.py +23 -0
  22. lightly_studio/core/dataset_query/order_by.py +79 -0
  23. lightly_studio/core/dataset_query/sample_field.py +28 -0
  24. lightly_studio/core/dataset_query/tags_expression.py +46 -0
  25. lightly_studio/core/sample.py +159 -32
  26. lightly_studio/core/start_gui.py +35 -0
  27. lightly_studio/dataset/edge_embedding_generator.py +13 -8
  28. lightly_studio/dataset/embedding_generator.py +2 -3
  29. lightly_studio/dataset/embedding_manager.py +74 -6
  30. lightly_studio/dataset/fsspec_lister.py +275 -0
  31. lightly_studio/dataset/loader.py +49 -30
  32. lightly_studio/dataset/mobileclip_embedding_generator.py +6 -4
  33. lightly_studio/db_manager.py +145 -0
  34. lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/SelectableSvgGroup.BBm0IWdq.css +1 -0
  35. lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/SelectableSvgGroup.BNTuXSAe.css +1 -0
  36. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/2O287xak.js +3 -0
  37. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/{O-EABkf9.js → 7YNGEs1C.js} +1 -1
  38. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/BBoGk9hq.js +1 -0
  39. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/BRnH9v23.js +92 -0
  40. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/Bg1Y5eUZ.js +1 -0
  41. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/{DOlTMNyt.js → BqBqV92V.js} +1 -1
  42. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/C0JiMuYn.js +1 -0
  43. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/{DjfY96ND.js → C98Hk3r5.js} +1 -1
  44. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/{r64xT6ao.js → CG0dMCJi.js} +1 -1
  45. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/{C8I8rFJQ.js → Ccq4ZD0B.js} +1 -1
  46. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/Cpy-nab_.js +1 -0
  47. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/{Bu7uvVrG.js → Crk-jcvV.js} +1 -1
  48. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/Cs31G8Qn.js +1 -0
  49. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CsKrY2zA.js +1 -0
  50. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/{x9G_hzyY.js → Cur71c3O.js} +1 -1
  51. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CzgC3GFB.js +1 -0
  52. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/D8GZDMNN.js +1 -0
  53. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DFRh-Spp.js +1 -0
  54. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/{BylOuP6i.js → DRZO-E-T.js} +1 -1
  55. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/{l7KrR96u.js → DcGCxgpH.js} +1 -1
  56. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/{Bsi3UGy5.js → Df3aMO5B.js} +1 -1
  57. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/{hQVEETDE.js → DkR_EZ_B.js} +1 -1
  58. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DqUGznj_.js +1 -0
  59. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/KpAtIldw.js +1 -0
  60. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/M1Q1F7bw.js +4 -0
  61. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/{CDnpyLsT.js → OH7-C_mc.js} +1 -1
  62. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/{D6su9Aln.js → gLNdjSzu.js} +1 -1
  63. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/i0ZZ4z06.js +1 -0
  64. lightly_studio/dist_lightly_studio_view_app/_app/immutable/entry/app.BI-EA5gL.js +2 -0
  65. lightly_studio/dist_lightly_studio_view_app/_app/immutable/entry/start.CcsRl3cZ.js +1 -0
  66. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/0.BbO4Zc3r.js +1 -0
  67. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/{1.B4rNYwVp.js → 1._I9GR805.js} +1 -1
  68. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/10.J2RBFrSr.js +1 -0
  69. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/12.Cmqj25a-.js +1 -0
  70. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/2.C45iKJHA.js +6 -0
  71. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/{3.CWHpKonm.js → 3.w9g4AcAx.js} +1 -1
  72. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/{4.OUWOLQeV.js → 4.BBI8KwnD.js} +1 -1
  73. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/5.huHuxdiF.js +1 -0
  74. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/6.CrbkRPam.js +1 -0
  75. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/7.FomEdhD6.js +1 -0
  76. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/8.Cb_ADSLk.js +1 -0
  77. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/{9.CPu3CiBc.js → 9.CajIG5ce.js} +1 -1
  78. lightly_studio/dist_lightly_studio_view_app/_app/version.json +1 -1
  79. lightly_studio/dist_lightly_studio_view_app/index.html +14 -14
  80. lightly_studio/examples/example.py +13 -12
  81. lightly_studio/examples/example_coco.py +13 -0
  82. lightly_studio/examples/example_metadata.py +83 -98
  83. lightly_studio/examples/example_selection.py +7 -19
  84. lightly_studio/examples/example_split_work.py +12 -36
  85. lightly_studio/examples/{example_v2.py → example_yolo.py} +3 -4
  86. lightly_studio/models/annotation/annotation_base.py +7 -8
  87. lightly_studio/models/annotation/instance_segmentation.py +8 -8
  88. lightly_studio/models/annotation/object_detection.py +4 -4
  89. lightly_studio/models/dataset.py +6 -2
  90. lightly_studio/models/sample.py +10 -3
  91. lightly_studio/resolvers/dataset_resolver.py +10 -0
  92. lightly_studio/resolvers/embedding_model_resolver.py +22 -0
  93. lightly_studio/resolvers/sample_resolver.py +53 -9
  94. lightly_studio/resolvers/tag_resolver.py +23 -0
  95. lightly_studio/selection/select.py +55 -46
  96. lightly_studio/selection/select_via_db.py +23 -19
  97. lightly_studio/selection/selection_config.py +6 -3
  98. lightly_studio/services/annotations_service/__init__.py +4 -0
  99. lightly_studio/services/annotations_service/update_annotation.py +21 -32
  100. lightly_studio/services/annotations_service/update_annotation_bounding_box.py +36 -0
  101. lightly_studio-0.3.2.dist-info/METADATA +689 -0
  102. {lightly_studio-0.3.1.dist-info → lightly_studio-0.3.2.dist-info}/RECORD +104 -91
  103. lightly_studio/api/db.py +0 -133
  104. lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/SelectableSvgGroup.OwPEPQZu.css +0 -1
  105. lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/SelectableSvgGroup.b653GmVf.css +0 -1
  106. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/B2FVR0s0.js +0 -1
  107. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/B9zumHo5.js +0 -1
  108. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/BJXwVxaE.js +0 -1
  109. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/Bx1xMsFy.js +0 -1
  110. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CcaPhhk3.js +0 -1
  111. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CvOmgdoc.js +0 -93
  112. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CxtLVaYz.js +0 -3
  113. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/D5-A_Ffd.js +0 -4
  114. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/D6RI2Zrd.js +0 -1
  115. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/D98V7j6A.js +0 -1
  116. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DIRAtgl0.js +0 -1
  117. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DjUWrjOv.js +0 -1
  118. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/XO7A28GO.js +0 -1
  119. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/nAHhluT7.js +0 -1
  120. lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/vC4nQVEB.js +0 -1
  121. lightly_studio/dist_lightly_studio_view_app/_app/immutable/entry/app.CjnvpsmS.js +0 -2
  122. lightly_studio/dist_lightly_studio_view_app/_app/immutable/entry/start.0o1H7wM9.js +0 -1
  123. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/0.XRq_TUwu.js +0 -1
  124. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/10.DfBwOEhN.js +0 -1
  125. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/12.CwF2_8mP.js +0 -1
  126. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/2.CS4muRY-.js +0 -6
  127. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/5.Dm6t9F5W.js +0 -1
  128. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/6.Bw5ck4gK.js +0 -1
  129. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/7.CF0EDTR6.js +0 -1
  130. lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/8.Cw30LEcV.js +0 -1
  131. lightly_studio-0.3.1.dist-info/METADATA +0 -520
  132. /lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/{OpenSans- → OpenSans-Medium.DVUZMR_6.ttf} +0 -0
  133. {lightly_studio-0.3.1.dist-info → lightly_studio-0.3.2.dist-info}/WHEEL +0 -0
@@ -1 +0,0 @@
1
- import"./CWj6FrbW.js";import{p as U,c as V,g as t,d as W,r as j,t as Y,a as q,L as v,V as x,z as Me,u as N,f as oe,s as re}from"./l7KrR96u.js";import{n as ze,a as p,t as C,c as de}from"./Bu7uvVrG.js";import{a as o,s as ge,i as me}from"./XO7A28GO.js";import{u as We,e as De,i as Ge,s as k,a as Ee,c as Te,b as Be,d as Ne,f as Ue,g as Ye,h as qe,G as Je,j as Ke,S as Qe,k as Xe}from"./CvOmgdoc.js";import{p as ue,r as Ze,a as w,b as $e}from"./D98V7j6A.js";import{u as _e}from"./vC4nQVEB.js";import{o as ve}from"./CxtLVaYz.js";import{r as et}from"./H7C68rOM.js";import{u as tt}from"./D6su9Aln.js";import{u as at,c as ce}from"./x9G_hzyY.js";import"./Bsi3UGy5.js";import"./69_IOA4Y.js";import{u as st}from"./DIRAtgl0.js";import{P as it}from"./BJXwVxaE.js";import{S as nt}from"./B2FVR0s0.js";import{r as fe}from"./Bx1xMsFy.js";import{r as lt}from"./DjfY96ND.js";var ot=ze('<svg style="position: absolute; top: 0; left: 0;"><g></g></svg>');function rt(H,e){U(e,!0);const[a,A]=ge(),I=()=>o(P,"$isHidden",a),y=ue(e,"sampleImageObjectFit",3,"contain"),{isHidden:P}=We(),h=W(()=>e.sample.annotations.filter(c=>c.annotation_type!=="classification"));var s=ot(),d=V(s);let m;De(d,21,()=>t(h),Ge,(c,L)=>{nt(c,{get annotation(){return t(L)},get showLabel(){return e.showLabel},get imageWidth(){return e.sample.width}})}),j(d),j(s),Y(c=>{k(s,"viewBox",`0 0 ${e.sample.width} ${e.sample.height}`),k(s,"preserveAspectRatio",y()==="contain"?"xMidYMid meet":"xMidYMid slice"),k(s,"width",e.containerWidth),k(s,"height",e.containerHeight),m=Ee(d,0,"",null,m,c)},[()=>({invisible:I()})]),p(H,s),q(),A()}var dt=C("<img>");function mt(H,e){U(e,!0);const a=ue(e,"objectFit",3,"contain"),A=Ze(e,["$$slots","$$events","$$legacy","sample","objectFit"]),{class:I,...y}=A,{getDatasetVersion:P}=_e();let h=x("");ve(async()=>{var m;(m=e.sample)!=null&&m.dataset_id&&v(h,w(await P(e.sample.dataset_id)))});var s=dt();let d;Y(m=>d=Be(s,d,{src:`${it}/sample/${e.sample.sample_id}${t(h)?`?v=${t(h)}`:""}`,alt:e.sample.file_path_abs,class:m,style:`--object-fit: ${a()??""}`,loading:"lazy",...y},"svelte-1c6bz0a"),[()=>Te("sample-image rounded-lg bg-black",I)]),lt(s),p(H,s),q()}var ct=C('<div class="relative"><div class="absolute right-7 top-1 z-10"><!></div> <a data-testid="sample-link" class="block"><!> <!></a></div>'),ft=C('<div slot="noMore"></div>'),gt=C('<div slot="noResults"></div>'),ut=C('<div class="viewport flex-1 svelte-gzepom"><!></div>'),_t=C('<div class="flex h-full w-full items-center justify-center"><div>Loading...</div></div>');function Lt(H,e){U(e,!0);const[a,A]=ge(),I=()=>o(he,"$gridViewSampleRenderingStore",a),y=()=>o(Ie,"$infiniteLoaderIdentifier",a),P=()=>o(Q,"$dimensions",a),h=()=>o(Z,"$isCreateClassifiersPanelOpen",a),s=()=>o($,"$isRefineClassifiersPanelOpen",a),d=()=>o(ee,"$classifierSamples",a),m=()=>o(X,"$metadataValues",a),c=()=>o(e.textEmbedding,"$textEmbedding",a),L=()=>o(e.selectedAnnotationFilterIds,"$selectedAnnotationFilterIds",a),J=()=>o(K,"$tagsSelected",a),pe=()=>o(be,"$selectedSampleIds",a),{gridViewSampleRenderingStore:he}=Ne(),{tagsSelected:K}=st({dataset_id:e.dataset_id,kind:["sample"]}),{dimensionsValues:Q}=tt(),{metadataValues:X}=at(e.dataset_id),{isCreateClassifiersPanelOpen:Z}=Ue(),{isRefineClassifiersPanelOpen:$}=Ye(),{selectedSampleIds:be,classifierSamples:ee,toggleSampleSelection:Se,getDatasetVersion:xe,setSamplesTotalCount:we}=_e();let Ie=Me([e.selectedAnnotationFilterIds,K,Q,X,e.textEmbedding,Z,$,ee],([i,n,r,l,u,F,ie,S])=>i.join(",")+Array.from(n).join(",")+r.min_width+r.max_width+r.min_height+r.max_height+JSON.stringify(l)+(u?u.queryText:"")+(F?"open":"closed")+(ie?"open":"closed")+(S?`${S.positiveSampleIds.join(",")},${S.negativeSampleIds.join(",")}`:"")),R=x(0);const M=100;let g=x(w([])),b=x(null),te=x(!1),D=x(w(I())),G=x(0);ve(async()=>{await xe(e.dataset_id),v(te,!0)}),N(()=>{v(D,w(I()))}),N(()=>{y(),v(g,w([])),v(R,0)}),N(()=>{if(!t(b))return;v(G,w(t(b).clientHeight));const i=new ResizeObserver(()=>{t(b)&&v(G,w(t(b).clientHeight))});return i.observe(t(b)),()=>{i.disconnect()}});async function ye({detail:{loaded:i,complete:n}}){const r=P();let l;if(h()||s()){if(!d()){n();return}const u=[...d().positiveSampleIds,...d().negativeSampleIds];if(u.length===0){n();return}const{data:F}=await fe({path:{dataset_id:e.dataset_id},body:{filters:{metadata_filters:ce(m())},text_embedding:c()?c().embedding:void 0,sample_ids:u,pagination:{offset:t(R),limit:M}}});l=F}else{const{data:u}=await fe({path:{dataset_id:e.dataset_id},body:{filters:{annotation_label_ids:L().length>0?L():void 0,tag_ids:J().size>0?Array.from(J()):void 0,width:{min:r.min_width,max:r.max_width},height:{min:r.min_height,max:r.max_height},metadata_filters:ce(m())},text_embedding:c()?c().embedding:void 0,pagination:{offset:t(R),limit:M}}});l=u}l!=null&&l.data.length?(v(R,t(R)+M),t(g).push(...l.data),we(l.total_count),l.data.length<M?n():i()):n()}const ae=16,Fe=qe(),[je,vt]=Fe;var se=de(),Ce=oe(se);{var He=i=>{var n=ut(),r=V(n);const l=W(()=>e.sampleHeight+ae),u=W(()=>e.sampleWidth+ae);Je(r,{get itemCount(){return t(g).length},get itemHeight(){return t(l)},get itemWidth(){return t(u)},get height(){return t(G)},class:"overflow-none overflow-y-auto dark:[color-scheme:dark]",get style(){return`--sample-width: ${e.sampleWidth??""}px; --sample-height: ${e.sampleHeight??""}px;`},overScan:100,item:(S,f)=>{let _=()=>f==null?void 0:f().index,O=()=>f==null?void 0:f().style;var ne=de(),Pe=oe(ne);{var Re=E=>{var z=ct(),T=V(z),Oe=V(T);const Ve=W(()=>pe().has(t(g)[_()].sample_id));Qe(Oe,{onSelect:()=>Se(t(g)[_()].sample_id),get isSelected(){return t(Ve)}}),j(T);var B=re(T,2),le=V(B);mt(le,{get sample(){return t(g)[_()]},get objectFit(){return t(D)}});var ke=re(le,2);rt(ke,{get sample(){return t(g)[_()]},get containerWidth(){return e.sampleWidth},get sampleImageObjectFit(){return t(D)},get containerHeight(){return e.sampleHeight}}),j(B),j(z),Y(Le=>{Xe(z,O()),k(B,"href",Le)},[()=>je(et.toSample({sampleId:t(g)[_()].sample_id,datasetId:e.dataset_id,sampleIndex:_()}),void 0)]),p(E,z)};me(Pe,E=>{t(g)[_()]&&E(Re)})}p(S,ne)},footer:S=>{Ke(S,{get identifier(){return y()},$$events:{infinite:ye},$$slots:{noMore:(f,_)=>{var O=ft();p(f,O)},noResults:(f,_)=>{var O=gt();p(f,O)}}})},$$slots:{item:!0,footer:!0}}),j(n),$e(n,F=>v(b,F),()=>t(b)),p(i,n)},Ae=i=>{var n=_t();p(i,n)};me(Ce,i=>{t(te)?i(He):i(Ae,!1)})}p(H,se),q(),A()}export{Lt as S};